Три JS мир для вращения объекта с использованием кватернионов - PullRequest
0 голосов
/ 07 февраля 2020

Я новичок в трехмерном мире, и я столкнулся с проблемой вращений с использованием кватернионов. Я получаю кватернионы, используя датчик, и пытаюсь переместить простой аватар в соответствии с ним. Конкретно я пытаюсь переместить левую руку.

Это код:

var originalQ = new THREE.Quaternion ();
originalQ.copy (bone.quaternion); // Сохраняем положение покоя

Затем я делаю:

let oq = bone.originalQ;
q.multiply (oq);
bone.setRotationFromQuaternion (q) ;

Если я перемещу датчик вокруг одной оси, я получу хорошие результаты. Тем не менее, когда я пытаюсь перемещаться вокруг оси, окончательное движение оказывается неправильным. Например, это кватернион, который я получаю, когда я перемещаю левую руку в одну сторону (например, вокруг оси z), а затем поворачиваю руку так, чтобы ладонь руки была обращена вниз (вокруг оси y объекта):

qx = 0,44826674461364746; qy = -0,4548105299472809; qz = 0,6363610625267029; qw = 0.43272265791893005

Это результат:

enter image description here

Кажется, что он вращается к мировому эталону. Однако, если я поменяю порядок умножения (как я читал на нескольких других форумах о вращении слов и объектов), я получу:

enter image description here

Я не могу сделай это правильно. Как правильно применить вращение мира к вращению объекта? Кто-нибудь может мне помочь?

Заранее спасибо:)

...