看了些时间的D3D skinmesh,大概看了下SDK里的蒙皮动画的例子,有几个疑问总是搞不通请指教
1.关于X文件里的frame,很多资料上说每个bone都会对应到一个frame请问是否正确?
2.若1正确的话在处理vetex blend的时候D3DXFRAME_DERIVER结构的数量就是X文件里的frame数量,但是为什么只有一个D3DXMESHCONTAINER_DERIVER是有效的呢?很多D3DXFRAME_DERIVER->pMeshContainer都是NULL
3.渲染的时候是通过遍历D3DXFRAME_DERIVER进行的,if(D3DXFRAME_DERIVER->pMeshContainer !=NULL) DrawSkinMesh(..)
发现骨骼信息却是在D3DXFRAME_DERIVER->pMeshContainer中提取的那D3DXFRAME_DERIVER到底是不是骨骼呢?我描述的可能比较乱。。哪位了解点的。。给点指点即可。。感激不尽。。

解决方案 »

  1.   

    飞机上有蒙皮才显得光滑,人有皮肤才不会露出骨头.我想,你是否可以在关节处加上一些蒙皮来模拟一下,比如肘关节,上臂和下臂都用长方体做成,在关节处共有8个点,你可以用面将它们连起来,那关节不久看不见了吗?如果速度允许,可以加上一些算法形成曲面,此曲面就是关节,在与上臂和下臂的连接处相切,可以用抛物面来代替.   
    给你些参考:Ogre的骨骼动画写得很好,可以看看,只是架构稍微有点复杂   
      http://sourceforge.net/projects/ogre   
        
      它的实现涉及几个类   
        
      mesh:   封装3D网格的数据,主要包含submesh和骨骼动画。可以认为是一个人体的抽象   
      submesh:   mesh由submesh组成,submesh可以表示人体的各个部分,封装人体各部分的几何数据   
      entity:具体的人体对象,mesh只是人体的组成数据,而entity就是一个个具体的人,由subentity构成,另外还包含这个人的运动状态   
      subentity:对应submesh,人体各个部分的实体   
      skeleton:骨骼动画,封装动画及骨骼   
      node、bone:节点、骨骼,用于表示骨骼的层次结构,比如小腿是大腿的子节点,那么大腿运动必然打动小腿运动。用于计算骨骼动画的变换矩阵   
      Animation:一组动画,比如用一个animation表示人的行走动画,用另外一个animation表示人的跑步   
      AnimationTrack:一组动画中的一块骨骼的一个动作,比如小腿在行走中的动作,由动画帧构成   
      KeyFrame:一块骨骼的一个动作的动画帧,封装骨骼的位移、旋转、缩放数据   
        
      在RenderSystem的softwareVertexBlend里面用变换矩阵变换各个顶点的位子   
        
      而骨骼动画的骨骼可以在3ds   max、maya这类软件里面创建,可以给它们编写插件导出自己的骨骼动画文件格式,这些在ogre里面都有范例 
      

  2.   

    终于对bone和frame还有mesh关系有些基本的理解了跟大家分享一下,有错误请批评指正,多谢!bone和frame实际就是层次结构,mesh是数据,层次结构也就是骨骼了,frame中包含了mesh,但是就有问题了,为什么很多X文件中很多frame都没有自己对应的mesh,实际上应该都是有的(这里指受此frame影响的“顶点数据”),只是这个mesh没有被分开,只存在于一个template mesh中,在mesh数据中应该有联系顶点和层次关系的域,但是俺还不知道,猜的最后D3D对X文件进行分析的时候会把这些信息提取出来然后填充到一个FVF vetex,一个DWORD变量描述容量为256个矩阵的矩阵调色板的4个索引(即一个DWORD可以指定4个影响此vetex的矩阵,一个面最多收12个矩阵影响,这个数据可以用来评测硬件的能力,硬件vetex blending不行的话就只能使用软件了)
      

  3.   

    BONE动画..单个..没有FRAME之分.它是按时间..来控制..每个顶点的位置..如,抬脚动作..如果..你把抬手动作也包含在内..就有FRAME..对于BONE动画..对3D建模是有要求的..我用的是SQ..的EDIT..
      

  4.   

    到现在还是想不通为啥DX的那个skinmesh使用vetexindexedblending的时候为啥要根据受最多矩阵影响的那个三角面来检测硬件能力俺总是认为应该是俺点算的要是说理解的话。。俺只能认为vetexindexedblending方式可能是在同时blend三个vetex然后要同时渲染出来,而不像non-indexed方式下要根据“定点索引”进行三个vetex的blending后才能渲染也许是完全blending后再渲染(猜的)只能这样理解了汗
      

  5.   

    先夸一下黑暗伯爵哦~~
    总结概括的不错~~
    http://topic.csdn.net/t/20030520/10/1807606.html#r_achor
    很不幸的是我在上面的网址找到了另一个更早一些的……
    我只能这样解释,他们冒充你老兄的版权哦……
    稍稍表示一下鄙视