Центральная камера в GVR MonoscopicView - PullRequest
1 голос
/ 18 марта 2019

Я использую библиотеку GVR Android версии 1.190 и пытаюсь воспроизвести видео 360 и 180 градусов в примере проекта video360. В обоих случаях 2D-просмотр (MonoscopicView) хорошо запускает воспроизведение, но положение камеры просмотра никогда не центрируется по центру видео. Вместо этого он начинается случайным образом смещенным относительно горизонтальной оси. Одинаковое поведение на нескольких устройствах. Кто-нибудь знает, как центрировать вид на видеоцентре при запуске 2D-просмотра?

1 Ответ

1 голос
/ 19 марта 2019

Оказывается, что данные датчика из Sensor.TYPE_GAME_ROTATION_VECTOR имеют очень разные значения (углы) каждый раз, когда моя активность регистрирует слушателя. Требуется только небольшой уклон телефона, чтобы получить действительно разные значения. Различные устройства также реагируют по-разному, но все они имеют показания со смещением. Это приводит к тому, что начальный угол обзора (обычно) составляет 90 градусов влево или вправо от центра видео. Благодаря этой записи мне удалось вычислить начальное смещение курса и повернуть матрицу положения телефона для компенсации.

Добавить переменную-член private float initialHeading с начальным значением 0. Затем в PhoneSrientationListener 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);
...