|
发表于 2009-8-11 15:35:00
|
显示全部楼层
Re:3dmax与direct3D坐标对应关系
我用max script做过导出插件,这种方法可行:
对于顶点,YZ颠倒
对于三角面,三个顶点索引逆序,例如 1,2,5 变为 5,2,1
对于transform(骨骼,或者object的transform,在导出动画时会用到),position部分yz颠倒,scale部分yz颠倒,rotation部分,转换为angle axis,并将axis中的yz颠倒。变换后的srt分别创建出矩阵,按照scale,roation,translation的顺序重新乘,就可以得到新的transform。但如果直接给transform的position,rotation,scale成员分别赋值,你会发现你赋值了一个成员的同时,其他成员会被归0 = =
另外,对于transform,一定要在最后一步,也就是即将要写文件时再进行这种变换,如果中间结果的transform进行了变换,计算出的最后结果可能会不正确,原因我还没有弄明白,不过结果的确会不对。例如:
tCurBoneLocalTransform = tCurBoneWorldTransform * inverse( tParentBoneWorldTransform ) ;
--在这一步进行坐标系转换
tCurBoneLocalTransform = FlipCoordinateForTrans( tCurBoneLocalTransform );
在tCurBoneWorldTransform或者tParentBoneWorldTransform进行坐标系变换,则最终结果可能会不对。
另外,这个问题,真正从零开始做过max导出插件的人都碰到过,希望有更多的人把自己的经验拿出来分享。 |
|