我正在创建VR(带有Java插件的Unity / Android)应用程序,该应用程序将使用指南针功能将游戏中的北方与真实方向对齐,但是我通过SensorManager获得的方位似乎不准确。
到目前为止,我尝试将旋转矢量传感器与SensorManager.remapCoordinateSystem()结合使用,以获取,转换结果并获取方位角。
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
// It is good practice to check that we received the proper sensor event
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)
{
float[] mRotationMatrixIn = new float[16];
float[] mRotationMatrixOut = new float[16];
float[] orientationVals = new float[9];
// Convert the rotation-vector to a 4x4 matrix.
SensorManager.getRotationMatrixFromVector(mRotationMatrixIn,
event.values);
SensorManager
.remapCoordinateSystem(mRotationMatrixIn,
SensorManager.AXIS_X, SensorManager.AXIS_Z,
mRotationMatrixOut);
SensorManager.getOrientation(mRotationMatrixOut, orientationVals);
// Optionally convert the result from radians to degrees
azimuth = (float) Math.toDegrees(orientationVals[0]);
}
}
}
“方位角”变量的结果应该在-180到180度之间,当我旋转时会改变,但是我经常看到结果非常难以估计。 我尤其不确定SensorManager.remapCoordinateSystem()的参数。我是否使用右轴进行VR定位? (侧边朝下)。 我的代码对我要实现的目标正确吗?另外,当我稍微倾斜手机时,有什么方法可以最大程度地减少结果误差?