矩阵变换 - Verge3D 用户手册 - Soft8Soft
Description: 了解如何在使用 Verge3D 制作的交互式 3D 应用程序中使用 矩阵变换

# 矩阵变换

Verge3D使用 matrics 来编码3D变换：移动（位置）、旋转和缩放。Object3D的每个实例都有一个matrix，它用于存储对象的位置、旋转和缩放。本页描述如何更新对象的转换。

## 方便属性与矩阵自动更新(matrixAutoUpdate)

有两种方法可以更新对象的转换：

1. 修改对象的位置(position)，四元数(quaternion)和缩放(scale)属性， 并让Verge3D根据这些属性重新计算对象的矩阵： `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存储了该对象 相对于 该对象[page:object3d.parent 父节点]的变换；要获取对象在 世界 坐标中的变换，则必须访问该对象的 Object3d.MatrixWorld。

当父对象或子对象的转换更改时，您可以通过调用 updateMatrixWorld() 请求更新子对象的 matrixWorld 。

## 旋转与四元数

Verge3D提供了两种表示3D旋转的方法：Euler angles(欧拉角) 和 Quaternions(四元数)，以及在两者之间转换的方法。欧拉角受到一个叫做“万向锁”的问题的影响，在这种情况下，某些构型可能会失去一个自由度（阻止对象绕一个轴旋转）。因此，对象旋转是 始终 存储在对象的 quaternion 中。

该库的早期版本中包含一个 useQuaternion 属性，当设置为false时，将导致对象的 matrix 从欧拉角度计算出来。这种方法已经启用——作为替代，您应该使用 setRotationFromEuler 方法，该方法将更新四元数。