Matrix4 四维矩阵

在 OpenGL 中, 矩阵一般采用列主序作运算, 即变换矩阵右乘列向量, 得到一个新的列向量.



所以 Matrix4 中的元素 elements 按列主序排列, 调用 set(), 可以把行主序改为列主序.

Attributes

elements : Array

Default value :
[ 1, 0, 0, 0,
  0, 1, 0, 0,
  0, 0, 1, 0,
  0, 0, 0, 1 ];
Description : 元素

isMatrix4 : Boolean

Default value : true (只读)
Description : 类型是否为Matrix4.

Methods

set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) : this
n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 Float 元素

把矩阵从行主序变为列主序

identity( ) : this

elements 设为初始值:对角线元素为1的单位矩阵.

clone( ) : Euler

复制自身.

copy( m ) : this
m Matrix4 四维矩阵

把一个四维矩阵赋值到自身.

copyPosition( m ) : this
m Matrix4 四维矩阵

把 m 的平移分量赋值到自身.

extractBasis( xAxis, yAxis, zAxis ) : this
xAxis, yAxis, zAxis Vector3 三维向量

根据索引, 从自身提取元素来设置三维矩阵xAxis, yAxis, zAxis.

makeBasis( xAxis, yAxis, zAxis ) : this
xAxis, yAxis, zAxis Vector3 三维向量

把矩阵的元素改为:
[ xAxis.x, yAxis.x, zAxis.x, 0,
  xAxis.y, yAxis.y, zAxis.y, 0,
  xAxis.z, yAxis.z, zAxis.z, 0,
      0,       0,       0,       1 ]

extractRotation( m ) : this
m Matrix4 四维矩阵

从矩阵 m 中提取旋转分量.

makeRotationFromEuler( euler ) : this
euler Euler 欧拉

根据欧拉角来作旋转.

makeRotationFromQuaternion( q ) : this
q Quaternion 四元素

根据四元素来作旋转.

lookAt( eye, target, up ) : this
eye Vector3 视点
target Vector3 目标点
up Vector3 上方向

使矩阵定向于 up 为上方向, 从视点 eye 指向目标点 target.

multiply( m ) : this
m Matrix4 四维矩阵

自身左乘m, 即 multiplyMatrices( this, m )

premultiply( m ) : this
m Matrix4 四维矩阵

m右乘自身, 即 multiplyMatrices( m, this )

multiplyMatrices( a, b ) : this
a Matrix4 四维矩阵
b Matrix4 四维矩阵

a, b两个矩阵相乘

multiplyScalar( s ) : this
s Float 标量值

矩阵内的每个元素都乘以s.

applyToBufferAttribute( attribute ) : attribute
attribute BufferAttribute 缓存属性

将此矩阵乘以 attribute 中的每个3D矢量.

determinant( ) : Float

行列式.

getInverse( matrix, throwOnDegenerate ) : this
matrix Matrix3 三维矩阵
throwOnDegenerate Boolean 如果为true, 则在矩阵不可逆时抛出错误

求 matrix 的逆矩阵. 如果未设置throwOnDegenerate且矩阵不可逆, 则将其设置为3x3单位矩阵.

transpose( ) : this

转置矩阵.

setPosition( v ) / setPosition( x, y, z ) : this
v Vector3 三维向量
x, y, z Float 坐标

从向量v设置自身的位置分量:elements 中的索引为12、13、14的元素, 而不影响矩阵的其余部分.

scale( v ) : this
v Vector3 三维向量

矩阵的列向量(前三列)与 v 相乘

getMaxScaleOnAxis( ) : Float

获取3个轴的最大刻度值.

makeTranslation( x, y, z ) : this
x, y, z Float

设置平移矩阵.

makeRotationX( theta ), makeRotationY( theta ), makeRotationZ( theta ) : this
theta Float 弧度

设置在x轴, y轴, z轴的旋转矩阵.

makeRotationAxis( axis, angle ) : this
axis Vector3 任意轴
angle Float 弧度

设置任意轴的旋转矩阵.

makeScale( x, y, z ) : this
x, y, z Float 缩放系数

设置缩放矩阵.

makeShear( x, y, z ) : this
x, y, z Float 错切系数

设置错切矩阵.

compose( position, quaternion, scale ) : this
position Vector3 位置
quaternion Quaternion 四元素
scale Vector3 缩放

将此矩阵设置为由位置, 四元数和比例组成的变换.

decompose( position, quaternion, scale ) :
position Vector3 位置
quaternion Quaternion 四元素
scale Vector3 缩放

将此矩阵分解为其位置, 四元数和比例分量.

makePerspective( left, right, top, bottom, near, far ) : ?
left, right, top, bottom, near, far Float 左, 右, 上, 下, 近, 远

设置透视矩阵

makeOrthographic( left, right, top, bottom, near, far ) : ?
left, right, top, bottom, near, far Float 左, 右, 上, 下, 近, 远

设置正交矩阵.

equals( matrix ) : Boolean
matrix Matrix4 四维矩阵

是否相等.

fromArray( array, offset ) : this
array Array 数组
offset Int 偏移量索引

从数组中索引为offset开始, 取数赋予自身.

toArray( array, offset ) : Array
Parameter Type Description
array Array 数组
offset Int 偏移量索引

把自身的x, y, z值替换到数组中, 从索引为offset处开始替换.