Я думаю, что это может быть связано с преобразованием из кватернионов. Не уверен, что приведен следующий пример, но он может помочь вам найти решение.
const euler = new THREE.Euler();
const rotation = euler.setFromQuaternion(camera.quaternion);
const radians = rotation.z > 0
? rotation.z
: (2 * Math.PI) + rotation.z;
const degrees = THREE.Math.radToDeg(radians);
Это приводит к degrees
, имеющему значение от 0 до 360, но, как камера поворачивается углом значение, кажется, чтобы изменить на несогласованную скорости.
Вот codepen, который демонстрирует это поведение:
http://codepen.io/kevanstannard/pen/NdOvoO/
я использовал некоторые детали из следующего вопроса:
three.js perspectivecamera current angle in degrees
Редактировать # 1
основе ответ от @WestLangley мой ответ ab Ове не является правильным, так что просто документировать улучшение, вот некоторые код, основанный на решении Запада:
// Set Y to be the heading of the camera
camera.rotation.order = 'YXZ';
А потом
const heading = camera.rotation.y;
const radians = heading > 0 ? heading : (2 * Math.PI) + heading;
const degrees = THREE.Math.radToDeg(radians);
И лучше codepen
http://codepen.io/kevanstannard/pen/YNJgXd
Попробуйте установить 'camera.rotation.order =«YXZ»,' и посмотреть, если поведение является более интуитивным к вам. Он может работать от - PI до + PI, в зависимости от вашего варианта использования. – WestLangley
Спасибо @WestLangley, оказывается, все было нужно! Большое спасибо (y) –
Я отправил ответ с дальнейшим объяснением. – WestLangley