Mercurial > hg > Events > OSC2009
changeset 7:e5fb71cb32c3
add XML loading to presen.html
author | koba@koba.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Sat, 26 Sep 2009 06:19:40 +0900 |
parents | 05e384a4e00b |
children | eb6ea531c6d8 |
files | presen/presen.html |
diffstat | 1 files changed, 92 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/presen.html Sat Sep 26 02:49:43 2009 +0900 +++ b/presen/presen.html Sat Sep 26 06:19:40 2009 +0900 @@ -128,13 +128,103 @@ </ul> +<!-- +ポリゴン生成部分。主な参照コードは SceneGraph.cc, SceneGraphRoot.cc, polygon.cc xml.cc +--> +<div class="slide" id="id1"> +<h1>SG.xml を Cerium で Load</h1> + +<h2>生成されたxmlファイル</h2> +<font size="4"><pre> +<?xml version="1.0"?> +<OBJECT-3D> + <surface name="Cube" size="36" prim="Triangle" parent="NULL"> + <coordinate> + 〜頂点座標〜 + </coordinate> +... + <texture> + 〜テクスチャ座標〜 + </texture> + <image name="***.bmp"> + 〜テクスチャ画像データ〜 + ... +</pre></font> +<p>以下の手順でポリゴンを生成する</p> +<font size="4"><ul> +<li>ゲームプログラムでcreateFromXMLfileを呼び出す</li> +<li>Blenderから生成したXMLファイルを解析</li> +<li>解析したXMLデータからポリゴンを生成</li> +</ul></font> +</div> + + +<div class="slide" id="id1"> +<h1>SG.xml を Cerium で Load</h1> +<p>ゲームの初期化部分でcrateFromXMLfileを呼ぶ</p> +<font size="4"><pre> +void +game_init(TaskManager *manager, int bg) +{ + sgroot->createFromXMLfile(manager, "xml_file/SG.xml"); +... +</pre></font> +</div> + <div class="slide" id="id1"> <h1>SG.xml を Cerium で Load</h1> -<p> +<p>createFromXMLfileでXMLノードを解析し、ポリゴンを生成する</p> +<font size="4"><pre> +void +SceneGraphRoot::createFromXMLfile(TaskManager *manager, const char *xmlfile) +{ + xmlDocPtr doc; + xmlNodePtr cur; + SceneGraphPtr tmp; + + /* パース DOM生成 */ + doc = xmlParseFile(xmlfile); + cur = xmlDocGetRootElement(doc); + + /* XMLのノードを一つずつ解析 */ + for (cur=cur->children; cur; cur=cur->next) { + /* 扱うのはsurfaceオンリー */ + if (xmlStrcmp(cur->name,(xmlChar*)"surface") != 0) { + continue; + } + + /* ポリゴン(SceneGraph)生成 */ + tmp = new SceneGraph(manager, cur); +... +</pre></font> +</div> -</p> + +<div class="slide" id="id1"> +<h1>SG.xml を Cerium で Load</h1> +<p>ポリゴン生成時(SceneGraphのコンストラクタ)に以下のメソッドが呼ばれ、XMLのタグによって何のデータなのか判断し、読み出しや格納を行う。</p> +<font size="4"><pre> +void +SceneGraph::get_data(TaskManager *manager, xmlNodePtr cur) +{ + for(;cur;cur=cur->next) + { + if(!xmlStrcmp(cur->name,(xmlChar*)"coordinate")) + { + char *cont = (char *)xmlNodeGetContent(cur); + pickup_coordinate(cont); + } + ... + else if(!xmlStrcmp(cur->name,(xmlChar*)"texture")) + { + char *cont = (char *)xmlNodeGetContent(cur); + pickup_texture(cont); + } +... +</pre></font> </div> + <div class="slide" id="id1"> <h1>例題</h1> <p>