|
|
这段时间看了newton物理引擎,看了别人自定义的矩阵,使用起来和d3d的完全一样,但看了代码定义的着实有些不解
class dMatrix
{
public:
dVector m_front;
dVector m_up;
dVector m_right;
dVector m_posit;
};
这里面的第一个分量为什么取名字叫front(前)而第三个分量是right(右)呢
第2个是up(上)很好理解,没有问题,第四个是position(位移)也好理解
恰恰就是第一个和第三个分量,感觉名字反了,有点不明白。
反思了一阵子,矩阵的前三个分量应该代表的是空间的三个延展方向,也就是三个轴向量
其实看看单位矩阵
1,0,0,0
0,1,0,0
0,0,1,0
0,0,0,1
就知道分别代表的是正x轴,正y轴和正z轴,那么世界的单位矩阵应该是left, up ,front构成的啊
再看看绕y轴a角度的矩阵定义:
cos(a), 0, -sin(a), 0
0, 1, 0, 0
sin(a), 0, cos(a), 0
0, 0, 0, 1
前三行向量是绕y轴旋转以后的新的三个轴,代表的是新的空间 x' y' z'轴的伸展方向
想了很久,终于想明白了4x4矩阵的前三个向量分别代表着新的齐次空间三轴x'y'z'轴相对于原来空间的延展方向,最后一个分量是新的位移,这样矩阵的几何意义非常清楚了。
我查了很多资料,对于4x4矩阵前三个向量的含义,基本上所有的资料都没有提,但我想我的理解应该没有问题,不然作者命名分量就不会取那么有“意义”的名字了。
可是newton的作者为什么偏偏第一个分量叫做front而第三个分量叫做right就有点不理解了,我觉得应该反过来,第一个分量叫right第三个分量叫front才对
除非他的坐标系x表示深度,z表示左右,可事实上我也试过了,并非入此,他的16个float和d3d的完全一致。
感觉很奇怪,是我的理解错误,还是作者的一个小小的命名上的失误呢?
|
|