关于3DsMax与Unity坐标轴的若干问题详解
网上有很多叙述关于3DsMax制作的模型导入到Unity3D时如何进行坐标轴处理的方法,大部分只告诉你该如何做,至于为什么也没写。有的解释了,但是解释的完全是错误的。由于我之前解析过FBX文件,所以对其的格式有所了解,但是之前一直使用OpenGL写程序,U3D和3DsMax之间的纠葛我也没怎么了解,今天学习U3D时候碰到了所以针对坐标轴的一些问题和FBX文件的一些问题写了一篇文章,希望把东西分享出去同时记录下来怕自己以后忘了。
一、 FBX文件格式
FBX格式是Autodesk公司推出的一种“跨平台”的模型文件格式也是U3D支持最好的模型文件格式,其跨平台指的是在3DsMax、Maya、Blender等等建模软件中都可以导出和导入(有的可能需要装插件)甚至你可以自己写程序去解析FBX数据,把你需要的顶点、UV、法线等等信息全部取出来。
解析其中的数据一般是通过官方给的FBX SDK进行解析,因为FBX导出时有两种选项,一是文本格式(很少很少用)另一种就是二进制格式,所以针对文本格式,你可以自己分析自己写解析器,但是对于二进制格式,你还是还是乖乖的使用FBX SDK,而且FBX有一个特点,就是它所包含的信息非常非常非常的多,普通的模型格式文件比如obj,它所包含的就是模型数据,顶点位置、法线、UV和材质(材质单独为mat文件),而且本身obj就是文本格式,简单明了。而FBX包含的除了上面的基本信息还有蒙皮信息、骨骼信息和动画信息以及很多的旋转信息、每帧时间、坐标系、灯光、摄像机、场景结点等等很多信息,它丰富的足以“保存”下一个游戏场景而不是单单一个模型。加之官方对其的文档让人很无语,即使使用SDK仍然要花蛮多的时间弄懂这些信息代表的是什么。
二、3DsMax和U3D使用的坐标系及其转换
首先3DsMax使用的是右手坐标系,Unity使用的是左手坐标系
左右手坐标系的转换是不能单靠一个旋转就能解决的,必须翻转某一个轴再进行渲染操作才能使得右手坐标系到左手坐标系
通常我们在3Ds建模完成的模型文件直接导入到Unity中,会看到Unity自动绕x方向旋转了-90度(左手坐标系)