【发布时间】:2014-02-24 12:42:48
【问题描述】:
我在我的程序中使用鼠标来控制相机旋转(使用 Directx 9.0c)。鼠标 X 控制相机围绕上矢量旋转,鼠标 Y 控制围绕右矢量旋转。旋转计算如下:
void Camera::RotateCameraUp(float angle)
{
D3DXMATRIX RoMatrix;
D3DXMatrixRotationAxis(&RoMatrix, &vUp, angle);
D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix);
D3DXVec3TransformCoord(&vRight, &vRight, &RoMatrix);
}
void Camera::RotateCameraRight(float angle)
{
D3DXMATRIX RoMatrix;
D3DXMatrixRotationAxis(&RoMatrix, &vRight, angle);
D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix);
D3DXVec3TransformCoord(&vUp, &vUp, &RoMatrix);
}
假设围绕Up或Right向量的旋转不应该导致围绕“LookAt”向量的旋转,但是如果我将鼠标转一圈并在起点停止它,则旋转“LookAt”向量已经发生。我认为这是因为计算时出错,但我不知道如何消除或控制它。有什么想法吗?
【问题讨论】:
-
您可能想尝试在第一种方法中旋转
(0, 1, 0)。 -
@NicoSchertler:事实上,我确实想围绕 vUp 而不是 (0,1,0) 旋转。我在回复 cdoubleplusgood 时解释了我的错误。感谢您的帮助