gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:25 24 4
gpt4 key购买 nike

我正在尝试使用手机的加速度计同时在多个轴上旋转 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 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22837736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com