view A-5-4-055722/A-5-4-055722.tex @ 1:c73a25e17287

mini thesis set
author e055722
date Tue, 24 Feb 2009 19:44:56 +0900
parents
children 4cd4b8fcde18
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvips]{graphicx}

\usepackage{fancyhdr}
\usepackage{picins}
\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.eps}}琉球大学主催 工学部情報工学科 卒業研究発表会}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\begin{document}
\title{ SceneGraphを用いたゲームプログラムの為のテスト作成手法}
\author{055722G 小林 佑亮 {}{} 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy}

\section{研究背景・目的}
当研究室では学生実験において、PlayStation3を用いた並列的なゲームプログラムの作成を行っている。PlayStation3にはCellと呼ばれるCPUが搭載されており、作成したプログラムはCellに最適化させる必要がある。そこで使用されるのが当研究室で開発したCeriumレンダリングエンジンである。
	Ceriumには、Taskの管理やデータの転送などを行うTaskManager、オブジェクトのレンダリングを行うRenderingEngine、ゲームの場面(Scene)やルールをTree構造に格納したSceneGraphがある。Ceriumを用いたゲームプログラムの例題としてPlayStation2で動作していたゲーム作品の移植を行った。その際、オブジェクトの描画が正常に行われない、衝突判定の位置ずれが生じる等の不具合が発生した。
本研究ではCeriumの中でもSceneGraphに着目し、SceneGraph単位での単体テストを行うことで、、オブジェクトごとの振る舞いや描画をチェックする。これにより、先に述べたゲームの不具合を解消し、正常な動作が行われる事を目指す。

\section{SceneGraphによるゲームフレームワーク}
	\subsection{SceneGraphの特徴}
	ゲームの中の一つの場面(Scene)を構成するオブジェクトやその振る舞い、ゲームのルールの集合をSceneGraphとする。SceneGraphのノードは親子関係を持つTreeで構成される。
(図\ref{fig:sglist})

\begin{figure}[htbp]
\includegraphics[width=8.5cm]{pic/SceneGraph.eps}
\caption{SceneGraph}
\label{fig:sglist}
\end{figure}

	親子関係とは、親オブジェクトの回転や並行移動等の行列計算による頂点座標の変更が子オブジェクトにも反映する関係の事である。これは子に対してスタックに積まれた親の変更行列を掛ける事で実現できる。

	\subsection{SceneGraphを用いたゲームプログラム}
	ゲーム内で使用するオブジェクトはBlenderというオープンソースの3次元コンピュータグラフィックスソフトウェアで作成する。作成したオブジェクトモデルはスクリプトによりxmlファイルに変換され、それを元にSceneGraphが生成される。
	生成したSceneGraphはset\_move\_collisionという関数によってmoveやcollisionが実装される。
	SceneGraphを用いたゲームプログラムでは各オブジェクトはTree構造で繋がっている必要があり、各々のSceneGraphは
	addChildで子供となるSceneGraphの登録、addBrotherで同じ親を持つSceneGraphの登録を行い、親子関係を持つ。

	\subsubsection{move}
	オブジェクトの動作や状態遷移を記述する。

	\subsubsection{collision}
	オブジェクトの衝突判定を記述する。

\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}
	
	\subsection{ゲームプログラムのテスト}
	各オブジェクトのSceneGraphはその親や子、兄弟に対するアドレスを保持している。従って、あるオブジェクトのテストを行いたい場合は、そのオブジェクトのSceneGraphが含まれているTreeのRootを辿れば、オブジェクトのSceneGraphにある各パラメータを参照する事が出来る。そこで、Rootのアドレスを取得するgetSGP()という関数を作成した。getSGP()関数によって取得してきたRootのアドレスを使って、各オブジェクトが定義された通りにx,y,zの値を保持しているかテストを行った。(図\ref{fig:sgtest})
	
\begin{figure}[htbp]
\includegraphics[width=8.5cm]{pic/test_part.eps}
\caption{SceneGraphTest}
\label{fig:sgtest}
\end{figure}

\thispagestyle{fancy}
\begin{thebibliography}{9}

\bibitem{1}宮國 渡, 河野 真治, 神里 晃, 杉山 千秋: Cell 用の Fine-grain Task Manager の実装, 第108回システムソフトウェアとオペレーティング・システム研究会(2008)

\bibitem{2}高橋 寿一:知識ゼロから学ぶソフトウェアテスト, 翔泳社 (2005)

\bibitem{3}伊藤 喜一:CppUnit入門, (http://www.ogis-ri.co.jp/otc/hiroba/technical/CppUnit/)

\end{thebibliography}
\end{document}