zoukankan      html  css  js  c++  java
  • Ogre的mesh和skeleton文件数据格式分析

    转载自:

    http://www.cnblogs.com/topicofkevin/archive/2012/03/05/2380808.html 

     首先看一下skeleton文件,skeleton文件描述和记录了物体的骨骼和动画情况。

    1. <skeleton>  
    2.     <bones>....  
    3.     <bonehierarchy>...  
    4.     <animaions>...  
    5. </skeleton>  

    从上面得知,整个skeleton文件分成了三部分bones,bonehierarchy,animations。

      1.bones部分描述了每一块骨头的具体情况:

    1. <bones>  
    2.     <bone id="0" name="Joint1">  
    3.          <position x="0x1195046"  y="0.51196"  z="0"  />  
    4.          <rotation angle="0">  
    5.               <axis x="1" y="0"  z="0"  />  
    6.         </rotation>  
    7.         </bone>  
    8.         <bone>  
    9.         .....  

    从上面可知,其实一块骨头,实际上真正的有效数据仅是一个起始位置,和一个起始的转向。当然骨骼还包括骨骼的编号和名字这样的数据。

    2.bonehierarchy,即骨骼的继承关系,描述了骨骼是怎么样组成骨架的。

    1. <bonehierarchy>  
    2.      <bonepatent bone="Joint2" parent="Joint1" />  
    3.      <boneparent bone="Joint3" parent="Jonin2"/>  
    4.      <boneparent bone ...  
    5. ...   

    至此skeleton文件已经完整的描述了一整个骨架。

    3.animations动画集部分。动画集,由多个动画组成。  每个动画由一系列的track组成,每个track由一系列的Keyframe组成。一个track描述了单块骨头在每个keyframe所描述的时间点的位移和旋转。

    上图显示名为"Attack1"的动作,时长为1s, 由多个track组成,其中一个track所表示的是名为"Join1"的骨头的运动情况。各种Keyframe表示在指示时间点的位移和旋转。



    再看看mesh文件

    1. <mesh>  
    2.      <submeshes>  
    3.           <submesh materail="Examples/Ninja" usesharedvertices="fase" use32bitindexes="fase" operationtype ="trangle_list">    
    4.            <faces count="904">  
    5.                   <face v1="0" v2="1" v3="2"/>   
    6.                   ..........................  
    7.           </faces>  
    8.           <geometry vertexcount="781">  
    9.                     <vertexbuffer positions="true" normals="true">  
    10.                          <vertex>  
    11.                              <position x="0" y="179.594" z="-16.0094" />  
    12.                              <normal x="1.66615e-008" y="0.160267" z="-0.987074" />  
    13.                         </vertex>  
    14.                         .....................................   
    15.                   </vertexbuffer>  
    16.                    <vertexbuffer texture_coord_dimensions_0="2" texture_coords="1">  
    17.                           <vertex>  
    18.                                  <texcoord u="0.44849" v="0.141284" />  
    19.                          </vertex>  
    20.                          .......................  
    21.                     </vertexbuffer>  
    22.           </geometry>  
    23.            <boneassignments>  
    24.                 <vertexboneassignment vertexindex="0" boneindex="7" weight="1" />  
    25.                 <vertexboneassignment vertexindex="1" boneindex="7" weight="1" />  
    26.                 ..................  
    27.             </boneassignments>  
    28.      </submeshes>  
    29.      <skeletonlink name="ninja.skeleton" />  
    30. </mesh>  

     每个mesh由多个submesh组成,每个submesh由faces部分, geometry 部分,boneassignments部分组成。faces部分用 顶点索引描述了物体的每一个三角形面。geometry部分由两个vertexbuffer组成,第一个描述了每个顶点的坐标和法线,每二个描述了顶点的UV,boneassignments部分描述了每个顶点所附着的骨头组及权重
  • 相关阅读:
    apicloud 运费计算js+页面
    css让字体细长
    vue 请求完接口后执行方法
    js监听当前页面再次加载
    用apicloud+vue的VueLazyload实现缓存图片懒加载
    git merge和git rebase的区别(转)
    yuan先生博客链接
    django组件之contenttype(一)
    Django的orm中get和filter的不同
    python第三方库requests详解
  • 原文地址:https://www.cnblogs.com/nafio/p/9137667.html
Copyright © 2011-2022 走看看