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>
+&lt;?xml version="1.0"?&gt;
+&lt;OBJECT-3D&gt;
+        &lt;surface name="Cube" size="36" prim="Triangle" parent="NULL"&gt;
+                &lt;coordinate&gt;
+		  〜頂点座標〜
+                &lt;/coordinate&gt;
+...
+		&lt;texture&gt;
+		  〜テクスチャ座標〜
+		&lt;/texture&gt;
+		&lt;image name="***.bmp"&gt;
+		  〜テクスチャ画像データ〜
+                ...
+</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>