转载自:

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部分描述了每个顶点所附着的骨头组及权重。

Ogre的mesh和skeleton文件数据格式分析的更多相关文章

  1. Axiom3D:Ogre中Mesh文件格式分析(一)

    在Axiom3D,或者说是Ogre的mesh的文件格式我们可能通过代码反推出相关格式,相关过程本来我是直接写的,后面发现相关流程写完后,我自己都看晕了,然后我就把一些过程用Execl整理出来,发现过程 ...

  2. PE文件学习系列笔记四-C++实现PE文件的分析

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com 综述: 首 ...

  3. 教程-Delphi资源文件(全面分析于使用)

    Delphi资源文件(全面分析之位图.光标.图标.AVI.JPEG.Wave)   几乎每个Windows应用程序都使用图标.图片.光标等资源.资源是程序的一部分,但是它是不可执行代码.下面我们就详细 ...

  4. 【JVM】Java中的JavaCore/HeapDump文件及其分析方法

    产生时间 Java程序运行时,有时会产生JavaCore及HeapDump文件,它一般发生于Java程序遇到致命问题的情况下. 有时致命问题发生后,Java应用不会死掉,还能继续运行: 但有时致命问题 ...

  5. 对stm32f373XX的startup.s的文件的分析

    ;******************** (C) COPYRIGHT 2012 STMicroelectronics ********************;* File Name : start ...

  6. Android.mk文件简单分析

    Android.mk文件简单分析 一个Android.mk文件用来向编译系统描写叙述须要编译的源码.详细来说:该文件是GNUMakefile的一小部分.会被编译系统解析一次或多次. 能够在每个Andr ...

  7. /etc/rc.d/init.d/functions文件详细分析

    /etc/rc.d/init.d/functions文件详细分析 functions这个脚本是给/etc/init.d里边的文件使用的(可理解为全局文件). 提供了一些基础的功能,看看里边究竟有些什么 ...

  8. opencart 单入口文件简单分析

    opencart 单入口文件简单分析   opencart是基于mvcl的商城系统,据说是一个外国有人单独开发.比较牛叉.但是又不大符合国人习惯,目前国内opencart社区也是不少. 简单分析了下单 ...

  9. quick-cocos2d-x教程3:程序框架内文件夹分析之docs文件夹

    如今我们分析框架中的docs文件夹.看看这个文档文件夹中,究竟放了那些对我们实用的东西. docs文件夹分析 UPGRADE_TO_2_2_3.md 就是讲升级的变化.详细说明:quick-cocos ...

随机推荐

  1. CF 445A(DZY Loves Chessboard-BW填充)

    A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. mvc 发送QQ邮件

    试图部分代码: @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } ...

  3. java CyclicBarrier和wait/notifyAll

    1 CyclicBarrier 多个进程做自己的事情,然后先做完的就等待在CyclicBarrier上,然后最后一个做完的线程到来时会冲破CyclicBarrier,然后执行CyclicBarrier ...

  4. c++通用写文件调试代码

    #include <stdio.h>#include <sstream>#include <iostream> std::stringstream strs;str ...

  5. 使用 Visual Studio Code 运行 C# 及 Java 程序

    背景 很多情况下,我只是想要编写一个非常简单的 C# 或者 Java 程序,只有几行代码,看看运行结果而已.虽说 Visual Studio / Eclipse / IntelliJ IDEA 功能强 ...

  6. ora-12170 与 Oracle lsnrctl

    在startup 启动数据库后,使用plsql去连接数据库时, 出现ora-12170 错误:   在启动.关闭或者重启oracle监听器之前确保使用lsnrctl status命令检查oracle监 ...

  7. 使用 QWorker 做为计划任务引擎

    QWorker 提供了 Plan 函数来提供计划任务功能的支持.每个任务做为一个作业,可以在指定的时间点被触发执行.而 cron 作为 Linux 操作系统下计划任务的标准被广大用户所熟知,QWork ...

  8. tornado之运行第一个tornado程序

    Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中. 首先是安装torn ...

  9. Windows10搭建FTP服务器

    配置FTP服务器步骤: 第一步: 打开控制面板--->选择程序--->启动或关闭Windows功能--->勾选FTP服务器等.如下图: 第二步: 右键此电脑--->点击管理-- ...

  10. DIV+CSS常见问题的14条原因分析

    当你在一个浏览器里面做好,在其他浏览器里面却完全不是那么回事情.  很多时候,我们就只是去修补下,或者利用各个浏览器对代码支持的不一致,进行针对各个浏览器进行不同的定义.  其实浏览器的不兼容,我们往 ...