Вращение для object3D с использованием акселерометров - PullRequest
1 голос
/ 11 мая 2019

Я использую акселерометры MEMs для перемещения аватара с помощью библиотеки THREE.js.Однако я сталкиваюсь с проблемой, когда датчик поворачивается вокруг X, Y и Z одновременно, так как мой аватар не получает правильное положение.Я имею в виду, это не отражает положение акселерометра MEMs.Позвольте мне объяснить это с помощью изображений.У нас есть датчик в этом исходном положении.Красная ось - это X, зеленый - это Y, а синий - это Z:

Начальная позиция

https://i.stack.imgur.com/fQSsL.jpg

Теперь, когда датчик поворачивается, чтобы получить эту новую позицию, он отправляетчто X = 90, Y = -90, Z = 90 градусов:

https://i.stack.imgur.com/njGBO.jpg

Это посылается датчиком, так как при сравнении координат объекта с мировыми координатами, фактически X теперь находится там, гдеZ был, Z был, где Y был, и Y был, где X был;затем все они поворачиваются.

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как указать моему аватару, чтобы он достиг этой позиции.Используя локальные или мировые вращения с кватернионами или без них, я получаю эту точку, используя только 2 вращения.Например, используя кватернионы, мне просто нужно повернуть в градусах X и Z -90.

    var rotation = new THREE.Quaternion();
    rotation.setFromEuler( new THREE.Euler(x_angle, y_angle, z_angle, 'XYZ') );
    bone.setRotationFromQuaternion(rotation);

Читая этот пост: https://gamedev.stackexchange.com/questions/136174/im-rotating-an-object-on-two-axes-so-why-does-it-keep-twisting-around-the-thir

Я получаю более глубокое понимание, но это сделаноучитывая два угла, и в конце я говорю об ограничениях, которые я считаю.Тем не менее, я не понимаю решение, которое он опубликовал для этого ограничения.

Как можно достичь этого положения с помощью информации, предоставленной датчиком?Есть способ узнать, какая из резервных осей?

Ваша помощь действительно ценится.Спасибо:)

...