【问题标题】:Rotation around X and Z axes causes rotation around Y axe as well?绕 X 轴和 Z 轴旋转也会导致绕 Y 轴旋转?
【发布时间】:2021-07-12 18:44:30
【问题描述】:

我有一个非常简单的 3D 场景 - 单个对象位于坐标中心的中间。不旋转,不平移。 IE。放在某张桌子上的手表。相机就在它上面,直视着它。到目前为止,一切都显示得很好。

现在,我尝试完成的是读取用于旋转设备的手机传感器,并根据这些值围绕对象旋转相机。我正在阅读这些价值观:

    float xRotation = Gdx.input.getAccelerometerX()*9;
    float yRotation = Gdx.input.getAccelerometerY()*9;

而且我的价值观还不错。 xRotation 是设备向左/向右旋转的值,yRotation 是向上/向下旋转的值。

然后我使用这些值围绕对象旋转相机。由于我不知道如何读取当前的摄像机角度,我正在保存它,每次更改旋转时,我首先通过保存的值进行负旋转,然后进行新的旋转。这也很好用:

    float currentAngle = cameraYAngle + (angle - cameraYAngle) * (Gdx.graphics.getDeltaTime()*5);
    cam.rotateAround(target, Vector3.X, -cameraYAngle); // returning camera back to 0 angle
    cameraYAngle = currentAngle;  // saving new angle
    cam.rotateAround(target, Vector3.X, currentAngle); // setting new angle

所以我有点放慢动作以避免抽搐(对于这个问题可以忽略)。类似的代码适用于第二 (Z) 轴。所以旋转像这样工作得很好,除了一个部分:

如果我在圆圈中移动设备(例如,手机是激光笔,我在墙上画圆圈)如果我顺时针移动,我会在一个方向上绕第三轴旋转?!?如果我以逆时针方向执行此操作,我会在其他方向获得第 3 轴旋转?!?

所以我围绕 X 轴进行旋转以进行上/下旋转,并围绕 Z 轴进行左/右旋转。我不会在任何时候绕 Y 轴旋转,但是这两者的组合也会以某种方式影响绕 Y 轴的旋转?!?

也就是说,如果相机围绕 X 旋转,然后围绕 Z 旋转,也会以某种方式围绕 Y 轴旋转。当我旋转回(通过使用保存的值)到我没有进行的 0,0 旋转时,围绕 Y 轴保持不变。

我感觉这不是编码问题,而是我不完全理解 3D 旋转是如何进行的。

【问题讨论】:

    标签: 3d camera libgdx rotation


    【解决方案1】:

    好的,找到了解决该问题的方法。对于每一个新框架,我都是:

    恢复 Z 旋转 -> 制作新的 Z 旋转 -> 恢复 X 旋转 -> 制作新的 X 旋转

    所以我已经还原、旋转、还原、旋转,每当我进行新的旋转时,其他的已经应用了。

    现在我把它改成了:

    恢复Z旋转,恢复X旋转,做X旋转,做Z旋转

    因此,如果我以与旋转相反的顺序向后旋转,则效果很好。在开始时重置 2 次后,我每帧都回到 0,0,0。

    我假设如果按轴恢复旋转的值相同,我将获得原始的 0,0,0 位置,但事实并非如此。应用轮换的顺序也很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2015-03-18
      相关资源
      最近更新 更多