fix: Fix erratic camera distance during rotation

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-17 13:14:24 -07:00
parent 94304bd2e3
commit 08820659d4

View File

@@ -87,7 +87,17 @@ void Camera::wheelEvent(QWheelEvent* event, const QVector3D& worldPos)
QMatrix4x4 Camera::modelViewMatrix() const QMatrix4x4 Camera::modelViewMatrix() const
{ {
QMatrix4x4 model; 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) { if (m_isRotating) {
model.translate(m_rotationPivot); model.translate(m_rotationPivot);
@@ -237,7 +247,6 @@ void Camera::startRotation(const QVector3D& pivot)
setPanX(m_panX + p_diff.x()); setPanX(m_panX + p_diff.x());
setPanY(m_panY + p_diff.y()); setPanY(m_panY + p_diff.y());
setZoom(m_zoom + p_diff.z());
m_isRotating = true; m_isRotating = true;
} }
@@ -257,7 +266,6 @@ void Camera::stopRotation()
setPanX(m_panX - p_diff.x()); setPanX(m_panX - p_diff.x());
setPanY(m_panY - p_diff.y()); setPanY(m_panY - p_diff.y());
setZoom(m_zoom - p_diff.z());
m_isRotating = false; m_isRotating = false;
} }