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>