如何在VR中为指南针应用正确设置传感器方向

时间:2019-07-08 07:04:11

标签: java android virtual-reality compass

我正在创建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定位? (侧边朝下)。 我的代码对我要实现的目标正确吗?另外,当我稍微倾斜手机时,有什么方法可以最大程度地减少结果误差?

0 个答案:

没有答案