Mercurial > hg > Papers > 2009 > koba-thesis
view presentation/thesis_pre.html @ 31:8699c6f75b9b default tip
remove pdf file.
author | e055722 |
---|---|
date | Fri, 27 Feb 2009 16:56:06 +0900 |
parents | 806126a7596c |
children |
line wrap: on
line source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>thesis_presentation</title> <!-- metadata --> <meta name="generator" content="S5" /> <meta name="version" content="S5 1.1" /> <meta name="presdate" content="20050728" /> <meta name="author" content="Eric A. Meyer" /> <meta name="company" content="Complex Spiral Consulting" /> <!-- configuration parameters --> <meta name="defaultView" content="slideshow" /> <meta name="controlVis" content="hidden" /> <!-- style sheet links --> <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" /> <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" /> <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" /> <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" /> <!-- S5 JS --> <script src="ui/default/slides.js" type="text/javascript"></script> </head> <body> <div class="layout"> <div id="controls"><!-- DO NOT EDIT --></div> <div id="currentSlide"><!-- DO NOT EDIT --></div> <div id="header"></div> <div id="footer"> <h1>[date:09/02/26]</h1> <h2>SceneGraphを用いたゲームプログラムの為のテスト作成手法</h2> </div> </div> <div class="presentation"> <div class="slide"> <h1>SceneGraphを用いた<br>ゲームプログラムの為のテスト作成手法</h1> <h3>発表者:小林 佑亮</h3> <h4>所属:琉球大学 工学部 情報工学科 並列信頼研</h4> <h4>指導教員:河野 真治</h4> </div> <div class="slide"> <h1>研究背景・目的</h1> 研究背景 <ul> <li>PlayStation3上での並列的なゲームプログラムの作成</li> <li>当研究室で開発したCeriumレンダリングエンジンを使用</li> <li>ゲーム「超弾帝(スーパーダンディ)」の移植の際、不具合が発生</li> <li>ゲーム内に約100種類に及ぶオブジェクトが存在</li> </ul> 研究目的 <ul> <li>SceneGraph単位でオブジェクトごとにテスト</li> <li>今後のゲームの移植や改良、作成のデバッグで活かしたい</li> </ul> </div> <div class="slide"> <h1>PlayStation3のアーキテクチャ</h1> <font size=5> <ul> <li>CellにはPPEが1基、SPEが8基</li> <li>SPE に256KBのメモリ</li> <li>PS3Linuxでは6個の SPE を制御</li> </ul> </font> <br> <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> <ul> <li>TaskManager</li> <li>SceneGraph</li> <li>RenderingEngine</li> </ul> </div> <div class="slide"> <h1>TaskManager</h1> <font size="5"> <ul> <li>Taskに分割されたプログラムを管理するライブラリ</li> <li>プログラムをメモリ上にマッピング、SPE上ではDMA転送によりロード</li> <li>SPEは256KBという小さなデータ量しか保持できない</li> <li>必要な時に必要な実行プログラムだけをSPE上にロード</li> </ul> </font> <center> <img src="image/TaskManager.jpg" width="25%" height="40%" alt="TaskManager"> </center> </div> <div class="slide"> <h1>SceneGraph</h1> <font size="5"> <ul> <li>ゲームの中の場面を構成するオブジェクトやその振る舞い、ゲームのルールの集合</li> <li>親子関係を持つTreeで構成</li> </ul> </font> <br> <center> <img src="image/SceneGraph.jpg" width="" height=""> </center> </div> <div class="slide"> <h1>SceneGraphの生成</h1> <font size="5"> <ul> <li>Blenderでオブジェクトモデルを作成</li> <li>作成したオブジェクトモデルをpythonスクリプトでxmlファイルに変換</li> <li>xmlファイルからSceneGraphを生成</li> <li>各ノードにmoveとcollision</li> </ul> <br> <center> <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> <font size=5> <font color=red size=4> boss1_move_right(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> <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> <font color=red><li>ボス1が右や左に移動</li></font> <font color=blue><li>引数のmoveとcollisionに状態変化</li></font> </ul> </font> </div> <div class="slide"> <h1>CppUnitによるテスト手法</h1> <font size="5"> <ul> <li>C++の単体テストを自動化するflame workである</li> <li>テストケースを増やす事が容易</li> <li>テストケース群は一括で実行し、結果の表示も一括で行える</li> </ul> <table> <tr> <td><img src="image/TestState.jpg" width=" " height="85%"></td> <td> <ul> <li>CPPUNIT_ASSERT( )<br> 引数が真なら成功、偽なら失敗</li> <li>CPPUNIT_ASSERT_EQUAL( , )<br> 第1引数と第2引数が同じなら成功、違えば失敗</li> <li>CPPUNIT_FAIL( )<br> 必ず失敗する</li> </ul> </font> </td> </table> </div> <div class="slide"> <h1>CppUnitによるゲームプログラムのテスト</h1> <font size="5"> <ul> <li>getSGPによりSceneGraphのrootのアドレスを取得</li> <li>rootアドレスから本体オブジェクトの各パラメータを参照</li> <li>rootアドレスを走査してパーツオブジェクトの各パラメータを参照</li> </ul> </font> <table> <tr> <td><img src="image/test_part.jpg" width=" " height=" "></td> <td> <font size="5"> <pre> void sgTest::rootTest() { test_init(); sg_root->print_member(); CPPUNIT_ASSERT_EQUAL((float)width/2, sg_root->xyz[0]); CPPUNIT_ASSERT_EQUAL(0.0f, sg_root->xyz[1]); CPPUNIT_ASSERT_EQUAL(-100.0f, sg_root->xyz[2]); } void sgTest::childTest() { while (sg_root) { if(sg_root->children != NULL) { sg_root->children->print_member(); ... sg_root = sg_root->children; } else if(sg_root->brother != NULL) { sg_root->brother->print_member(); CPPUNIT_ASSERT_EQUAL(0.0f, sg_root->brother->xyz[0]); ... sg_root = sg_root->brother; ... </pre> </td> </table> </font> </div> <div class="slide"> <h1>評価・今後の課題</h1> <font size=6> <ul> <li>全てのオブジェクトの座標の初期位置が正しい事を確認</li> <li>move,collision中の各オブジェクトの座標は確認出来ない</li> <li>一括実行のため値が変化する値を追う事が出来ない</li> <li>今後各moveとcollisionを抜き出してテストする手法を実装する</li> <li>2つの手法によりゲームのデバッグを行う</li> </ul> </font> </div> <div class="slide"> <h1>ご清聴ありがとうございました。</h1> </div> </div> </body> </html>