我有一个用 C# 编写的四元数相机(无耻地取自在线教程)。我正在尝试将相机在世界空间中的位置(表示为 Vector3)沿相机“面向”的方向平移。但是,我希望相机在 Y 轴上保持固定高度(假设相机永远不会“倒置”,因为它可能不会旋转到垂直向上或向下看 Y 轴)。
简而言之,我希望相机的行为方式与 RTS 游戏(例如命令与征服)中的相机类似。向前按应该会使您“向上”移动地图,保持在地形上方的恒定高度。下面给出的我的幼稚尝试是不够的,因为相机的速度是由相机俯视世界的角度决定的。
var Y = mPosition.Y;
mPosition += mInverseViewMatrix.Backward * amount;
mPosition.Y = Y;
在上面,mPosition 是一个代表世界位置的 Vector3。mInverseViewMatrix 是视图矩阵的逆矩阵。
我正在使用 XNA 和 C#,但任何关于四元数和矢量操作的一般建议都可能有用。