如何在相对于观看方向的地形中移动
How to move around in a terrain with respect to the viewing direction
我想在地形(δx,m_mouseMovement
的δ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);
相关文章:
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- OpenVR:向视图方向移动
- 如何在相对于观看方向的地形中移动
- OpenGL:在那个方向上旋转和移动
- OpenGL沿方向矢量移动播放器
- 如何朝面向方向移动第一人称对象?(C )
- 如何在C++中沿对象所面对的方向在三维环境中移动对象
- 根据触摸位置确定移动方向
- C++位向哪个方向移动
- c++ tron 播放器光循环向一个方向移动
- 相对于其数据在特定方向上移动的有效方法是什么
- 围绕一个点(行星)向不同方向移动
- QML:如何在不实际移动任何可见组件的情况下,在鼠标Aeria顶部获取鼠标移动的方向
- OpenGL-在随机方向上移动的对象
- 对象不沿其面向的方向移动,除非旋转为 0 度或 180 度
- 如何加快R代码在特定方向上移动矩阵元素-Rccp
- 特定方向上的二维移动
- 由数字围绕矩形按顺时针方向移动组成的图案(长度和宽度每次递减)
- 2d角色只能朝一个方向移动