您的位置:首页 > 其它

3DS模型解析的问题

2008-12-05 21:59 211 查看
前段时间在解析3ds模型的时候遇到了问题,经过一段时间的摸索算是有了解决方案,下面跟大家分享一下:

情况是这样,本来是在3ds max中看的好好的模型,用OpenGL导到程序里会发现模型位置错乱,mesh之间的相对位置变化很大,有的mesh莫名其妙的升高了,或是旋转了180度,还有模型像被炸开了,东一块西一块。

想到这跟顶点有关,于是跟踪0x4110---POINT_ARRAY发现3ds中存储顶点数据并不是我们在3dmax中看到的点数据,而是经过了坐标矩阵转换的,又跟到0x4160---MESH_MATRIX,这里存储一个float matrix[4][3]矩阵中的12个float型数据,这个矩阵是当前mesh的转换矩阵,也可以理解为这个mesh的基准点坐标系,基准点就是围绕这个坐标系旋转平移缩放的,这个基准点在3dmax中叫pivot,所以这里我就管这个转换矩阵叫pivot坐标系,修改pivot是在3dmax中Hierarchy(层级)面板下,可以有多种修改方式修改它个mesh之间的位置关系。

原始顶点数据乘以这个变换矩阵就成了3ds文件中存储的的数据,于是我想到把从3ds中读取顶点数据都乘以这个转换矩阵的逆矩阵,原始顶点不就出来了么。

但是,后来我发这样做也不能完全解决问题,如果一个3ds中有多个mesh,而每个mesh的pivot坐标系都是不同的,而且你看到每个pivot坐标系可能还不是mesh最初的pivot坐标系,不信你可以按下reset pivot键,有的mesh的pivot点会回到最初的状态,(关于这个pivot点最初的状态,一般是在edit mesh时,使用attach功能,第一个mesh的最初pivot点,这个点的位置和方向很可能不在合并后mesh的下底面中心点上,它可能在mesh上面,或者它的方向跟3dmax默认的坐标系相反,这要看你在attach mesh时选中的第一个mesh的pivot点了),现在问题就来,我不知道这个3ds中在哪里存储了这个最初pivot点的信息,所以当顶点数据乘以pivot坐标系坐标系的逆矩阵时,还是会有问题。

所以我建议做3ds模型要注意一下几点,就可以避免模型错乱问题:

1.一个3ds模型里面最好是一个mesh,而且这个mesh的pivot点最好是mesh的下底面中心点,操作办法可以用先点击Affect Pivot Only,然后用Center to Object/Pivot对其,最后在z值的地方输入0;

2.最好把mesh模型的下地面中心放到max场景的原点上,当然这一步你也可以在程序里控制;

3.如果在建1:1的模型,如果你使用的是meters为单位,那么在解析3ds时的比例1meter=1000,就是说你绘制个1*1*1的box,解析后的顶点数据1000*1000*1000单位,知道这样就可以在做数据的时候把握好mesh的大小,省的到OpenGL场景中还调整mesh的比例。

零零碎碎说了这么多,还是希望能给有过类似问题的朋友一些帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐