本来,按照同样的坐标值描述的摄像机和物体,在左右手坐标系中渲染出来的画面应该是左右颠倒的. 现在假如世界建模在右手坐标系中,但是数据传入左手坐标系的图形API中的时候,转化应该是怎样的?尤其是对视点坐标系的转化,因为左右手坐标系规定的摄像机朝向也不相同. 我看了下OGRE的实现,首先,顶点坐标输入D3D中的时候没有转化,其他的转换矩阵也没有转化,视坐标系输入D3D的时候,把三行全部变号,对于这个转化我理解的不是太透彻. 我理解中,1.应该是转换矩阵不用改变2.顶点坐标应该将Z值取反3.然后视坐标系应该将X,Z值同时取反,OGRE只改变视坐标系一行的行为,是不是合并了2和3? 还是我理解的有错误? 哪位达人给解释下.谢谢
OGRE我没看过,也不太清楚,我目前用的只是涉及到右手坐标系。
在3D空间中,所有2D坐标系是等价的(就是通过一系列的仿射变换,可以互相转换),而3D坐标系不是等价的,通过仿射变换,是无法将左手坐标系转换到右手坐标系;也就是说,物体坐标系用的就是左手坐标系,世界坐标系用的是右手 坐标系,那么物体可能就是不会是我们所希望的样子了,可能是倒立的,也可能是背对着我们的,所以我们要区分左手坐标系与右手坐标系。如果有了相机的位置与目标的位置那么我们可以确定一个Z轴(之所以用Z轴,是由于物体的远与近我们就习惯用Z值来表示)。求Z轴时要注意是左手坐标系还是右手坐标系,左右手坐标系XY轴方向相同时,Z轴的方向相反。所以左手坐标系是目标位置减去相机位 置,而右手坐标系则是相机位置减去目标位置,记得要normalize。
不知道对你有没有帮助