最近在做将MAX中导出的Fbx文件导入到我的引擎的接口,在中间遇到了蛮多问题。所以,要在此列一下。
在坐标系之间转换时,我们不需要将坐标系做太过复杂的变换,只需要将右手视坐标系转化为左手是坐标系,或者右手世界坐标系转化为左手世界坐标系。如果你能动手画一下这两个坐标系的话,你就能明白,只要将Y和Z轴调换一下即可。即将y和z坐标调换一下。注意不只是调换点的坐标,我们还要调换法线的坐标,不然很多贴图可能会丢失。
但是经过以上这样做,图形还是看不见,这是因为图形被消影了。原来三角形的顶点式按照右手坐标系顺序来画的,但是上述转化后,这个顶点顺寻没有改变。有以下处理方法:将三角形的第一个顶点和第三个顶点交换,切线,法线方向取负(光照要用到)。如果这个可能实在是太麻烦了,那么在setRenderState中改成右手背面消影,但是法线最好还是改一下~~
接下来就是贴图了。纹理贴图在左手坐标系中u正向是水平向右,v正向是垂直向下;在右手坐标系中v是垂直向上的,那么在v∈[0,1]的纹理坐标系中我们只需要将v表位1-v即可。当然,我们应该将纹理坐标和前两个步骤之后的坐标对齐。