反转旋转矩阵交换俯仰和滚动

时间:2013-03-14 12:34:04

标签: android opengl-es sensor rotational-matrices matrix-inverse

我有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轴旋转

0 个答案:

没有答案