首页 > 解决方案 > 如何在 libGDX 中获得相机旋转?

问题描述

我想在 libGDX 中获得 OrthographicCamera 的旋转。我目前正在使用从另一个 SOF 帖子中复制的公式:

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

如果我不旋转,这将返回 -0.0。

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

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

标签: cameralibgdxrotation

解决方案


我认为它只是开头的减号

-(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 轴),如果我们将它插入到 is 的定义中atan2,我们应该得到正之间的角度 - x(1, 0)和向上(但参数翻转)(1, 0),这是零。

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


推荐阅读