欧拉角到OpenGL方向向量?

问题描述

我目前正在 minecraft 克隆中进行块破坏。为此,我想使用相机的欧拉角来确定相机光线的方向向量。

我有两个角度:俯仰和偏航。 Pitch 沿 X 轴旋转,当玩家向下看时为正,当玩家向上看时为负。不能大于90度(直视),不能小于-90度(直视)

Yaw 沿 Y 轴旋转。它可以是负数和正数,具体取决于玩家转身的次数和方向。例如,玩家在 (yaw = 0) 中生成并立即逆时针旋转 360 度。在这种情况下,yaw = -360.

如问题中所述,我使用的是 OpenGL,因此当 yaw = 0 时,播放器向下看负 Z 轴。

如何仅使用具有上述限制的欧拉角生成方向向量(必须是单位向量)?

解决方法

根据您对 Pitch 和 Yaw 的描述,我假设您使用的是左手参考(pitch=0 和 yaw=0 给出了一个相机向量(0.0、0.0、1.0)。

Pitch 参数在 YZ 平面中移动相机矢量:

Y = cos(pitchInRadians)
Z = sin(pitchInRadians)

Yaw 参数在 XZ 平面中移动相机矢量:

X = sin(yawInRadians)
Z = cos(yawInRadians)

将两者结合起来可以为您提供最终的相机矢量:

Cv = (sin(yaw),cos(pitch),sin(pitch)*cos(yaw))

正如您应该注意到的,角度以弧度为单位。由于您的帖子以度为单位提到了角度,因此您必须先将度角转换为弧度:

radians = (degrees * PI) /180