# HG changeset patch # User e055722 # Date 1235517181 -32400 # Node ID 4cd4b8fcde189d5262e503494ea69637817f50f2 # Parent fb402ebdef5cc146d58c60d1a2716aef27947ef6 change figures and tex file. diff -r fb402ebdef5c -r 4cd4b8fcde18 A-5-4-055722/A-5-4-055722.tex --- a/A-5-4-055722/A-5-4-055722.tex Wed Feb 25 02:04:20 2009 +0900 +++ b/A-5-4-055722/A-5-4-055722.tex Wed Feb 25 08:13:01 2009 +0900 @@ -27,7 +27,7 @@ \section{研究背景・目的} 当研究室では学生実験において、PlayStation3を用いた並列的なゲームプログラムの作成を行っている。PlayStation3にはCellと呼ばれるCPUが搭載されており、作成したプログラムはCellに最適化させる必要がある。そこで使用されるのが当研究室で開発したCeriumレンダリングエンジンである。 - Ceriumには、Taskの管理やデータの転送などを行うTaskManager、オブジェクトのレンダリングを行うRenderingEngine、ゲームの場面(Scene)やルールをTree構造に格納したSceneGraphがある。Ceriumを用いたゲームプログラムの例題としてPlayStation2で動作していたゲーム作品の移植を行った。その際、オブジェクトの描画が正常に行われない、衝突判定の位置ずれが生じる等の不具合が発生した。 + Ceriumには、Taskの管理やデータの転送などを行うTaskManager、オブジェクトのレンダリングを行うRenderingEngine、ゲームの場面(Scene)やルールをTree構造に格納したSceneGraphがある。Ceriumを用いたゲームプログラムの例題としてPlayStation2で動作していたゲーム作品の移植を行った。その際、オブジェクトの描画が正常に行われない、衝突判定の位置ずれが生じる等の不具合が発生した。\\ 本研究ではCeriumの中でもSceneGraphに着目し、SceneGraph単位での単体テストを行うことで、、オブジェクトごとの振る舞いや描画をチェックする。これにより、先に述べたゲームの不具合を解消し、正常な動作が行われる事を目指す。 \section{SceneGraphによるゲームフレームワーク} @@ -44,33 +44,36 @@ 親子関係とは、親オブジェクトの回転や並行移動等の行列計算による頂点座標の変更が子オブジェクトにも反映する関係の事である。これは子に対してスタックに積まれた親の変更行列を掛ける事で実現できる。 \subsection{SceneGraphを用いたゲームプログラム} - ゲーム内で使用するオブジェクトはBlenderというオープンソースの3次元コンピュータグラフィックスソフトウェアで作成する。作成したオブジェクトモデルはスクリプトによりxmlファイルに変換され、それを元にSceneGraphが生成される。 + ゲーム内で使用するオブジェクトはBlenderというオープンソースの3次元コンピュータグラフィックスソフトウェアで作成する。作成したオブジェクトモデルはpythonスクリプトによりxmlファイルに変換され、それを元にSceneGraphが生成される。 生成したSceneGraphはset\_move\_collisionという関数によってmoveやcollisionが実装される。 - SceneGraphを用いたゲームプログラムでは各オブジェクトはTree構造で繋がっている必要があり、各々のSceneGraphは - addChildで子供となるSceneGraphの登録、addBrotherで同じ親を持つSceneGraphの登録を行い、親子関係を持つ。 \subsubsection{move} - オブジェクトの動作や状態遷移を記述する。 + オブジェクトの動作や状態遷移を記述する。各オブジェクトは複数のmove関数を持っており、set\_move\_collision関数によって状態遷移する。例を以下に示す。 + +\begin{itemize} +\item move\_left…左に移動するだけの関数 +\item move\_right…右に移動するだけの関数 +\end{itemize} + +オブジェクトは最初move\_leftによって左に移動する。しかし、そのままだといずれ画面外に消えてしまう。そこでmove\_left関数中で条件分岐を立て、画面外ぎりぎりの座標になったらset\_move\_collisionでmove\_rightに切り替え、 +右移動に切り替える。しかし、このままでもいずれ画面外に消えてしまう為、再びset\_move\_collisionに切り替える。 +これを繰り返す事により、オブジェクトが常に画面内に描画されている状態を保つ事が出来る。 \subsubsection{collision} - オブジェクトの衝突判定を記述する。 + オブジェクトの衝突判定を記述する。オブジェクト同士が触れた時に行う動作を決定する。例えばシューティングゲームなら弾丸が敵や自機に当たった時にダメージを受ける、ゲームオーバーになる、などの判定を行う。こちらも条件分岐により、set\_move\_collisionで状態遷移が可能である。 + +\subsubsection*{} + SceneGraphを用いたゲームプログラムでは各オブジェクトはTree構造で繋がっている必要があり、各々のSceneGraphは addChildで子供となるSceneGraphの登録、addBrotherで同じ親を持つSceneGraphの登録を行い、親子関係を持つ。(図\ref{fig:sgbuild}) + +\begin{figure}[htbp] +\includegraphics[width=8.5cm,height= 9.0cm]{pic/SGbuild.eps} +\caption{SGTree} +\label{fig:sgbuild} +\end{figure} \section{CppUnitを用いたSceneGraphのテスト} \subsection{CppUnitとは} - CppUnitはxUnitの一つであり、C++の単体テストを自動化するframe workである。 CppUnitの特徴は、テストケースを増やす事が容易であり、1つの事象に対して様々なテストケースを同時にテストする事が出来る。また、羅列したテストケースは一括で実行、結果の表示ができる。(図\ref{fig:cpptest})\\ - CppUnitを用いたテストの流れを以下に示す。 - -\begin{itemize} -\item テスト対象となるオブジェクトやクラス、関数を生成し、初期化する -\item 様々なテストケースを作成し、実装する -\item テストランナーにテストケースを渡し、実行する -\end{itemize} - -\begin{figure}[htbp] -\includegraphics[width=8.5cm]{pic/test_state.eps} -\caption{CppUnitTest} -\label{fig:cpptest} -\end{figure} + CppUnitはxUnitの一つであり、C++の単体テストを自動化するframe workである。 CppUnitの特徴は、テストケースを増やす事が容易であり、1つの事象に対して様々なテストケースを同時にテストする事が出来る。また、羅列したテストケースは一括で実行、結果の表示ができる。 \subsection{ゲームプログラムのテスト} 各オブジェクトのSceneGraphはその親や子、兄弟に対するアドレスを保持している。従って、あるオブジェクトのテストを行いたい場合は、そのオブジェクトのSceneGraphが含まれているTreeのRootを辿れば、オブジェクトのSceneGraphにある各パラメータを参照する事が出来る。そこで、Rootのアドレスを取得するgetSGP()という関数を作成した。getSGP()関数によって取得してきたRootのアドレスを使って、各オブジェクトが定義された通りにx,y,zの値を保持しているかテストを行った。(図\ref{fig:sgtest}) @@ -81,6 +84,10 @@ \label{fig:sgtest} \end{figure} +\section{評価} + + + \thispagestyle{fancy} \begin{thebibliography}{9} diff -r fb402ebdef5c -r 4cd4b8fcde18 A-5-4-055722/graffle/SGbuild.graffle Binary file A-5-4-055722/graffle/SGbuild.graffle has changed diff -r fb402ebdef5c -r 4cd4b8fcde18 A-5-4-055722/graffle/test_part.graffle Binary file A-5-4-055722/graffle/test_part.graffle has changed diff -r fb402ebdef5c -r 4cd4b8fcde18 A-5-4-055722/pic/SGbuild.eps Binary file A-5-4-055722/pic/SGbuild.eps has changed diff -r fb402ebdef5c -r 4cd4b8fcde18 A-5-4-055722/pic/test_part.eps Binary file A-5-4-055722/pic/test_part.eps has changed