fix: Fix erratic camera distance during rotation
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user