diff --git a/src/Camera.cpp b/src/Camera.cpp index a28ffdc..d9bbf76 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -87,7 +87,17 @@ void Camera::wheelEvent(QWheelEvent* event, const QVector3D& worldPos) QMatrix4x4 Camera::modelViewMatrix() const { QMatrix4x4 model; - model.translate(m_panX, m_panY, m_zoom); + float effectiveZoom = m_zoom; + + if (m_isRotating) { + QMatrix4x4 rotation; + rotation.rotate(m_xRot / 16.0f, 1, 0, 0); + rotation.rotate(m_yRot / 16.0f, 0, 1, 0); + QVector3D p_rotated = rotation.map(m_rotationPivot); + effectiveZoom += (p_rotated - m_rotationPivot).z(); + } + + model.translate(m_panX, m_panY, effectiveZoom); if (m_isRotating) { model.translate(m_rotationPivot); @@ -237,7 +247,6 @@ void Camera::startRotation(const QVector3D& pivot) setPanX(m_panX + p_diff.x()); setPanY(m_panY + p_diff.y()); - setZoom(m_zoom + p_diff.z()); m_isRotating = true; } @@ -257,7 +266,6 @@ void Camera::stopRotation() setPanX(m_panX - p_diff.x()); setPanY(m_panY - p_diff.y()); - setZoom(m_zoom - p_diff.z()); m_isRotating = false; }