转:Ogre 1.8 文件系统部分(Serializer)
最近用Ogre做些变形方面的东西,要对.mesh进行细致的分析和处理,发现一些对我参考价值的文章,就转过来做做笔记,感谢大家共享资源。
转载自:http://blog.csdn.net/ljy1988123/article/details/7284450
Ogre需要从文件系统中取得资源,或者把内部资源或配置文件存储到文件系统,这里就介绍Ogre与文件系统的交互。看完这个你就对Ogre所使用的各种文件格式有了内部的了解了。
为了高效率,节省空间,资源数据一般都压缩存放(比如把两个不大的数放到一个整数位去),所以打开Ogre的资源数据是乱码。Ogre内部是认识这些数据的,具体每种文件的格式就是在Ogre中定义的。所有文件访问的通用接口是Serializer(见下)
OgreSerializer.h
这个头文件里定义了Serializer,里面包含了文件系统的通用内部函数,这个类作为被继承的类出现,不单独使用(方法都是protected)。内部定义的方法是诸如读取/写入一个字节,一个向量等基本的操作。供继承这个类的子类使用。(当然并不是所有与文件系统操作的类都要继承这个类,material就没有,因为它内容特殊,后面会讲)
下面就是继承这个类的两个子类:(.mesh、.skeleton)
OgreMeshSerializer.h
这里定义的类MeshSerializer,就是产生和读取.mesh文件的,和Mesh对象直接挂钩。
·.mesh文件包含的内容:Mesh(这个该怎么翻译呢。。。都懂的。。。)、每个顶点采用的Material的索引(Texture由Material指定)、每个顶点绑定的skeleton信息、以及顶点动画(morph、pose)。
不过别急,这个类没定义什么其他的细致操作,只用来直接读取和存储,还有一个类定义了更全面的操作如下。
OgreMeshSerialierImpl.h
MeshSerialierImpl这个类就定义了细致的读入和写出protected函数,例如写入SubMesh、Mesh、Animation、Material、SkeletonLink之类的信息
一般做游戏的不需要细致的处理.mesh文件,所以用MeshSerializer就可以了,但是如果你要写个插件,就需要了,这时更细致的MeshSerializerImpl就派上用场了,继承这个类,添加自己函数就可以了。
OgreSkeletonSerializer.h
定义了SkeletonSerializer类,就是.skeleton文件的读取和写入类。
·.skeleton文件包含的内容:Skeleton信息(就是Bone之间的逻辑、位置关系)、骨骼动画(不仅是本skeleton的动画,还可以是其他skeleton的动画的link)。注意,顶点动画是存在.mesh里的,骨骼动画是存在.skeleton里的。
下面的是独立的Serializer
OgreRenderSystemCapbilitiesSerializer.h
这个头文件定义了RenderSystemCapabilitiesSerializer类,用来读入读出.rendercaps文件,这个文件比较少用到,用来描述当前环境的渲染能力的。比如不能用Opengl,硬件支持mipmap,逻辑上讲这个文件可以在程序第一次运行的时候生成,然后第二次打开就不用检测了。或者是在游戏安装的时候生成。
OgreMaterialSerializer.h
定义了MaterialSerializer类,用来读入和读出.material文件。不过没那么简单,这个Material可是同时管理Texture、.Material和shader呢~~~~~不过Texture的格式不是由这个类控制的,是由OgrePixalFormat.h控制的,同样,shader的格式也是由shader的语法控制的(ASCII的)。读取和写出都由各自的渲染引擎完成。
另外Ogre还支持Zip格式的资源包,操作接口在OgreZip.h里定义。
综上,Ogre常见的文件格式:.mesh , .skeleton ,.material,就这三种了。其他的诸如.rendercaps , .和Texture、shader则都是由具体的渲染引擎加载处理的。