首页 > 解决方案 > GVR MonoscopeView 中的中心摄像头

问题描述

我正在使用 GVR Android 库版本 1.190 并尝试在 video360 示例项目中播放 360 度和 180 度视频。在这两种情况下,2D 视图 (MonoscopeView) 都可以正常开始播放,但查看器的摄像头位置永远不会以视频的中心为中心。相反,它开始随机偏离水平轴的中心。在多个设备上的行为相同。任何人都知道如何在 2D 视图开始时将视图居中到视频中心?

标签: androidgoogle-vrgoogle-vr-sdk

解决方案


事实证明,每次我的活动注册一个监听器时,来自 Sensor.TYPE_GAME_ROTATION_VECTOR 的传感器数据都有非常不同的值(角度)。只需稍微倾斜手机即可获得真正不同的值。不同的设备也有不同的响应,但它们都有偏移读数。这导致初始视角(通常)位于视频中心向左或向右 90 度。多亏了这篇文章,我设法计算了初始航向偏移并旋转了手机位置矩阵以进行补偿。

添加一个private float initialHeading初始值为0的成员变量。然后,在PhoneOrientationListener的onSensorChanged中,在Android到OpenGL矩阵旋转之后添加如下代码:

if (initialHeading == 0) {
    initialHeading = (float) ((angles[0] + 2 * Math.PI) % (2 * Math.PI));
}
float angle = (float) ((Math.PI - initialHeading) * 180 / Math.PI);
Matrix.rotateM(phoneInWorldSpaceMatrix, 0, angle, 0, 1, 0);

推荐阅读