3D数学基础No.1
Part 1 最基础的部分:
3D世界中的点和方向多用一个4D向量表示,前三个向量是XYZ,第四个分量是W.
第四个分量的引入有两个作用:一是为了区分向量和点。二是为了进行变换。
W=1表示点,可以平移。
W=0表示向量,平移对其不起作用。因为它只是用来表示方向的。
3D中常用的变换多是用矩阵和向量相乘来实现,和4D向量相乘,所需要的变换矩阵是4×4的形式,可以实现平移、旋转、缩放。
因为图形API的不同,向量和矩阵的形式会对应不同。
DirectX使用行向量,行向量左乘矩阵得到行向量。转换顺序是从左往右发生:vABC,表示v向量先进行A转换,再B,再C.
OpenGL使用列向量,列向量右乘矩阵得到列向量。转换时从右往左:CBAv。
Part2 转换矩阵讨论
线性代数基础:
首先弄清楚线性代数中的几个概念:
转置矩阵:一个矩阵的转置矩阵就是将这个矩阵的行列交换。
逆矩阵:一个矩阵乘以它的逆矩阵得到单位矩阵。
正交矩阵:若一个矩阵的转置矩阵就是它的逆矩阵,那么这个矩阵就是正交矩阵。
转换矩阵包含了平移、旋转、缩放。
一个矩阵可以单纯地表示一种变换,如只表示平移,可以将它称为平移矩阵。
矩阵也可以同时表达多种变换,如将平移矩阵和旋转矩阵相乘就可以得到先平移后旋转的矩阵。注意矩阵相乘的顺序很重要,交换顺序后得到的结果不同。
根据逆矩阵的性质可以知道,逆矩阵表达的是相反的变换,乘以变换矩阵后再乘以逆矩阵等于总体乘以了一个单位矩阵。
平移矩阵的逆矩阵可以直接将平移参数取负。(前后加减平移参数得0)。
缩放矩阵的逆矩阵就是将对角线上的三个缩放参数取自身的倒数。(前后相乘缩放参数得1)。
旋转矩阵的逆矩阵可以将旋转的角度参数取负,表示再转过相反的角度。
可以发现只有旋转矩阵的逆矩阵是转置得到的,所以只有旋转矩阵是正交矩阵。