12
|
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
3
|
|
4 <html xmlns="http://www.w3.org/1999/xhtml">
|
|
5
|
|
6 <head>
|
13
|
7 <title>thesis_presentation</title>
|
12
|
8 <!-- metadata -->
|
|
9 <meta name="generator" content="S5" />
|
|
10 <meta name="version" content="S5 1.1" />
|
|
11 <meta name="presdate" content="20050728" />
|
|
12 <meta name="author" content="Eric A. Meyer" />
|
|
13 <meta name="company" content="Complex Spiral Consulting" />
|
|
14 <!-- configuration parameters -->
|
|
15 <meta name="defaultView" content="slideshow" />
|
|
16 <meta name="controlVis" content="hidden" />
|
|
17 <!-- style sheet links -->
|
|
18 <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
|
|
19 <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
|
|
20 <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
|
|
21 <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
|
|
22 <!-- S5 JS -->
|
|
23 <script src="ui/default/slides.js" type="text/javascript"></script>
|
|
24 </head>
|
|
25 <body>
|
|
26
|
|
27 <div class="layout">
|
|
28 <div id="controls"><!-- DO NOT EDIT --></div>
|
|
29 <div id="currentSlide"><!-- DO NOT EDIT --></div>
|
|
30 <div id="header"></div>
|
|
31 <div id="footer">
|
|
32 <h1>[date:09/02/26]</h1>
|
|
33 <h2>SceneGraphを用いたゲームプログラムの為のテスト作成手法</h2>
|
|
34 </div>
|
|
35
|
|
36 </div>
|
|
37
|
|
38
|
|
39 <div class="presentation">
|
|
40
|
|
41 <div class="slide">
|
20
|
42 <h1>SceneGraphを用いた<br>ゲームプログラムの為のテスト作成手法</h1>
|
12
|
43 <h3>発表者:小林 佑亮</h3>
|
23
|
44 <h4>所属:琉球大学 工学部 情報工学科 並列信頼研</h4>
|
12
|
45 <h4>指導教員:河野 真治</h4>
|
|
46 </div>
|
|
47
|
|
48
|
|
49 <div class="slide">
|
|
50 <h1>研究背景・目的</h1>
|
23
|
51 研究背景
|
12
|
52 <ul>
|
23
|
53 <li>PlayStation3上での並列的なゲームプログラムの作成</li>
|
|
54 <li>当研究室で開発したCeriumレンダリングエンジンを使用</li>
|
|
55 <li>ゲーム「超弾帝(スーパーダンディ)」の移植の際、不具合が発生</li>
|
|
56 <li>ゲーム内に約100種類に及ぶオブジェクトが存在</li>
|
13
|
57 </ul>
|
23
|
58 研究目的
|
13
|
59 <ul>
|
23
|
60 <li>SceneGraph単位でオブジェクトごとにテスト</li>
|
|
61 <li>今後のゲームの移植や改良、作成のデバッグで活かしたい</li>
|
12
|
62 </ul>
|
|
63 </div>
|
|
64
|
|
65 <div class="slide">
|
|
66 <h1>PlayStation3のアーキテクチャ</h1>
|
|
67 <font size=5>
|
|
68 <ul>
|
23
|
69 <li>CellにはPPEが1基、SPEが8基</li>
|
|
70 <li>SPE に256KBのメモリ</li>
|
|
71 <li>PS3Linuxでは6個の SPE を制御</li>
|
12
|
72 </ul>
|
|
73 </font>
|
|
74 <br>
|
23
|
75 <center>
|
|
76 <img src="image/Cell-main.jpg" alt="Cell-main" width="450" height="300">
|
|
77 <img src="image/SPE.jpg" alt="SPE" width="300" height="280">
|
|
78 </center>
|
12
|
79 </div>
|
|
80
|
|
81 <div class="slide">
|
|
82 <h1>Cerium Rendering Engine</h1>
|
|
83 <ul>
|
23
|
84 <li>TaskManager</li>
|
12
|
85 <li>SceneGraph</li>
|
|
86 <li>RenderingEngine</li>
|
|
87 </ul>
|
|
88 </div>
|
|
89
|
|
90 <div class="slide">
|
|
91 <h1>TaskManager</h1>
|
24
|
92 <font size="5">
|
12
|
93 <ul>
|
24
|
94 <li>Taskに分割されたプログラムを管理するライブラリ</li>
|
|
95 <li>プログラムをメモリ上にマッピング、SPE上ではDMA転送によりロード</li>
|
|
96 <li>SPEは256KBという小さなデータ量しか保持できない</li>
|
|
97 <li>必要な時に必要な実行プログラムだけをSPE上にロード</li>
|
12
|
98 </ul>
|
|
99 </font>
|
|
100 <center>
|
|
101 <img src="image/TaskManager.jpg" width="25%" height="40%" alt="TaskManager">
|
|
102 </center>
|
|
103 </div>
|
|
104
|
|
105 <div class="slide">
|
|
106 <h1>SceneGraph</h1>
|
|
107 <font size="5">
|
|
108 <ul>
|
23
|
109 <li>ゲームの中の場面を構成するオブジェクトやその振る舞い、ゲームのルールの集合</li>
|
|
110 <li>親子関係を持つTreeで構成</li>
|
|
111 </ul>
|
12
|
112 </font>
|
23
|
113 <br>
|
|
114 <center>
|
|
115 <img src="image/SceneGraph.jpg" width="" height="">
|
|
116 </center>
|
12
|
117 </div>
|
|
118
|
14
|
119 <div class="slide">
|
|
120 <h1>SceneGraphの生成</h1>
|
|
121 <font size="5">
|
|
122 <ul>
|
|
123 <li>Blenderでオブジェクトモデルを作成</li>
|
|
124 <li>作成したオブジェクトモデルをpythonスクリプトでxmlファイルに変換</li>
|
24
|
125 <li>xmlファイルからSceneGraphを生成</li>
|
23
|
126 <li>各ノードにmoveとcollision</li>
|
14
|
127 </ul>
|
|
128 <br>
|
|
129 <center>
|
23
|
130 <img src="image/SGcreate.jpg" width="80%" height="40%">
|
14
|
131 </center>
|
15
|
132 </font>
|
|
133 </div>
|
|
134
|
|
135 <div class="slide">
|
23
|
136 <h1>超弾帝(スーパーダンディ)</h1>
|
|
137 <ul>
|
|
138 <li>2Dシューティングゲーム</li>
|
24
|
139 <li>move関数で移動</li>
|
|
140 <li>collision関数で衝突判定</li>
|
|
141 <li>set_move_collision関数で行動変化</li>
|
23
|
142 </ul>
|
|
143 </div>
|
|
144
|
|
145 <div class="slide">
|
|
146 <h1>超弾帝(スーパーダンディ)</h1>
|
|
147 <center>
|
|
148 <img src="image/Dandy.jpg" width="100%" height="75%">
|
|
149 </center>
|
|
150 </div>
|
|
151
|
|
152 <div class="slide">
|
15
|
153 <h1>move,collision</h1>
|
23
|
154 <font size=5>
|
|
155 <font color=red size=4>
|
15
|
156 boss1_move_right(SceneGraphPtr node, int screen_w, int screen_h) {
|
23
|
157 </font>
|
|
158 <pre>
|
15
|
159 node->xyz[0] -= node->stack_xyz[0];
|
|
160 if(node->xyz[0] < 280) {
|
23
|
161 <font color=blue size=4>
|
15
|
162 node->set_move_collision(boss1_move_right, boss1_collision);
|
23
|
163 </font>
|
15
|
164 }
|
|
165 }
|
|
166 </pre>
|
23
|
167 <font size=5>
|
|
168 <font color=red size=4>
|
|
169 boss1_move_left(SceneGraphPtr node, int screen_w, int screen_h) {
|
15
|
170 </font>
|
23
|
171 <pre>
|
|
172 node->xyz[0] += node->stack_xyz[0];
|
|
173 if(node->xyz[0] > screen_w-280) {
|
|
174 <font color=blue size=4>
|
|
175 node->set_move_collision(boss1_move_left, boss1_collision);
|
|
176 </font>
|
|
177 }
|
|
178 }
|
|
179 </pre>
|
15
|
180 <ul>
|
23
|
181 <font color=red><li>ボス1が右や左に移動</li></font>
|
24
|
182 <font color=blue><li>引数のmoveとcollisionに状態変化</li></font>
|
15
|
183 </ul>
|
23
|
184 </font>
|
15
|
185 </div>
|
|
186
|
|
187 <div class="slide">
|
|
188 <h1>CppUnitによるテスト手法</h1>
|
|
189 <font size="5">
|
|
190 <ul>
|
|
191 <li>C++の単体テストを自動化するflame workである</li>
|
|
192 <li>テストケースを増やす事が容易</li>
|
24
|
193 <li>テストケース群は一括で実行し、結果の表示も一括で行える</li>
|
15
|
194 </ul>
|
|
195
|
|
196 <table>
|
|
197 <tr>
|
23
|
198 <td><img src="image/TestState.jpg" width=" " height="85%"></td>
|
15
|
199 <td>
|
|
200 <ul>
|
23
|
201 <li>CPPUNIT_ASSERT( )<br>
|
|
202 引数が真なら成功、偽なら失敗</li>
|
|
203 <li>CPPUNIT_ASSERT_EQUAL( , )<br>
|
|
204 第1引数と第2引数が同じなら成功、違えば失敗</li>
|
|
205 <li>CPPUNIT_FAIL( )<br>
|
|
206 必ず失敗する</li>
|
15
|
207 </ul>
|
23
|
208 </font>
|
15
|
209 </td>
|
|
210 </table>
|
|
211 </div>
|
|
212
|
|
213 <div class="slide">
|
|
214 <h1>CppUnitによるゲームプログラムのテスト</h1>
|
|
215 <font size="5">
|
|
216 <ul>
|
|
217 <li>getSGPによりSceneGraphのrootのアドレスを取得</li>
|
|
218 <li>rootアドレスから本体オブジェクトの各パラメータを参照</li>
|
|
219 <li>rootアドレスを走査してパーツオブジェクトの各パラメータを参照</li>
|
|
220 </ul>
|
23
|
221 </font>
|
15
|
222 <table>
|
|
223 <tr>
|
|
224 <td><img src="image/test_part.jpg" width=" " height=" "></td>
|
|
225 <td>
|
23
|
226 <font size="5">
|
15
|
227 <pre>
|
|
228 void
|
|
229 sgTest::rootTest() {
|
|
230 test_init();
|
|
231
|
|
232 sg_root->print_member();
|
|
233 CPPUNIT_ASSERT_EQUAL((float)width/2, sg_root->xyz[0]);
|
|
234 CPPUNIT_ASSERT_EQUAL(0.0f, sg_root->xyz[1]);
|
|
235 CPPUNIT_ASSERT_EQUAL(-100.0f, sg_root->xyz[2]);
|
|
236 }
|
|
237
|
|
238 void
|
|
239 sgTest::childTest() {
|
|
240 while (sg_root) {
|
|
241 if(sg_root->children != NULL) {
|
|
242 sg_root->children->print_member();
|
|
243 ...
|
|
244 sg_root = sg_root->children;
|
|
245 } else if(sg_root->brother != NULL) {
|
|
246 sg_root->brother->print_member();
|
|
247 CPPUNIT_ASSERT_EQUAL(0.0f, sg_root->brother->xyz[0]);
|
|
248 ...
|
|
249 sg_root = sg_root->brother;
|
|
250 ...
|
|
251 </pre>
|
|
252 </td>
|
|
253 </table>
|
|
254 </font>
|
|
255 </div>
|
|
256
|
|
257 <div class="slide">
|
|
258 <h1>評価・今後の課題</h1>
|
23
|
259 <font size=6>
|
15
|
260 <ul>
|
|
261 <li>全てのオブジェクトの座標の初期位置が正しい事を確認</li>
|
|
262 <li>move,collision中の各オブジェクトの座標は確認出来ない</li>
|
24
|
263 <li>一括実行のため値が変化する値を追う事が出来ない</li>
|
15
|
264 <li>今後各moveとcollisionを抜き出してテストする手法を実装する</li>
|
24
|
265 <li>2つの手法によりゲームのデバッグを行う</li>
|
15
|
266 </ul>
|
23
|
267 </font>
|
15
|
268 </div>
|
|
269
|
|
270 <div class="slide">
|
23
|
271 <h1>ご清聴ありがとうございました。</h1>
|
14
|
272 </div>
|
12
|
273
|
|
274 </div>
|
|
275
|
|
276 </body>
|
|
277 </html>
|