最近研究了下3dmax导出插件的东西.游戏编程精粹2上给过部分代码,但不完整而且我觉得那上面的实现并不好.这里贴下我的实现.
首先定义骨骼的结构:
我将骨骼结构放入一个顺序表中,Bone::parent和Bone::childs中存放的都是这个顺序表中的索引号.
然后是权重信息.精粹2上是将权重信息放到骨骼的结构中去,我认为这样不太好.因为如果要使用硬件shader实现骨骼动画的话,是需要把权重信息放到顶点缓冲中去传送给显卡的,因此应该放到每个顶点的信息中去.
我是这样定义:
typedef std::map<int, float> Weight_Vertx;//权重顶点
其中键是骨骼的索引号,值是权重.
typedef std::vector<Weight_Vertx> Weight_Vertx_List;//权重顶点列表
Weight_Vertx_List m_weight_vertexs;//权重顶点
最终希望的是读取骨架结构,放入m_bones中,然后读取每点的权重,放入m_weight_vertexs
中.
=============================传说中的分割线======================================
下面先给出整个导出类的定义:
先给出几个基本的函数的实现,在精粹2上都有的: