OgreXmlConverter 是Ogre自带的一个工具,负责将.mesh和.skeleton文件转换为对应的.xml文件,以及反向转换。上一讲有个地方写错了,Sinbad.mesh文件所在的目录是Sample/Media/packs/Sinbad.zip,解压Sinbad.zip到当前文件夹,就能看到Sinbad.mesh了。还有看到有些读者编译时遇到一些问题,作者的环境采用的是vs2008,Ogre-1.7.4,Ogre的Dependencies选用old版本下载好src目录有.sln编译后把Dependencies目录复制到Ogre目录里,CMake可以用官方最新版,编译流程参考http://www.jb51.cc/article/p-xtqkpdpz-bmn.html
OgreXmlConverter对.xml文件的读取流程:
1.创建MeshSerializer对象,MeshSerializer::Import负责完成读取流程
void XMLToBinary(XmlOptions opts)
{
//通过TiXmlDocument打开并读取Sinbad.mesh.xml(opts.source)文件
TiXmlDocument* doc = new TiXmlDoucment(opts.source)
doc->LoadFile();
}
//在这里打开并读取全部的Sinbad.mesh.xml文件,在Parse函数里面进行文件解析
2.TiXmlDoucment::Parse对Xml文件字符串进行解析
将Xml文件的树形结构,解析到一个树中,树的节点就是XmlNode
class XmlElement:public XmlNode{
virtual const char* Parse(const char *p);
const char* Attribute(const char* name) const;
const XmlAttribute* FirstAttribute() const;
const char* ReadValue(const char *p);
XmlAttributeSet attributeSet;
};
通过XmlElement对下面的小树进行深入解析
//因为是树结构,通常在遍历解析的时候都是递归进行,理解清楚就好办了
经过以上步骤,基本可以完成对Xml模型文件的读取,甚至所有Ogre模型骨骼文件都可以读取了
但是对于Ogre这个庞然大物,上面的内容实在是微不足道,疏漏之处还望不吝指正,接下来下周(暂定每周一博看看效果),下一讲,看看怎么把读到的内容塞进Ogre的Mesh里,后面的世界更精彩,敬请期待(PS:读者若有疑问或者建议,可在下面直接发表评论,有时间作者第一时间回复,作者新浪微博:http://weibo.com/1012294255/profile?topnav=1&wvr=6)