如何将向量和矩阵从左手坐标系转换至右手坐标系

2025-03-13 20:59:29
推荐回答(1个)
回答1:

将右手坐标系转换成左手坐标系,z值取反就行了。
从定义可知,左右手的区别就是z轴一正一负,当然z取反就转换了。
透视矩阵将把坐标系映射到裁剪空间内,而这个矩阵(perspectiveFieldOfViewLH/perspectiveFieldOfViewRH)已经假定了坐标系是左手还是右手。反过来说,在透视之前,使用哪种坐标系都是无所谓的——因此在透视前的变换矩阵都是统一通用的,包括投影和反射——只需要在透视时确定种类即可。进一步说,就是要在透视前的最后一步上,决定是否反转z轴!而这最后一步是相机的视图矩阵,因此可以在它后面加上反转的语句——也就是viewMatrix.appendScale(1,1,-1)——这样所有的顶点就都会反转了,并且正反面并不会受到影响,因为它们从试图空间中看起来是一样的。
需要注意的是,知道视图矩阵其实是把整个世界搬到了原点,也就是说,视图矩阵和模型矩阵其实是一回事,只不过,把特定的模型矩阵(相机)求逆后应用在了其它模型矩阵上而已——当然,也可以直接反着赋值,比如相机左移,而赋值却是正数——但为了看着好看,通常还是采用正常赋值,而在连乘时求逆(viewMatrix.invert())的方法实现这一切。明白了原理,那就应该知道,z取反是在最后一步进行——也就是在求逆后进行的。