截至昨天晚上,XFile的解析算是基本完成了。从最初的简单mesh数据的解析到关键帧动画的解析,到最后的skin mesh动画的解析,自己也学到了很多东西。这里只记录点解析过程中遇到的问题以作以后参考。

一、panda direxctx 导出时是否优化的问题

在panda directx插件的导出选项中有一个对导出mesh是的优化选项。此选项如果选择优化,在使用CXFileMesh及其子类时,模型的法线会产生一定数量的偏差(这个问题当然可以改进,但目前还没有改进的必要)。偏差是因为优化后的数据,重复顶点会被去掉,而顶点法线使用索引的形式与顶点相关联。只所以没有改进这个问题是因为:在游戏中常常使用的是烘焙好的贴图,这样一来法线就不参与运算,再者即使有模型须要用到法线来计算输出颜色,在复杂点的模型中这点小的法线偏差是不易差觉的。

二、解析完数据后mesh数据的优化问题

自己习惯上每解析完一个模型后会调用GenerateAdjacencyAndPointRepsOptimize 函数来优化一下。但在skin mesh的解析上情况完全不同了,由于刚开始的疏忽,使自己费了很大劲才发觉以下问题:对于skin mesh优化后顶点会被重新排序,这会导致随后的skin mesh动画完全乱套!!。骨骼后影响的点将不在是原来的点!虽然可以选择重新映射骨骼影响的点的索引来解决问题,但为了简单我还是选择不优化mesh数据(偷懒的作法)。

2011-9-10序:今天发现还是可以优化的,在优化的时候加上D3DX10_MESHOPT_IGNORE_VERTS 就可以了,这样顶点的顺序就不会改变了。
三、offsetMatrix 与 tranformMatrix

在每个frame 中都会有个tranformMatrix,而在skinweights中会有个offsetMatrix 。经过测试,下面是这两矩阵的意思

offsetMatrix :将mesh顶点的本地坐标转换到相应骨骼的骨骼坐标系下。

tranformMatrix:对于skin mesh此矩阵表示当前frame在其父亲坐标系下的位置,也就是可以用此矩阵将当前frame 下的坐标值转换到其父坐标系的值。

四、用toWorldMatrix还是toRootMatrix

资料上可能用多是toRootMatrix,但目前来说,我还没有发现toRootMatrix的好处,我更习惯直接将顶点从当前骨骼坐标系转换到世界坐标系。如果将来有一天发现它的好处函数XFileInfo::UpdateFrameToWorldMatrix就会变成XFileInfo::UpdateFrameToRootMatrix了。

五、待解决的问题

问题:当在3ds max的一个场景中再导入另外一个场景中的蒙皮模型时,此蒙皮模型会有稍微变形的现象。

(暂时不解决,还得弄清到底是程序逻辑的问题还是导出插件的问题。再者,强的针对性意味着低的通用性,为了使类的通用性更强,在没弄清原因之前暂且把该问题记录在这里)

posted on 2011-09-12 15:53  yaoyao_cn  阅读(298)  评论(0编辑  收藏  举报