如何将向量和矩阵从左手坐标系转换至右手坐标系
1个回答
展开全部
将右手坐标系转换成左手坐标系,z值取反就行了。
从定义可知,左右手的区别就是z轴一正一负,当然z取反就转换了。
透视矩阵将把坐标系映射到裁剪空间内,而这个矩阵(perspectiveFieldOfViewLH/perspectiveFieldOfViewRH)已经假定了坐标系是左手还是右手。反过来说,在透视之前,使用哪种坐标系都是无所谓的——因此在透视前的变换矩阵都是统一通用的,包括投影和反射——只需要在透视时确定种类即可。进一步说,就是要在透视前的最后一步上,决定是否反转z轴!而这最后一步是相机的视图矩阵,因此可以在它后面加上反转的语句——也就是viewMatrix.appendScale(1,1,-1)——这样所有的顶点就都会反转了,并且正反面并不会受到影响,因为它们从试图空间中看起来是一样的。
需要注意的是,知道视图矩阵其实是把整个世界搬到了原点,也就是说,视图矩阵和模型矩阵其实是一回事,只不过,把特定的模型矩阵(相机)求逆后应用在了其它模型矩阵上而已——当然,也可以直接反着赋值,比如相机左移,而赋值却是正数——但为了看着好看,通常还是采用正常赋值,而在连乘时求逆(viewMatrix.invert())的方法实现这一切。明白了原理,那就应该知道,z取反是在最后一步进行——也就是在求逆后进行的。
从定义可知,左右手的区别就是z轴一正一负,当然z取反就转换了。
透视矩阵将把坐标系映射到裁剪空间内,而这个矩阵(perspectiveFieldOfViewLH/perspectiveFieldOfViewRH)已经假定了坐标系是左手还是右手。反过来说,在透视之前,使用哪种坐标系都是无所谓的——因此在透视前的变换矩阵都是统一通用的,包括投影和反射——只需要在透视时确定种类即可。进一步说,就是要在透视前的最后一步上,决定是否反转z轴!而这最后一步是相机的视图矩阵,因此可以在它后面加上反转的语句——也就是viewMatrix.appendScale(1,1,-1)——这样所有的顶点就都会反转了,并且正反面并不会受到影响,因为它们从试图空间中看起来是一样的。
需要注意的是,知道视图矩阵其实是把整个世界搬到了原点,也就是说,视图矩阵和模型矩阵其实是一回事,只不过,把特定的模型矩阵(相机)求逆后应用在了其它模型矩阵上而已——当然,也可以直接反着赋值,比如相机左移,而赋值却是正数——但为了看着好看,通常还是采用正常赋值,而在连乘时求逆(viewMatrix.invert())的方法实现这一切。明白了原理,那就应该知道,z取反是在最后一步进行——也就是在求逆后进行的。
长荣科机电
2024-10-27 广告
2024-10-27 广告
采购咨询热线:133 1649 5092 深圳市长荣科机电设备有限公司 是一家专业从事滑台模组、线性模组、直线模组、直线滑台、电动滑台、精密机械手、伺服定位滑台自动化设备集研发、制造、销售服务于一体的高新企业。本公司拥有-批长期从事于自动化...
点击进入详情页
本回答由长荣科机电提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询