突然想到以前对于Ogre都是太肤浅的认识,经过这段时间的学习以及深入研究,对于Ogre的动画系统总算是有所眉目,不过还只是冰山一角而已。再次验证了,还是要在一个公司好好待个几年才会有好的积累,希望能在本公司至少待满3年吧。
接下来的这段时间,我会不断的写一些我所理解的Ogre动画系统,也许我写的不够好,或者有错误,希望大家积极指出,谢谢。
首先我还是要介绍一下Ogre动画系统的一些基础设计和基础概念,这样对于后面的Ogre动画系统的介绍才能看懂,请原谅我这么直白,好吧,那现在开始吧。
今天要介绍的Ogre涉及Mesh、SubMesh、Entity、SubEntity这四个数据结构。
先画个UML图来表明这几个数据结构之间的关系图以及继承关系。
好吧,请原谅我不会用UML图,word不懂画这种图。
Entity:从继承关系表明它是一个可以移动的“物体”,还继承Resource::Listener监听类,也就是这个类,定义了是基于Mesh的物体,它一般都包含多个subEntity,并且跟一个Mesh一一对应。Entity是一个在“世界中”的几何体代表。它可以包含mesh、同样也包含Entity。
SubEntity:从继承关系来看,它是一个“可渲染物体”,其实也就是包含了SubMesh的这种具体渲染数据,它是Entity的一个子部分。那么它同样是跟SubMesh一一对应的。
Mesh:首先看继承,就知道它是一个资源,也就是它是具体的模型数据(顶点、法向、纹理、切线.......),一般它是跟Ogre中的Mesh文件对应,好吧,也不枉费它们两者同名吧,当然它也是相当于“绑定”到Entity中的,也是一一对应的。它同样也可以包含多个子SubMesh的。
SubMesh:好吧,这个的继承关系最简单,它只继承于一个关于内存分配有关的类,我就不介绍了。它跟SubEntity一一对应的,也是Mesh的一个子体。
好吧,我就简单介绍上面我说的意思:
首先,在世界中,它是Entity存在,包括绑定到Node上,对外的一个“总接口”(随便说一下,这也是Ogre的一个好的设计吧,就是场景图和场景数据分开)。Entity是处理跟渲染相关的属性,比如说动画缓存数据、骨骼矩阵数据等。它是可以(应该)包含一系列的SubEntity,SubEntity包含当前SubMesh所使用的最重要的材质文件、渲染队列号,好吧,就是除了模型数据之外的所有东西。Mesh就是包含具体的模型数据(就是跟.mesh文件)相对应的数据接口,里面的数据结构,我接下来的几篇会总结。SubMesh,就是具体要渲染的数据,就是三角形的索引数据、顶点数据等。
好吧,我讲的好乱,希望大家能听懂一点,也不枉费我这么不容易了,该煮饭,也不知道下次什么时候能写,希望能把这块内容总结完。