0

我从 TYPE_ROTATION_VECTOR 向量值中得到了旋转矩阵。并尝试使用它来旋转我的应用程序中的对象。工作得很好。但我真正想要的是旋转与设备运动方向相反的对象。比如说,设备绕 x 轴旋转 30 度,我需要我的对象绕 x 轴旋转 -30 度。它必须有一种效果,就好像物体停留在它不考虑设备移动的地方一样。为此,我反转(转置)了旋转矢量。现在围绕 x 和 y 轴的旋转完全不正确,看起来它们被交换了。当我围绕 x 旋转设备时,对象围绕 y 旋转,反之亦然。我的一段代码:

case Sensor.TYPE_ROTATION_VECTOR:

         SensorManager.getRotationMatrixFromVector( mRotationMatrix , event.values);
         Matrix.transposeM(mInvertedRotationMatrix, 0, mRotationMatrix, 0);
         Quaternion quat = new Quaternion();
         quat.fromRotationMatrix(mInvertedRotationMatrix);
          mRenderer.setQuat(quat);
        }
....

Quaternion quat = new Quaternion();
    public void setQuat(Quaternion quat)
    {
        this.quat = quat;
        mObjectGroup.setOrientation(quat);
    }

mObjectGroup 是设备旋转时应该旋转的模型

...

public void setOrientation(Quaternion quat) {
        mOrientation.setAllFrom(quat);
    }
...

mOrientation = new Quaternion();
...
public Quaternion() {
        setIdentity();
        mTmpVec1 = new Number3D();
        mTmpVec2 = new Number3D();
        mTmpVec3 = new Number3D();
    }

public Quaternion setIdentity() {
        w = 1;
        x = 0;
        y = 0;
        z = 0;
        return this;
    }
 ...

public Number3D() {
        this.x = 0;
        this.y = 0;
        this.z = 0;
    }


    public void setAllFrom(Quaternion other) {
        this.w = other.w;
        this.x = other.x;
        this.y = other.y;
        this.z = other.z;
    }

编辑:当我沿 Y 轴旋转设备时,对象围绕 Z 轴旋转,当设备沿 X 轴旋转时,对象围绕 Y 轴旋转

4

0 回答 0