Я пытаюсь повернуть модель (территорию), расположенную в (X,Y,Z)=(0,0,0)
моего OpenGL-мира. +X
— восток, -Z
— север, +Y
— высота. Вид смотрит на -Y
, потому что углы Эйлера устройства равны (0°,0°,0°)
, когда устройство лежит на столе и указывает на север.
Проблема:
Мне нужно переключить оси моего устройства, чтобы изменить измеренный угол device -y
на device z
.
В настоящее время работает вращение вокруг device x-axis
(приводит к вращению вокруг World X-axis
).
Но вращение вокруг device y
приводит к вращению вокруг World Y
вместо World -Z
, а вращение вокруг device z
к вращению вокруг World Z
вместо World Y
.
К настоящему времени у меня заканчиваются идеи, как это решить. Кто-нибудь, кто может дать мне подсказку, пожалуйста?
(OpenGL) (Device)
^ +Y-axis ^ +z-axis
* *
* *
* * ^ +y-axis (North)
* * *
* * *
* * *
************> + X-axis ************> +x-axis
*
*
v +Z-axis (Minus North)
Что я уже пробовал:
- Использование углов Эйлера от
SensorManager.getOrientation
и переключения углов работает нормально, хотя я получаю блокировку подвеса, близкую к шагу 90 градусов. Поэтому я ищу другое решение (матрица вращенияSensorManager
или кватернионы). SensorManager.remapCoordinateSystem
почти во всех возможных созвездиях -> не помогает- Изменение столбцов/строк моей матрицы вращения с
SensorManager.getRotationMatrix
-> не помогает