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