这篇文章主要是记录自己学习的过程,文章内容参考自《3D数学基础:图形与游戏开发》,如有不对的地方,烦请指出,交流进行更改。
矩阵在图形学中几乎无处不在,投影矩阵、视图矩阵等这一系列包含矩阵的名词几乎耳熟能详。一个在物体坐标系的坐标乘以model矩阵后就变换到了世界坐标系,一个在世界坐标系的坐标乘以view矩阵就变换到了摄像机坐标系,这些变换看起来很合理。但是追根溯源,为什么乘以一个矩阵就可以进行坐标系的变换呢?
这篇文章主要对上述问题进行介绍和说明。理解了矩阵可以对坐标进行变换的原因后,将对矩阵的意义有更深入的认识和了解。
这里用行向量来表示坐标,p,q,r分别用来表示为指向x,y,z轴正方向的单位向量。
现在有一个坐标点A(1,2,3),用向量表示为A=[1 2 3]。
其中,向量A可以分解成如下形式:A=1[1 0 0]+2[0 1 0]+3[0 0 1]=1p+2q+3r
而等式1p+2q+3r可以解释为在x轴方向位移1个单位,y轴方向位移2个单位,z轴方向位移3个单位。
进一步将等式1p+2q+3r进行变形可以得到:
1p+2q+3r=
[1px+2qx+3rx1py+2qy+3ry1pz+2qz+3rz]=[123]⎣⎡pxqxrxpyqyrypzqzrz⎦⎤
可以看到最后得到结果是向量A与一个矩阵相乘,而仔细观察这个矩阵的形式可以发现,矩阵的行正好为坐标系的基向量,所以我们可以把矩阵解释为基向量的一个集合。这个矩阵如下所示:
⎣⎡pxqxrxpyqyrypzqzrz⎦⎤
因此将向量与不同的矩阵进行相乘,可以看做是将向量切换到不同基向量的坐标系中。例如:
[123]⎣⎡100020001⎦⎤=[143]
上述等式可以解释为将点A转换到了x、z轴基向量分别为(1,0,0)、(0,0,1),而y轴基向量为(0,2,0)的坐标系β中,最后在坐标系β中的坐标为(1,4,3)。其中点A的初始位置(1,2,3)是在x、y、z轴基向量分别为(1,0,0)、(0,1,0)、(0,0,1)的坐标系中。