一、矩阵的数组表示
一个常规的4X4矩阵通常是下面的形式
在JavaScript中,没有这中数据结构,通常使用数组的形式来表示矩阵。使用数组来表示矩阵通常有两种表示方法: 行向量表示法 和 列向量表示法。
假设一个表示4X4矩阵数组为:
const matrixNums = [m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15];
当它表示行向量矩阵时,转化为矩阵是这个样子
当它表示列向量矩阵时,转化为矩阵是这个样子
两种方式均可以,在webgl中默认是使用列向量的形式,所以本文也采用列向量矩阵的方式。
二、to LocalMatrix
LocalMatrix表示一个模型的局部坐标系,每个模型都可以设置自己的position、rotation、scale属性,再由这些分量组装成LocalMatrix供下一步的调用。
这我们将position、rotation、scale分别用矩阵来表示
2.1 平移矩阵
平移矩阵较好理解,在齐次坐标中表示如下
它的列矩阵数组如下:
const positionMatrix = [
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
tX, tY, tZ, 1
];
2.2 缩放矩阵
缩放矩阵也比较好理解,仅仅需要在各分量上乘以缩放因子即可
它的列矩阵数组如下:
const scaleMatrix = [
sX, 0, 0, 0,
0, sY, 0, 0,
0, 0, sZ, 0,
0, 0, 0, 1
];
2.3 旋转矩阵
旋转矩阵稍微复杂一些,按照坐标轴可以区分为