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