我正在尝试在 OpenGL 的各个轴上获取相机旋转(但具体使用 Java、LWJGL 和 jME)。相机对象允许我将方向作为 Vector3f,但这似乎无法获得组件化的旋转;每个轴似乎都与另一个轴相关联。我发现带有偏移角度分量的 toAngleAxis 是一种快速破解方法,但在大多数情况下无法正常工作。不幸的是,我的数学不太好,否则我可能能够解决这个问题:) 同样,我只需要分量化的 X、Y 和 Z 轴,并以弧度表示,从 0 弧度到 2 PI 弧度。
任何人都可以帮忙吗?
提前干杯和感谢,克里斯
我正在尝试在 OpenGL 的各个轴上获取相机旋转(但具体使用 Java、LWJGL 和 jME)。相机对象允许我将方向作为 Vector3f,但这似乎无法获得组件化的旋转;每个轴似乎都与另一个轴相关联。我发现带有偏移角度分量的 toAngleAxis 是一种快速破解方法,但在大多数情况下无法正常工作。不幸的是,我的数学不太好,否则我可能能够解决这个问题:) 同样,我只需要分量化的 X、Y 和 Z 轴,并以弧度表示,从 0 弧度到 2 PI 弧度。
任何人都可以帮忙吗?
提前干杯和感谢,克里斯
我建议阅读有关欧拉角、偏航/俯仰/滚动和四元数方向的信息。这些主题将帮助您了解所涉及的所有内容。如果我理解正确,您正在尝试从指定的方向构造欧拉角。
有关使用欧拉角的一些算法,请参阅此代码。特别是,我相信您想要的是 setDirection 方法。
这将为您提供来自方向矢量的偏航和俯仰。请注意,您只需要 2 次旋转,因为“滚动”需要围绕方向矢量(或您的方向指定为单个四元数旋转)进行旋转。
获得旋转角度只需将笛卡尔坐标中给出的视图向量转换为球坐标。您可以在wikipedia中找到公式。
viewvector = <x, y, z>
r = sqrt(x² + y² + z²)
phi = arctan2(y, x)
theta = arccos(z / r)
请注意,您只能从视图向量中获得两个旋转角度。获得第三个旋转角度需要知道投影平面 x 或 y 轴。