camera - 如何在 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 中获得相机旋转的正确方法是什么?
解决方案
我认为它只是开头的减号
-(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.y
,cam.up.x
其中cam.up
一个单位向量表示发生了什么。
所以在一个未旋转的相机中,向上向量将是(0, 1)
(它实际上是一个 3 维向量,但我们现在可以忽略 z 轴),如果我们将它插入到 is 的定义中atan2
,我们应该得到正之间的角度 - x(1, 0)
和向上(但参数翻转)(1, 0)
,这是零。
因此,使用atan2
向上向量与正 x 轴进行比较是找到相机旋转的有效方法。
推荐阅读
- node.js - Node.js 参数类型字符串不可分配给参数类型函数(T)
- syntax - .pick 不支持混音?
- php - 此代码对 SQL 注入和其他类型的攻击是否安全?(如果是为什么?)
- java - 在 JDeveloper 中获取“java.net.SocketException: Permission denied: connect”
- c# - 在 Unity 2018 中同时拖动 2 个游戏对象
- javascript - 传播运算符的打字稿抛出错误
- ios - 自动续订和沙盒模式下的收据
- c# - 在 BizTalk 中将取消批处理的消息合并回单个消息
- javascript - 箭头函数与类方法的内存占用
- python - 我想用 z 矩阵的所有值的平均值填充 z 矩阵中的缺失值