summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mazescene.cpp28
-rw-r--r--modelitem.cpp15
2 files changed, 22 insertions, 21 deletions
diff --git a/mazescene.cpp b/mazescene.cpp
index 46c1acb..2ac0f2c 100644
--- a/mazescene.cpp
+++ b/mazescene.cpp
@@ -376,13 +376,12 @@ void Camera::updateMatrix() const
m_matrixDirty = false;
QMatrix4x4 m;
- m = QMatrix4x4().translate(-m_pos.x(), 0.04 * qSin(10 * m_time) + 0.1, -m_pos.y()) * m;
- m = fromRotation(m_yaw + 180, Qt::YAxis) * m;
- m = QMatrix4x4().scale(-1, 1, 1) * m;
+ m.scale(-1, 1, 1);
+ m *= fromRotation(m_yaw + 180, Qt::YAxis);
+ m.translate(-m_pos.x(), 0.04 * qSin(10 * m_time) + 0.1, -m_pos.y());
m = fromRotation(m_pitch, Qt::XAxis) * m;
m_viewMatrix = m;
- m = fromProjection(m_fov) * m;
- m_viewProjectionMatrix = m;
+ m_viewProjectionMatrix = fromProjection(m_fov) * m_viewMatrix;
}
void MazeScene::drawBackground(QPainter *painter, const QRectF &)
@@ -402,18 +401,18 @@ void MazeScene::drawBackground(QPainter *painter, const QRectF &)
QMatrix4x4 m = m_camera.viewProjectionMatrix();
- QMatrix4x4 floorMatrix = fromRotation(90, Qt::XAxis);
- floorMatrix = QMatrix4x4().translate(0, 0.5, 0) * floorMatrix;
- floorMatrix = m * floorMatrix;
+ QMatrix4x4 floorMatrix = m;
+ floorMatrix.translate(0, 0.5, 0);
+ floorMatrix *= fromRotation(90, Qt::XAxis);
painter->save();
painter->setTransform(floorMatrix.toTransform(0), true);
painter->fillRect(r, floorBrush);
painter->restore();
- QMatrix4x4 ceilingMatrix = fromRotation(90, Qt::XAxis);
- ceilingMatrix = QMatrix4x4().translate(0, -0.5, 0) * ceilingMatrix;
- ceilingMatrix = m * ceilingMatrix;
+ QMatrix4x4 ceilingMatrix = m;
+ ceilingMatrix.translate(0, -0.5, 0);
+ ceilingMatrix *= fromRotation(90, Qt::XAxis);
painter->save();
painter->setTransform(ceilingMatrix.toTransform(0), true);
@@ -699,10 +698,9 @@ void ProjectedItem::updateTransform(const Camera &camera)
QPointF cb = rotation.map(m_b);
if (ca.y() > 0 || cb.y() > 0) {
- QMatrix4x4 m;
- m = fromRotation(-QLineF(m_b, m_a).angle(), Qt::YAxis) * m;
- m = QMatrix4x4().translate(center.x(), 0, center.y()) * m;
- m = camera.viewProjectionMatrix() * m;
+ QMatrix4x4 m = camera.viewProjectionMatrix();
+ m.translate(center.x(), 0, center.y());
+ m *= fromRotation(-QLineF(m_b, m_a).angle(), Qt::YAxis);
qreal zm = QLineF(camera.pos(), center).length();
diff --git a/modelitem.cpp b/modelitem.cpp
index 4448519..6265e98 100644
--- a/modelitem.cpp
+++ b/modelitem.cpp
@@ -52,7 +52,9 @@ void ModelItem::updateTransform(const Camera &camera)
ProjectedItem::updateTransform(camera);
setTransform(QTransform());
- m_matrix = camera.viewMatrix() * QMatrix4x4().translate(3, 0, 7);
+
+ m_matrix = camera.viewMatrix();
+ m_matrix.translate(3, 0, 7);
}
QRectF ModelItem::boundingRect() const
@@ -107,7 +109,8 @@ void ModelItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidg
QVector3D size = m_model->size();
float extent = qSqrt(2.0);
float scale = 1 / qMax(size.y(), qMax(size.x() / extent, size.z() / extent));
- QMatrix4x4 modelMatrix = QMatrix4x4().scale(scale, -scale, scale);
+ QMatrix4x4 modelMatrix;
+ modelMatrix.scale(scale, -scale, scale);
modelMatrix = fromRotation(m_rotation.z(), Qt::ZAxis) * modelMatrix;
modelMatrix = fromRotation(m_rotation.y(), Qt::YAxis) * modelMatrix;
@@ -145,8 +148,8 @@ void ModelItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidg
glewInit();
#endif
m_program = new QGLShaderProgram;
- m_program->addShader(QGLShader::FragmentShader, fragmentProgram);
- m_program->addShader(QGLShader::VertexShader, vertexProgram);
+ m_program->addShaderFromSourceCode(QGLShader::Fragment, fragmentProgram);
+ m_program->addShaderFromSourceCode(QGLShader::Vertex, vertexProgram);
m_program->bindAttributeLocation("vertexCoordsArray", 0);
m_program->bindAttributeLocation("normalCoordsArray", 1);
m_program->link();
@@ -162,12 +165,12 @@ void ModelItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidg
0, 0, 0, 1
};
- m_program->enable();
+ m_program->bind();
m_program->setUniformValue("color", m_modelColor);
m_program->setUniformValue("pmvMatrix", QMatrix4x4(ortho) * projectionMatrix * m_matrix * modelMatrix);
m_program->setUniformValue("modelMatrix", modelMatrix);
m_model->render(m_wireframeEnabled, m_normalsEnabled);
- m_program->disable();
+ m_program->release();
painter->endNativePainting();
#endif