opengl 逆矩阵的意义

比如把点(1, 1)变到点(2, 2),可以有两种做法:

①坐标系不动,点动,把(1, 1)点挪到(2, 2);

②点不动,坐标系动,让x轴的度量(单位向量)变成原来的1/2,让y轴的度量(单位向量)变成原先的1/2,这样点还是那个点,点的坐标就变成(2, 2)了(用通俗的话说,先把点拿开,把空间挤压成1/2,再放回原位。)。

这是应该困惑了,向量还是原样,但是,坐标变了,其实,这是指在第二个坐标系下,点坐标为(2,2)。

向量这个东西客观存在,但是要把它表示出来,就要把它放在一个坐标系中去度量它,然后把度量的结果(向量在各个坐标轴上的投影值)按一定顺序列在一起,就成了我们平时所见的向量表示形式。你选择的坐标系不同,得出来的向量的表示就不同。向量还是那个向量,选择的坐标系不同,其表示方式就不同。

假设第一个坐标系矩阵为m1.第二个坐标系矩阵为m2。m1为单位矩阵。

let m1 = new Mat4();
let m2 = new Mat4();
m2.setScale(0.5, 0.5, 0.5);
let p1 = new Vec4(1, 1, 0, 1);
let p2 = new Vec4(2, 2, 0, 1);
expect(m1.mulVec4(p1)).toEqual(m2.mulVec4(p2));
expect(p2).toEqual(m2.invert().mulVec4(p1)); // p1在乘以m2坐标系逆矩阵,得出在m2坐标系下的坐标

使用逆矩阵,可以求出一个点在另一个坐标系的位置。