Jam*_*mmo 4 java 3d android matrix libgdx
我正在尝试使用手机的加速度计一次在多个轴上旋转3D模型.当我这样做时,我会使用setToRotation(),但这一次只能做一个轴.
例如:
ModelInstance modelInstance = instances.first();
//ROLL
modelInstance.transform.setToRotation(Vector3.Z, phoneAccel.y*9);
//PITCH
modelInstance.transform.setToRotation(Vector3.X, phoneAccel.z*9);
Run Code Online (Sandbox Code Playgroud)
手机处于强制横向模式.我得到了我想要旋转的模型的实例.
我Vector3 phoneAccel基于Gdx.input.getAccelerometerX/Y/Z().
在上面的示例中,两行代码都能正常工作,但只能独立工作.当我尝试使用两者(一个接一个)时,第一次旋转(ROLL)被移除.我原本认为两个旋转矩阵将累积,即Z轴应用旋转,然后X轴应用旋转.
我是否需要创建自己的累积旋转矩阵,然后在最后应用它?
有什么想法吗?干杯
Matrix4#setToRotation将删除先前设置的任何其他转换(如旋转)(因此名称为"setTo").要将旋转变换添加到已旋转的矩阵,请改用该rotate方法.这将使变换后加倍.
modelInstance.transform.setToRotation(Vector3.Z, phoneAccel.y*9);
modelInstance.transform.rotate(Vector3.X, phoneAccel.z*9);
Run Code Online (Sandbox Code Playgroud)
但是,这不会产生您想要的结果,因为您希望旋转彼此独立(例如,围绕Z轴的旋转不应影响围绕X轴的旋转).为此你可以使用欧拉角:
modelInstance.transform.setFromEulerAngles(yaw, pitch, roll);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7145 次 |
| 最近记录: |