java–Libgdx如何使用电话方向在多个轴上旋转3D模型

java–Libgdx如何使用电话方向在多个轴上旋转3D模型,第1张

概述我正在尝试使用手机的加速度计一次在多个轴上旋转3D模型.当我这样做时,我使用setToRotation()但是,这一次只能做一个轴.例如: ModelInstance modelInstance = instances.first(); //ROLL modelInstance.transform.setToRotation(Vector3.Z

我正在尝试使用手机的加速度计一次在多个轴上旋转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轴应用旋转.

我是否需要创建自己的累积旋转矩阵,然后在最后应用它?

有什么想法吗?干杯

最佳答案Matrix4#setToRotation将删除先前设置的任何其他转换(如旋转)(因此名称为“setTo”).要将旋转变换添加到已旋转的矩阵,请改用rotate方法.这将使变换后加倍.

modelinstance.transform.setToRotation(Vector3.Z,phoneAccel.y*9);modelinstance.transform.rotate(Vector3.X,phoneAccel.z*9);

但是,这不会产生您想要的结果,因为您希望旋转彼此独立(例如,围绕Z轴的旋转不应影响围绕X轴的旋转).为此你可以使用欧拉角:

modelinstance.transform.setFromEulerAngles(yaw,pitch,roll);
总结

以上是内存溢出为你收集整理的java – Libgdx如何使用电话方向在多个轴上旋转3D模型全部内容,希望文章能够帮你解决java – Libgdx如何使用电话方向在多个轴上旋转3D模型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1139517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存