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