МАТРИЧНЫЕ ПРЕОБРАЗОВАНИЯ


Three.js использует матрицы для кодирования преобразований 3D объектов.

Под преобразованем объекта понимается смена его позиции, поворот и масштабирование. Каждый созданный объект в Three.js имеет матрицу, в которой содержатся эти данные. В этом разделе будут рассмотрены способы обновления этих матриц.

Ручное обновление свойств и matrixAutoUpdate

Есть два способа обновить данные о трансформациях объектов:

1. Изменить положение объекта, кватернион, его масштаб и дать three.js пересчитать матрицу объекта, исходя из новых свойств.

    object.position.copy(start_position);
    object.quaternion.copy(quaternion);
По умолчанию свойство matrixAutoUpdate имеет значение true, и матрица будет перерасчитана автоматически. Если объект статический, или вы хотите сами контролировать перерасчет матриц, то лучшую производительность можно получить, установив значение этого свойства false:
    object.matrixAutoUpdate = false;
И уже после изменения каких либо свойств, вручную обновить матрицы:
     object.updateMatrix();
2. Изменить матрицу объекта напрямую. Класс Matrix4 имеет различные методы для этого:

    object.matrix.setRotationFromQuaternion(quaternion);
    object.matrix.setPosition(start_position);
    object.matrixAutoUpdate = false;
    
Обратите внимание, что matrixAutoUpdate при этом должен быть false, и вы так же должны быть уверены, что не вызываете updateMatrix. Вызов updateMatrix может внести исправления в измененные вами матрицы.

Объекты и мировые матрицы

Матрица объекта преобразуется относительно родительского объекта; Что бы преобразовать объект в рамках глобальных координат мира, вы должны получить доступ к объекту Object3D.matrixWorld.

Когда любой их родительских или дочерних объектов трансформируется, вы можете обновить matrixWorld дочернего объекта путем вызова updateMatrixWorld().

Повороты и масштабирование

В three.js есть два способа повернуть объект: через Euler angles и Quaternions, а так же методы преобразования между ними.

Euler angles имеют проблему, называему 'карданный замок', когда при определенных конфигурациях можно потерять свободу трансформации (объект перестанет вращаться вокруг осей). По этой причине, объект вращения всегда хранится в объекте Quaternion

Яндекс.Метрика