[英]How to move around in a terrain with respect to the viewing direction
我想相对于当前查看方向在地形(delta x, m_mouseMovement
delta y)中向左/向右,向前/向后移动。 以下代码适用于缩放(鼠标滚轮)。 但是,仅当观看方向恰好沿x轴移动时,运动才有效:
Vector3D m_position;
Vector2D m_mouseMovement; // delta x,y amount the mouse was moved on the screen
int m_mouseWheelSteps;
QVector3D direction(...);
QVector3D right(...);
QVector3D up = QVector3D::crossProduct(right, direction);
m_position += m_mouseWheelSteps * direction; // zoom in and out; ok
// m_position += Vector3D(m_mouseMovement.x*right.x, 0, m_mouseMovement.z*right.z); // does not work properly; it always moves along the x/z axis
QMatrix4x4 modelMatrix;
//modelMatrix.scale, translate, etc. the terrain
QMatrix4x4 viewMatrix;
viewMatrix.lookAt(m_position, m_position+direction, up);
QMatrix4x4 mvMatrix = viewMatrix * modelMatrix;
QMatrix4x4 projectionMatrix;
projectionMatrix.perspective(...);
QMatrix4x4 mvpMatrix = projectionMatrix*mvMatrix;
我无法理解如何使它正常工作,使运动独立于观看方向?
简单的解决方案:
m_position += m_mouseMovement.x*Vector3D(right.x, 0, right.z);
//m_position += m_mouseMovement.y*Vector3D(up.x, 0, up.z);
m_position += m_mouseMovement.z*Vector3D(direction.x, 0, direction.z);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.