Матричные преобразования

«Вердж3Д» использует матрицы для представления 3Д-трансформаций: перемещения (положения), поворота и масштабирования. Каждый экземпляр Object3D имеет матрицу matrix, которая хранит положение, поворот и масштабирование этого объекта. На данной странице описано, как обновлять трансформацию объектов.

Свойства и matrixAutoUpdate

Существует два способа обновления трансформации объекта:

  1. Изменить свойства объекта position, quaternion и scale, и позволить «Вердж3Д» пересчитать матрицу трансформации объекта из этих свойств: 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 отменит изменения, внесенные в матрицу, поскольку пересчитает её из position, scale и так далее.

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

Объект matrix хранит трансформацию объекта относительно к объекту parent; чтобы получить трансформацию объекта в мировых координатах, необходимо обратиться к объекту Object3D.matrixWorld.

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

Вращение и кватернионы

«Вердж3Д» предоставляет два способа трехмерных вращений: углы Эйлера и кватернионы, а также методы преобразования между ними. Эйлеровы углы подвержены проблеме, известной как «шарнирный замок», когда определенные конфигурации могут потерять степень свободы (не позволяя объекту вращаться вокруг одной оси). По этой причине вращение объекта всегда хранится в кватернионах.

Пазлы

Пазлы, изменяющие 3Д-трансформации объектов, производят необходимые обновления матриц автоматически.