1

我有一个用 C# 编写的四元数相机(无耻地取自在线教程)。我正在尝试将相机在世界空间中的位置(表示为 Vector3)沿相机“面向”的方向平移。但是,我希望相机在 Y 轴上保持固定高度(假设相机永远不会“倒置”,因为它可能不会旋转到垂直向上或向下看 Y 轴)。

简而言之,我希望相机的行为方式与 RTS 游戏(例如命令与征服)中的相机类似。向前按应该会使您“向上”移动地图,保持在地形上方的恒定高度。下面给出的我的幼稚尝试是不够的,因为相机的速度是由相机俯视世界的角度决定的。

var Y = mPosition.Y;
mPosition += mInverseViewMatrix.Backward * amount;
mPosition.Y = Y;

在上面,mPosition 是一个代表世界位置的 Vector3。mInverseViewMatrix 是视图矩阵的逆矩阵。

我正在使用 XNA 和 C#,但任何关于四元数和矢量操作的一般建议都可能有用。

4

1 回答 1

1

我已经通过两种方式处理了这个问题。

1)使用四元数旋转指向“向前”的单位向量,使其指向适当的方向。将向量的y分量清零。重新归一化向量。乘以速度并添加到当前位置。

编辑 2)制作四元数的副本。将四元数的xz分量清零。重新归一化四元数。通过四元数旋转单位向量,乘以速度,并添加到位置。旋转的四元数表示是修改后的轴角表示。因此,如果您将发生旋转的轴的“x”和“z”部分归零,那么剩下的唯一旋转就是“偏航”围绕 y 轴的旋转(假设“向前”与 z 对齐-轴)。

于 2011-04-01T02:43:12.937 回答