怎么将右手坐标系转换成左手坐标系??
答案:2 悬赏:40
解决时间 2021-01-27 19:41
- 提问者网友:不爱我么
- 2021-01-27 01:57
怎么将右手坐标系转换成左手坐标系??
最佳答案
- 二级知识专家网友:一秋
- 2021-01-27 02:15
将右手坐标系转换成左手坐标系,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取反是在最后一步进行——也就是在求逆后进行的。
全部回答
- 1楼网友:话散在刀尖上
- 2021-01-27 03:02
拿一本书来举例,把这本书直立起来,正面朝向你,然后约定,在左手坐标系下,相机在原点位置,朝正Z轴方向看,而右手坐标系则相反,相机在原点是朝负Z轴看的.然后,在右手坐标系下,正面的Z值比背面大,而现在要转换成左手坐标系,并且要看到相同的画面,就必须使正面的Z值比背面小,如果只是把Z值取负,则意味着,正面和背面的所有像素被对等的做了替换,即成了一个镜像的效果,这显然不对.应该把X也取负.这样的话,正面左边的顶点就到了背面右边的位置,(这看上去,似乎正面被放到了后面,但因为左手坐标系下,Z值小的先被看到,所以仍将看到一个正立的书)简而言之,右手坐标系是从最大的Z值往最小的Z值去看的,而左手坐标系相反,是从最小的Z往最大的Z值去看的,即看到的画面将是书的背面,且是镜像的,所以,要把顶点的X和Z值取负.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯