在 Three.js 中,Object3D 及其子类有几个与矩阵相关的属性与方法,文档上对其描述或简略或抽象,常常会让初学者不能清楚地区分它们,从而不能很好的理解和运用矩阵。本文将从源码角度详细解析这些属性和方法。
主要涉及以下内容:
matrix、matrixWorld、matrixAutoUpdate、matrixWorldAutoUpdate、matrixWorldNeedsUpdateupdateMatrix、updateMatrixWorld、updateWorldMatrix、applyMatrix4matrix 是记录 group 本身相对于 parent 的变换矩阵,是对 group 进行一些变换操作后更新到 matrix 中的,类似于相对路径的概念。
matrixWorld 是 group 相对于 world space 的变换矩阵,类似于绝对路径的概念。
matrixWorld 与自身的 matrix 乘积得到自身的 matrixWorldmatrixWorld 是通过不断累积祖先的变换得到的结果matrix 和 matrixWorld 相同matrixWorld 始终表示其在场景世界中的绝对变换主要功能:
matrix 分解到 position/scale/quaternion 三个分量matrixWorldNeedsUpdate 标记为 true主要功能:
matrixAutoUpdate 为 true,则调用 updateMatrix 更新本地 matrixmatrixWorldNeedsUpdate 或参数 force 为 true 时,需要更新自身的 matrixWorldmatrixWorld,则必须更新所有后代节点updateMatrixWorld(force)主要功能:
matrixWorldmatrixAutoUpdate,则也会更新自己的 matrixmatrixWorldAutoUpdate 为 true 时,会递归更新父元素和后代的 matrixWorld矩阵的左乘与右乘是指矩阵在表达式的位置: