Метод Android getOrientation()возвращает неверные результаты

Я создаю приложение 3D Compass.

Я использую метод getOrientation для получения ориентации (почти такой же реализации, как здесь). Если я кладу телефон на стол, он работает хорошо, но когда верхняя часть телефона указывает на небо (минус ось Z на картинке; сфера — это Земля)getOrientation начинает давать очень плохие результаты. Он дает значения для оси Z от 0 до 180 градусов в нескольких реальных градусах. Есть ли способ подавить это поведение? Я создал маленькое видео , описывающее проблему, (извините за плохое качество). Заранее спасибо.

enter image description here

Решение: При ротации модели существует разница между:

gl.glRotatef(_angleY, 0f, 1f, 0f); //ROLL
gl.glRotatef(_angleX, 1f, 0f, 0f); //ELEVATION
gl.glRotatef(_angleZ, 0f, 0f, 1f); //AZIMUTH


gl.glRotatef(_angleX, 1f, 0f, 0f); //ELEVATION
gl.glRotatef(_angleY, 0f, 1f, 0f); //ROLL
gl.glRotatef(_angleZ, 0f, 0f, 1f); //AZIMUTH

10
задан Community 23 May 2017 в 11:53
поделиться