Three.js - установка поворота объекта от нормализованных направлений по осям X, Y и Z

Из определения объекта файла модели размещение нового объекта задается location (точка в пространстве) и нормализованные направления оси X, оси Y и оси Z.

Как я могу перевести это на THREE.Euler так что я могу вращать свой объект правильно в пространстве.

Так что оси не по типу THREE.Vector3, Если новый объект выровнен с world значения будут:

xAxis = new THREE.Vector3( 1, 0, 0 );

yAxis = new THREE.Vector3( 0, 1, 0 );

zAxis = new THREE.Vector3( 0, 0, 1 );

Но если, например, вся локальная ПСК объекта поворачивается на 180 градусов (или Math.PI) вокруг zAxis они будут выглядеть так:

xAxis = new THREE.Vector3( -1, 0, 0 );

yAxis = new THREE.Vector3( 0, -1, 0 );

zAxis = new THREE.Vector3( 0, 0, 1 );

Поэтому мне нужно сделать что-то вроде этого:

var object3D = new THREE.Object3D();

object3D.position = location;

var euler = new THREE.Euler();

euler.setFromNormalizedAxes( xAxis, yAxis, zAxis );

object3D.rotation = euler;

Или создайте матрицу вращения из этих осей:

var rotationMatrix = new THREE.Matrix4();

rotationMatrix.setFromNormalizedAxes( xAxis, yAxis, zAxis );

object3D.rotation.setFromRotationMatrix( rotationMatrix, "XYZ" );

Я еще не так хорош с этими матрицами вращения и вращениями Эйлера...

1 ответ

Решение

В приведенном вами примере ответ будет

object.quaternion.setFromRotationMatrix(

    new THREE.Matrix4( -1,  0,  0,  0,
                        0, -1,  0,  0,
                        0,  0,  1,  0,
                        0,  0,  0,  1 )

);

Столбцы верхних 3х3 Matrix4 новые оси X, Y и Z

Вы могли бы установить object.rotation вместо. Это не имеет значения.

three.js r.66

Другие вопросы по тегам