pub rec Mat4;
一个 4x4 单精度矩阵,四个 f32x4 行,按行主序排列
rows:四个行向量,rows[i][j] 是第 i 行第 j 列
pub fun mat4_identity() Mat4;
4x4 单位矩阵
ret:对角线上为 1,其他位置为 0 的矩阵
pub fun mat4_zero() Mat4;
4x4 零矩阵
ret:所有元素为零的矩阵
pub fun mat4_add(a: Mat4, b: Mat4) Mat4;
两个矩阵的逐元素相加
a:第一个矩阵 b:第二个矩阵 ret:逐元素相加的结果 a + b
pub fun mat4_sub(a: Mat4, b: Mat4) Mat4;
两个矩阵的逐元素相减
a:第一个矩阵 b:第二个矩阵 ret:逐元素相减的结果 a - b
pub fun mat4_scale(m: Mat4, s: f32) Mat4;
用标量缩放矩阵的每个元素
m:矩阵 s:标量因子 ret:每个元素都乘以 s 的矩阵 m
pub fun mat4_mul(a: Mat4, b: Mat4) Mat4;
矩阵乘积 a*b(行向量约定:先应用 a 再应用 b)
每个结果行都是 a 的行与 b 的行重新组合,因此乘法和加法在支持的目标上是逐通道的向量操作。
a:左矩阵 b:右矩阵 ret:乘积 a*b
pub fun mat4_mul_vec(m: Mat4, v: f32x4) f32x4;
用矩阵变换行向量(v * m)
m:矩阵 v:行向量 ret:变换后的向量 v * m
pub fun mat4_transpose(m: Mat4) Mat4;
矩阵转置(交换行和列)
m:矩阵 ret:矩阵 m 的转置
pub fun mat4_determinant(m: Mat4) f32;
矩阵的行列式
展开自顶两行的六个 2x2 子矩阵与底两行的六个子矩阵——拉普拉斯余子式形式,与逆矩阵共享。
m:矩阵 ret:det(m)
pub fun mat4_inverse(m: Mat4) Option[Mat4];
矩阵的逆,如果矩阵是奇异的则返回 none
使用与行列式相同的余子式 2x2 子矩阵构建伴随矩阵,然后缩放其倒数。行列式恰好为零时返回 none。
m:矩阵 ret:如果可逆则返回 some(inverse),如果奇异则返回 none