在OpenGL中获取X,Y和Z轴上的弧度相机旋转?

时间:2009-06-14 17:54:57

标签: java opengl 3d rotation jmonkeyengine

我正在尝试在OpenGL中的各个轴上获取相机旋转(但具体使用Java,LWJGL和jME)。相机对象允许我将方向作为Vector3f,但这似乎无法获得分量旋转;每个轴显示与另一个轴相关联。我发现toAngleAxis带有偏移的角度分量是一个快速的黑客,但在大多数情况下无法正常工作。不幸的是,我不太擅长数学,否则我可能已经解决了这个问题:)再次,我只需要组成X,Y和Z轴并以弧度为单位,从0弧度到2个PI弧度。

有人可以帮忙吗?

提前干杯谢谢, 克里斯

2 个答案:

答案 0 :(得分:3)

我建议阅读有关欧拉角,偏航/俯仰/滚转和四元数方向的内容。这些主题将帮助您了解所涉及的一切。如果我理解正确,你试图从指定的方向构建欧拉角。

有关使用欧拉角的信息,请参阅此code for some algorithms。特别是,我相信你想要的是setDirection方法。

这将为您提供方向矢量的偏航和俯仰。请注意,您只需要2次旋转,因为“roll”需要围绕方向矢量旋转(或指定为单个四元数旋转的方向)。

答案 1 :(得分:1)

获取旋转角度只需要将笛卡尔坐标中给出的视图矢量转换为球面坐标。您可以在wikipedia中找到公式。

viewvector = <x, y, z>

r = sqrt(x² + y² + z²)
phi = arctan2(y, x)
theta = arccos(z / r)

请注意,您只能从视图矢量中获取两个旋转角度。获得第三个旋转角度需要知道投影平面x或y轴。