Rotation is now applied by moving the camera rather than the meshes.

This commit is contained in:
David Williams 2014-05-22 16:51:41 +02:00
parent 7d55e00f76
commit 16cbb94d90
2 changed files with 19 additions and 16 deletions

View File

@ -129,15 +129,6 @@ void OpenGLWidget::initializeGL()
std::cerr << shader.log().toStdString() << std::endl; std::cerr << shader.log().toStdString() << std::endl;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
shader.bind();
QMatrix4x4 worldToCameraMatrix{};
worldToCameraMatrix.translate(0, 0, -50); //Move the camera back by 50 units
shader.setUniformValue("worldToCameraMatrix", worldToCameraMatrix);
shader.release();
} }
void OpenGLWidget::resizeGL(int w, int h) void OpenGLWidget::resizeGL(int w, int h)
@ -163,9 +154,9 @@ void OpenGLWidget::paintGL()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
QMatrix4x4 modelToWorldMatrix{}; QMatrix4x4 modelToWorldMatrix{};
modelToWorldMatrix.rotate(m_xRotation, 0, 1, 0); //rotate around y-axis //modelToWorldMatrix.rotate(m_xRotation, 0, 1, 0); //rotate around y-axis
modelToWorldMatrix.rotate(m_yRotation, 1, 0, 0); //rotate around x-axis //modelToWorldMatrix.rotate(m_yRotation, 1, 0, 0); //rotate around x-axis
modelToWorldMatrix.translate(-32, -32, -32); //centre the model on the origin //modelToWorldMatrix.translate(-32, -32, -32); //centre the model on the origin
shader.bind(); shader.bind();
@ -205,5 +196,17 @@ void OpenGLWidget::mouseMoveEvent(QMouseEvent* event)
m_yRotation += diff.y(); m_yRotation += diff.y();
m_LastFrameMousePos = m_CurrentMousePos; m_LastFrameMousePos = m_CurrentMousePos;
shader.bind();
QMatrix4x4 worldToCameraMatrix{};
worldToCameraMatrix.translate(0, 0, -50); //Move the camera back by 50 units
worldToCameraMatrix.rotate(m_xRotation, 0, 1, 0); //rotate around y-axis
worldToCameraMatrix.rotate(m_yRotation, 1, 0, 0); //rotate around x-axis
worldToCameraMatrix.translate(-32, -32, -32); //centre the model on the origin
shader.setUniformValue("worldToCameraMatrix", worldToCameraMatrix);
shader.release();
update(); update();
} }

View File

@ -78,15 +78,15 @@ int main(int argc, char *argv[])
createSphereInVolume(volData, 30); createSphereInVolume(volData, 30);
// Extract the surface for the specified region of the volume. Uncomment the line for the kind of surface extraction you want to see. // Extract the surface for the specified region of the volume. Uncomment the line for the kind of surface extraction you want to see.
//auto mesh = extractCubicSurface(&volData, volData.getEnclosingRegion()); auto mesh = extractCubicSurface(&volData, volData.getEnclosingRegion());
//auto mesh = extractMarchingCubesSurface(&volData, volData.getEnclosingRegion()); //auto mesh = extractMarchingCubesSurface(&volData, volData.getEnclosingRegion());
auto mesh = extractCubicSurface(&volData, PolyVox::Region(Vector3DInt32(0, 0, 0), Vector3DInt32(31, 31, 31))); //auto mesh = extractCubicSurface(&volData, PolyVox::Region(Vector3DInt32(0, 0, 0), Vector3DInt32(31, 31, 31)));
auto mesh2 = extractCubicSurface(&volData, PolyVox::Region(Vector3DInt32(32, 32, 32), Vector3DInt32(63, 63, 63))); //auto mesh2 = extractCubicSurface(&volData, PolyVox::Region(Vector3DInt32(32, 32, 32), Vector3DInt32(63, 63, 63)));
//Pass the surface to the OpenGL window //Pass the surface to the OpenGL window
openGLWidget.setSurfaceMeshToRender(mesh); openGLWidget.setSurfaceMeshToRender(mesh);
openGLWidget.setSurfaceMeshToRender(mesh2); //openGLWidget.setSurfaceMeshToRender(mesh2);
//Run the message pump. //Run the message pump.
return app.exec(); return app.exec();