OpenGL数学基础之矩阵

发表于2017-12-15
评论0 3k浏览

三维空间物体的运动使用变换来表示,包括三种:平移变换(translate),旋转变换(rolate),伸缩变换(scale),变换量可以使用4x4的矩阵(Matrix)表示,变换过程就是对物体的所有顶点都乘以这个矩阵。

矩阵乘法

矩阵乘法是行列向量相乘,所以行跟列必须是一样的矩阵才能相乘。

单位矩阵: 
 
根据上面的乘法公式可以知道,任何矩阵与单位矩阵相乘等于本身。

平移变换

假如有点(x, y, z),现在将其安向量(v1,v2,v3)平移,结果就为(x+v1,y+v2,z+v3),用矩阵表示如下:

多出一行的原因是,但xyz都为0的时,矩阵乘法的结果总是为0,无法表示原点的平移;同时,4x4的矩阵可以连乘。

旋转变换

 
如图,圆为单位圆,已知点(x1,y1),绕z轴旋转角度b,求该点旋转之后的坐标(x2,y2),由图可得: 
x2=cos(a+b)=cos(a)cos(b)sin(a)sin(b)=x1cos(b)y1sin(b) 
y2=sin(a+b)=sin(a)cos(b)+sin(b)cos(b)=y1cos(b)+x1sin(b) 
所以用矩阵表示点(x, y, z)绕z轴旋转(xy平面内)角度b: 
绕y轴旋转(xz平面内)角度b: 
绕x轴旋转(yz平面内)角度b: 

伸缩变化

任何一个矩阵乘以单位矩阵得到的值不变,如果我们将单位矩阵中的分别比分别变为 (s1,s2,s3),则可以得到: 
这个矩阵变换表示点(s1,s2,s3)分别在xyz轴缩放s1,s2,s3

变换组合

因为矩阵的乘法满足结合律: 
M1 * M2 * … * Mn * V = (M1 * M2 * … * Mn) * V 
所以变换的组合可以将每个变换的分量相乘,最后再乘以这个顶点即可。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: