Matrix4的转化

一、矩阵的数组表示

一个常规的4X4矩阵通常是下面的形式

\begin{bmatrix} m00 &m01 &m02 &m03 \\ m10 &m11 &m12 &m13 \\ m20 &m21 &m22 &m23 \\ m30 &m31 &m32 &m33 \end{bmatrix}

在JavaScript中,没有这中数据结构,通常使用数组的形式来表示矩阵。使用数组来表示矩阵通常有两种表示方法: 行向量表示法 和 列向量表示法。

假设一个表示4X4矩阵数组为:

const matrixNums = [m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15];

当它表示行向量矩阵时,转化为矩阵是这个样子

\begin{bmatrix} m0 &m1 &m2 &m3 \\ m4 &m5 &m6 &m7 \\ m8 &m9 &m10 &m11 \\ m12 &m13 &m14 &m15 \end{bmatrix}

当它表示列向量矩阵时,转化为矩阵是这个样子

\begin{bmatrix} m0 &m4 &m8 &m12 \\ m1 &m5 &m9 &m13 \\ m2 &m6 &m10 &m14 \\ m3 &m7 &m11 &m15 \end{bmatrix}

两种方式均可以,在webgl中默认是使用列向量的形式,所以本文也采用列向量矩阵的方式。

二、to LocalMatrix

LocalMatrix表示一个模型的局部坐标系,每个模型都可以设置自己的position、rotation、scale属性,再由这些分量组装成LocalMatrix供下一步的调用。

这我们将position、rotation、scale分别用矩阵来表示

2.1 平移矩阵

平移矩阵较好理解,在齐次坐标中表示如下

\begin{bmatrix} 1 &0 &0 &tX \\ 0 &1 &0 &tY \\ 0 &0 &1 &tZ \\ 0 &0 &0 &1 \end{bmatrix}

它的列矩阵数组如下:

const positionMatrix = [
    1,   0,  0,  0,
    0,   1,  0,  0,
    0,   0,  1,  0,
   tX,  tY, tZ,  1
];

2.2 缩放矩阵

缩放矩阵也比较好理解,仅仅需要在各分量上乘以缩放因子即可

\begin{bmatrix} sX &0 &0 &0 \\ 0 &sY &0 &0 \\ 0 &0 &sZ &0 \\ 0 &0 &0 &1 \end{bmatrix}

它的列矩阵数组如下:

const scaleMatrix = [
    sX,    0,   0,  0,
     0,   sY,   0,  0,
     0,    0,  sZ,  0,
     0,    0,   0,  1
];

2.3 旋转矩阵

旋转矩阵稍微复杂一些,按照坐标轴可以区分为

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值