Collada
Dom是一个基于文档对象模型的用来给用户读取Collada数据提供方便的DOM接口,其内核经过我自己在里面找还是Boost和TinyXml,所以在学习Collada结构之前掌握一定的xml的Schema的知识我看来是非常必要的,因为我自己也是一个半吊子学的XML,所以可以看做是一边学Collada的读取一边学dom了(虽然不太可能):
首先是要说明一下collada的学习主要还是来自于这位大神的文章,是英文的,当然国内也有人翻译了第一部分,但是我觉得先看一遍翻译自己再理解一遍英文文档会有更大的收获,然后就是如何得到Dom的问题了,我的话就是在sourceforge中得到的,因为自己用的collada是1.4版本的,所以只能编译相应的文件,奇怪的就是一定要用对应版本的IDE,否则会出现莫名其妙的错误,我是用VS08编的dll然后自己写程序用vs2010.
【创建文档】
DOM中所有的交互都建立在文档的基础上,所以在程序的最初就是需要建立一DAE文档对象,其提供了一个文件之间相互参考的方式,同时也提供其他对象建立所需的状态:
#include
#include"dae.h"
#include"dom\domCOLLADA.h"
#include"dom\domAsset.h"
#include"dom\domGeometry.h"
using namespace std;
int main(int argc,char **argv)
{
//
创建一个叫做simple的dae文档,writeAll的作用就是写入添加到DAE中的原有路径中的所有文档当中,而
DAE dae ;
daeElement *root=dae.add("valid.dae");
daeElement
*asset=root->add("asset");
//asset里面必须要有东西
daeElement
*contributor=asset->add("contributor");//contributer可以为空
daeElement *created=asset->add("created");
daeElement *modified=asset->add("modified");
const char *date="2008-04-08T13;07:25—08:00";//创建时间不能为空
created->setCharData(date); //修改创建时间
modified->setCharData(date);//修改修改时间
/
/
/
//在XML
DOM中提供了可以给用户自己定义节点的方法,主要是使用extra类型来实现的,下面的方法可以实现在library_nodes_node之中添加一个extra节点,并且定义其中的相关属性和元素
daeElement
*extra=root->add("library_nodes node extra");
daeElement
*technique=extra->add("technique");
technique->setAttribute("profile","SteveT");
//在profile里面可以建立自己的节点,命名和属性都可以自己定义
daeElement
*elt=technique->add("myElement");
daeElement
*elt2=technique->add("nextElement");
elt->setAttribute("myAttr","myValue");
elt->setCharData("this is some
text");
elt2->setAttribute("myga","fgag");
dae.writeAll();
return 0;
}