我试图使用手机的加速计在多个轴上同时旋转3D模型。当我这样做时,我使用setToRotation()
,然而这只能一次旋转一个轴。
例如:
ModelInstance modelInstance = instances.first();
//ROLL
modelInstance.transform.setToRotation(Vector3.Z, phoneAccel.y*9);
//PITCH
modelInstance.transform.setToRotation(Vector3.X, phoneAccel.z*9);
手机处于强制横屏模式。我获取了想要旋转的模型实例。
我根据 Gdx.input.getAccelerometerX/Y/Z() 设置了 Vector3 phoneAccel。
在上面的示例中,这两行代码都可以正常工作,但只能单独使用。当我尝试同时使用它们(一个接一个地)时,第一个旋转(ROLL)被删除了。我原本以为这两个旋转矩阵会累加,即先将 Z 轴应用旋转,然后再将 X 轴应用旋转。
我需要创建自己的累积旋转矩阵,然后在最后应用吗?
有什么想法吗?谢谢。
setFromEulerAngles
就是我想要的。你知道这个计算背后是否有任何开销,例如任何平方根函数吗? - JammosetFromEulerAngles()
,然后跟着一个transform.translate(x,y,z)
,但它没有起作用(没有平移)。如果我在旋转之前进行平移,那么模型会旋转,但是围绕不同的原点旋转。 - JammomodelInstance.transform.setFromEulerAngles(yaw, pitch, roll).trn(x, y, z);
。该代码用于将一个3D模型实例的变换属性设置为旋转角度(yaw、pitch、roll)和平移向量(x、y、z)。 - Xoppa