changeset 23:39dcb6906101

add many images
author e055722
date Thu, 26 Feb 2009 14:54:25 +0900
parents ba9f928959ce
children 806126a7596c
files presentation/image/SGcreate.jpg presentation/image/SceneGraph.graffle presentation/image/SceneGraph.jpg presentation/thesis_pre.html
diffstat 4 files changed, 82 insertions(+), 87 deletions(-) [+]
line wrap: on
line diff
Binary file presentation/image/SGcreate.jpg has changed
Binary file presentation/image/SceneGraph.graffle has changed
Binary file presentation/image/SceneGraph.jpg has changed
--- a/presentation/thesis_pre.html	Thu Feb 26 10:54:43 2009 +0900
+++ b/presentation/thesis_pre.html	Thu Feb 26 14:54:25 2009 +0900
@@ -41,66 +41,59 @@
 <div class="slide">
 <h1>SceneGraphを用いた<br>ゲームプログラムの為のテスト作成手法</h1>
 <h3>発表者:小林 佑亮</h3>
-<h4>所属:琉球大学 工学部 情報工学科</h4>
+<h4>所属:琉球大学 工学部 情報工学科 並列信頼研</h4>
 <h4>指導教員:河野 真治</h4>
 </div>
 
 
 <div class="slide">
 <h1>研究背景・目的</h1>
-<font size=5>
-研究背景<br>
+研究背景
 <ul>
-<li>当研究室では学生実験において、PlayStation3を用いた並列的なゲームプログラムの作成を行っている</li>
-<li>そこで使用されるのが当研究室で開発したCeriumレンダリングエンジンである</li>
-<li>PlayStation2で動作していたゲーム「超弾帝(スーパーダンディ)」の移植の際、オブジェクトの描画、衝突判定などで不具合が発生した</li>
-<li>超弾帝には約100種類に及ぶオブジェクトが存在し、今後も同様な不具合を修正していく必要があると考えられる</li>
+<li>PlayStation3上での並列的なゲームプログラムの作成</li>
+<li>当研究室で開発したCeriumレンダリングエンジンを使用</li>
+<li>ゲーム「超弾帝(スーパーダンディ)」の移植の際、不具合が発生</li>
+<li>ゲーム内に約100種類に及ぶオブジェクトが存在</li>
 </ul>
-<br>
-研究目的<br>
+研究目的
 <ul>
-<li>本研究ではゲームプログラムをSceneGraph単位でテストすることでオブジェクトごとの振る舞いや描画をチェックする</li>
-<li>ゲームのデバッグを容易にし、今後のゲームの移植や改良、作成を円滑にする</li>
+<li>SceneGraph単位でオブジェクトごとにテスト</li>
+<li>今後のゲームの移植や改良、作成のデバッグで活かしたい</li>
 </ul>
-</font>
 </div>
 
 <div class="slide">
 <h1>PlayStation3のアーキテクチャ</h1>
 <font size=5>
 <ul>
-<li>Cellは1基のPPEと8基のSPEからなる非対称なマルチコアプロセッサであり、高速リングバスで構成されている</li>
-<li>SPE は、LS (Local Store) という256KBのメモリを持つ</li>
-<li>本研究で用いた PS3Linux では、6個の SPE を制御することができる</li>
+<li>CellにはPPEが1基、SPEが8基</li>
+<li>SPE に256KBのメモリ</li>
+<li>PS3Linuxでは6個の SPE を制御</li>
 </ul>
 </font>
 <br>
-<img src="image/Cell-main.jpg" alt="Cell-main" width="430" height="283">
-<img src="image/SPE.jpg" alt="SPE" width="233" height="221">
-</ul>
+<center>
+<img src="image/Cell-main.jpg" alt="Cell-main" width="450" height="300">
+<img src="image/SPE.jpg" alt="SPE" width="300" height="280">
+</center>
 </div>
 
 <div class="slide">
 <h1>Cerium Rendering Engine</h1>
-Ceriumは以下の3つから構成される。
 <ul>
-<li>TaskManager/li>
+<li>TaskManager</li>
 <li>SceneGraph</li>
 <li>RenderingEngine</li>
 </ul>
-<br>
-<img src="image/Cerium.jpg" width=" " height=" ">
 </div>
 
 <div class="slide">
 <h1>TaskManager</h1>
-
-<font size="5">
 <ul>
-<li>Taskと呼ばれる分割された各プログラムを管理するライブラリである</li>
-<li>Task同士の依存関係を考慮しながらメモリ上にマッピングし、SPE上ではそのプログラムを DMA転送によりロードする</li>
-<li>SPEは256KBという小さなデータ量しか持てず、 大量のプログラムを全てSPE上に置いておく事は出来ない可能性がある</li>
-<li>必要な時に必要な実行プログラムだけがSPE上にロードされている事が望ましい</li>
+<li>Taskに分割されたプログラムを管理</li>
+<li>メモリ上にマッピング、SPE上ではDMA転送によりロード</li>
+<li>SPEは256KBという小さなデータ量のみ保持</li>
+<li>必要な実行プログラムだけをSPE上にロード</li>
 </ul>
 </font>
 <br>
@@ -113,22 +106,14 @@
 <h1>SceneGraph</h1>
 <font size="5">
 <ul>
-<li>ゲームの中の一つの場面(Scene)を構成するオブジェクトやその振る舞い、ゲームのルールの集合をSceneGraphとする</li>
-<li>SceneGraphのノードは親子関係を持つTreeで構成される</li>
-<li>親子関係とは、親オブジェクトの回転や平行移動等の行列計算による頂点座標の変更が、子オブジェクトにも反映する関係の事である</li>
-<img src="image/SceneGraph.jpg" width="" height="" alt=" SceneGraph">
+<li>ゲームの中の場面を構成するオブジェクトやその振る舞い、ゲームのルールの集合</li>
+<li>親子関係を持つTreeで構成</li>
+</ul>
 </font>
-</div>
-
-<div class="slide">
-<h1>RenderingEngine</h1>
-<font size="5">
-<ul>
-<li>SceneGraphから実際に表示するポリゴンを抽出する</li>
-<li>ポリゴンからSpanを生成する</li>
-<li>SpanにRGBをマッピングし描画する</li>
-<img src="image/Cerium-main.png" width="50%" height="50%">
-</font>
+<br>
+<center>
+<img src="image/SceneGraph.jpg" width="" height="">
+</center>
 </div>
 
 <div class="slide">
@@ -137,45 +122,66 @@
 <ul>
 <li>Blenderでオブジェクトモデルを作成</li>
 <li>作成したオブジェクトモデルをpythonスクリプトでxmlファイルに変換</li>
-<li>xmlファイルからSceneGraphを生成する</li>
-<li>各ノードにはオブジェクトの動きを決めるmoveとオブジェクトの相互作用を決めるcollisionがある。</li>
+<li>xmlファイルからSceneGraphを生成s</li>
+<li>各ノードにmoveとcollision</li>
 </ul>
 <br>
-<br>
 <center>
-<img src="image/SGcreate.jpg" width="50%" height="30%">
+<img src="image/SGcreate.jpg" width="80%" height="40%">
 </center>
 </font>
 </div>
 
 <div class="slide">
+<h1>超弾帝(スーパーダンディ)</h1>
+<ul>
+<li>2Dシューティングゲーム</li>
+<li>moveで移動</li>
+<li>collisionで衝突判定</li>
+<li>set_move_collisionで行動変化</li>
+</ul>
+</div>
+
+<div class="slide">
+<h1>超弾帝(スーパーダンディ)</h1>
+<center>
+<img src="image/Dandy.jpg" width="100%" height="75%">
+</center>
+</div>
+
+<div class="slide">
 <h1>move,collision</h1>
-boss1_action.cpp<br>
-<font size="5">
-<pre>
-static void
+<font size=5>
+<font color=red size=4>
 boss1_move_right(SceneGraphPtr node, int screen_w, int screen_h) {
-  node->xyz[0] += node->stack_xyz[0];
-  if(node->xyz[0] > screen_w-280) {
-    node->set_move_collision(boss1_move_left, boss1_collision);
-  }
-}
-
-static void
-boss1_move_left(SceneGraphPtr node, int screen_w, int screen_h) {
+</font>
+<pre>
   node->xyz[0] -= node->stack_xyz[0];
   if(node->xyz[0] < 280) {
+    <font color=blue size=4>
      node->set_move_collision(boss1_move_right, boss1_collision);
+</font>
   }
 }
 </pre>
+<font size=5>
+<font color=red size=4>
+boss1_move_left(SceneGraphPtr node, int screen_w, int screen_h) {
 </font>
-<br>
+<pre>
+  node->xyz[0] += node->stack_xyz[0];
+  if(node->xyz[0] > screen_w-280) {
+  <font color=blue size=4>
+    node->set_move_collision(boss1_move_left, boss1_collision);
+</font>
+  }
+}
+</pre>
 <ul>
-<li>boss1_move_right,left…boss1が左右に移動する動きを記述</li>
-<li>boss1_collision…boss1の衝突判定を記述</li>
-<li>set_move_collision…新しいmoveとcollitsionを設定する</li>
+<font color=red><li>ボス1が右や左に移動</li></font>
+<font color=blue><li>引数のmoveとcollisionに変化</li></font>
 </ul>
+</font>
 </div>
 
 <div class="slide">
@@ -186,35 +192,22 @@
 <li>テストケースを増やす事が容易</li>
 <li>テストケース群は一括で実行し、結果の表示も行える</li>
 </ul>
-<br>
-<br>
-<center>
-<img src="image/test_state.jpg" width="40%" height="50%">
-</center>
-</font>
-</div>
 
-<div class="slide">
-<h1>テストを行うゲームプログラム</h1>
-<font size="5">
-<br>
 <table>
 <tr>
-<td><img src="image/boss1.png" width=" " height=" "></td>
+<td><img src="image/TestState.jpg" width=" " height="85%"></td>
 <td>
 <ul>
-<li>3つのSceneGraphを持つ</li>
-<li>本体の他に左右にパーツを1つずつ持つ。</li>
-<li>本体をTreeのrootとして左右のパーツがその子供となっている</li>
+<li>CPPUNIT_ASSERT( )<br>
+	引数が真なら成功、偽なら失敗</li>
+<li>CPPUNIT_ASSERT_EQUAL( , )<br>
+	第1引数と第2引数が同じなら成功、違えば失敗</li>
+<li>CPPUNIT_FAIL( )<br>
+	必ず失敗する</li>
 </ul>
+</font>
 </td>
 </table>
-<br>
-<ul>
-<li>各オブジェクトのSceneGraphはその親や子、兄弟に対するアドレスを保持している</li>
-<li>パーツオブジェクトのテストを行いたい場合、Rootである本体から辿れば、パーツオブジェクトの各パラメータを参照できる</li>
-</ul>
-</font>
 </div>
 
 <div class="slide">
@@ -225,11 +218,12 @@
 <li>rootアドレスから本体オブジェクトの各パラメータを参照</li>
 <li>rootアドレスを走査してパーツオブジェクトの各パラメータを参照</li>
 </ul>
-<br>
+</font>
 <table>
 <tr>
 <td><img src="image/test_part.jpg" width=" " height=" "></td>
 <td>
+<font size="5">
 <pre>
 void
 sgTest::rootTest() {
@@ -253,7 +247,6 @@
       CPPUNIT_ASSERT_EQUAL(0.0f, sg_root->brother->xyz[0]);
 ...
       sg_root = sg_root->brother;
-    } else {
 	...
 </pre>
 </td>
@@ -263,15 +256,17 @@
 
 <div class="slide">
 <h1>評価・今後の課題</h1>
+<font size=6>
 <ul>
 <li>全てのオブジェクトの座標の初期位置が正しい事を確認</li>
 <li>move,collision中の各オブジェクトの座標は確認出来ない</li>
 <li>今後各moveとcollisionを抜き出してテストする手法を実装する</li>
 </ul>
+</font>
 </div>
 
 <div class="slide">
-<h2>ご清聴ありがとうございました。</h2>
+<h1>ご清聴ありがとうございました。</h1>
 </div>
 
 </div>