Collada DOM 的使用--CreateSimple…

来源:互联网 发布:博客app软件下载 编辑:程序博客网 时间:2024/06/08 05:00

ColladaDom是一个基于文档对象模型的用来给用户读取Collada数据提供方便的DOM接口,其内核经过我自己在里面找还是BoostTinyXml,所以在学习Collada结构之前掌握一定的xmlSchema的知识我看来是非常必要的,因为我自己也是一个半吊子学的XML,所以可以看做是一边学Collada的读取一边学dom了(虽然不太可能):

首先是要说明一下collada的学习主要还是来自于http://www.wazim.com/Collada_Tutorial_1.htm这位大神的文章,是英文的,当然国内也有人翻译了第一部分,但是我觉得先看一遍翻译自己再理解一遍英文文档会有更大的收获,然后就是如何得到Dom的问题了,我的话就是在sourceforge中得到的http://sourceforge.net/projects/collada-dom/,因为自己用的collada1.4版本的,所以只能编译相应的文件,奇怪的就是一定要用对应版本的IDE,否则会出现莫名其妙的错误,我是用VS08编的dll然后自己写程序用vs2010.

下面当然就是学习的过程了,因为自己之前已经花了一定时间理解colladaSchema和其树结构,所以现在可以直接走起(主要是来自于对于其用户手册的理解http://collada.org/mediawiki/index.php/COLLADA_DOM_user_guide和相关的博文http://www.cnblogs.com/Jedimaster/archive/2007/12/01/979256.html,怎么编译和配置guide上都有讲,也不用再废话了,所以就从文档的创建直接开始)。

 

【创建文档】

DOM中所有的交互都建立在文档的基础上,所以在程序的最初就是需要建立一DAE文档对象,其提供了一个文件之间相互参考的方式,同时也提供其他对象建立所需的状态:

#include<iostream>

#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);//修改修改时间

/

 /


    /

    //在XMLDOM中提供了可以给用户自己定义节点的方法,主要是使用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 sometext");

 elt2->setAttribute("myga","fgag");


dae.writeAll();

return 0;




}

原创粉丝点击