【发布时间】: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 旋转是如何进行的。
【问题讨论】: