【发布时间】:2015-08-04 14:13:24
【问题描述】:
我正在为一个班级项目制作一个 FPS 风格的相机。我目前正在使用 2 个 Vec3 来保持相机的位置和旋转。使用我当前的代码,我只能相对于全局轴进行平移,而不是在我当前面对的方向上。如何使用相机的旋转来向我想要的方向平移?例如:按“W”会使相机沿其局部 Z 轴向前平移。
camMat = Matrix4Identity();
//Input for camera
if (GetAsyncKeyState('Q'))
{
camRot.y += 60.0f*timer.Delta();
}
if (GetAsyncKeyState('E'))
{
camRot.y -= 60.0f*timer.Delta();
}
if (GetAsyncKeyState('W'))
{
camPos.z += 4.0f*timer.Delta();
}
if (GetAsyncKeyState('S'))
{
camPos.z -= 4.0f*timer.Delta();
}
if (GetAsyncKeyState('A'))
{
camPos.x -= 4.0f*timer.Delta();
}
if (GetAsyncKeyState('D'))
{
camPos.x += 4.0f*timer.Delta();
}
camMat = Matrix4Multiply(camMat, Matrix4RotationX(camRot.x));
camMat = Matrix4Multiply(camMat, Matrix4RotationY(camRot.y));
camMat = Matrix4Multiply(camMat, Matrix4RotationZ(camRot.z));
camMat = Matrix4Multiply(camMat, Matrix4Translate(camPos.x, camPos.y, camPos.z));
编辑:我确实在 SO 上看到了很多类似的问题,但它们似乎都使用了对我没有意义的略有不同的实现。
【问题讨论】:
-
这真的是一道数学题,而不是 C++ 题。如果我对 LA 的记忆没有让我失望(很可能),你应该能够将你的方向向量与你的旋转矩阵相乘以获得旋转的方向。