如何在 libGDX 中获得相机旋转?

How to get camera rotation in libGDX?

我想在 libGDX 中获取 OrthograpicCamera 的旋转。 我目前正在使用从另一个 SOF post:

复制的公式
float camRotation = -(float)Math.atan2(cam.up.x, cam.up.y)*MathUtils.radiansToDegrees);

这个returns -0.0 如果我不旋转。

如果我旋转 1 cam.rotate(1f); 它 camRotation 打印 -1.0 & 如果我旋转 -1 cam.rotate(-1f); camRotation 打印 1.0

我对数学很困惑。在 libGDX 中获得相机旋转的正确方法是什么?

我觉得只有开头的减号

-(float)Math.atan2(cam.up.x, cam.up.y)*MathUtils.radiansToDegrees);

这引起了您的困惑,如果您删除它,它应该会按您预期的那样工作。

atan2(b, a) 给出正 x 轴与点 (a, b) 之间的角度。注意为 (b, a) 调用它给出点 (a, b) 的角度而不是指向 (b, a)

在您的示例代码中,atan2 是使用参数 cam.up.ycam.up.x 调用的,其中 cam.up 是一个单位向量,表示发生了什么。

所以在未旋转的相机中,向上矢量将是 (0, 1)(它实际上是一个 3 维矢量,但我们现在可以忽略 z 轴),如果我们将其插入到 atan2 是说我们应该得到正 x (1, 0) 和向上(但参数翻转)(1, 0) 之间的角度为零。

因此,使用 atan2 将向上矢量与正 x 轴进行比较是找到相机旋转的有效方法。