[ゲーム装置の外観構成]
以下、本発明の実施形態の一例(第1の実施形態)に係るゲーム装置について説明する。図1は、ゲーム装置10の外観を示す平面図である。ゲーム装置10は携帯型のゲーム装置であり、折り畳み可能に構成されている。図1は、開いた状態(開状態)におけるゲーム装置10の正面図を示している。ゲーム装置10は、撮像部によって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりすることが可能である。また、ゲーム装置10は、交換可能なメモリカード内に記憶され、または、サーバや他のゲーム装置から受信したゲームプログラムを実行可能であり、仮想空間に設定された仮想カメラで撮像した画像などのコンピュータグラフィックス処理により生成された画像を画面に表示したりすることができる。
まず、図1を参照して、ゲーム装置10の外観構成について説明する。図1に示されるように、ゲーム装置10は、下側ハウジング11及び上側ハウジング21を有する。下側ハウジング11と上側ハウジング21とは、開閉可能(折り畳み可能)に接続されている。
(下側ハウジングの説明)
まず、下側ハウジング11の構成について説明する。図1に示すように、下側ハウジング11には、下側LCD(Liquid Crystal Display:液晶表示装置)12、タッチパネル13、各操作ボタン14A〜14I、アナログスティック15、LED16A〜16B、挿入口17、及び、マイクロフォン用孔18が設けられる。以下、これらの詳細について説明する。
図1に示すように、下側LCD12は下側ハウジング11に収納される。下側LCD12の画素数は、例えば、320dot×240dot(横×縦)であってもよい。下側LCD12は、後述する上側LCD22とは異なり、画像を(立体視可能ではなく)平面的に表示する表示装置である。なお、本実施形態では表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置など、他の任意の表示装置を利用してもよい。また、下側LCD12として、任意の解像度の表示装置を利用することができる。
図1に示されるように、ゲーム装置10は、入力装置として、タッチパネル13を備えている。タッチパネル13は、下側LCD12の画面上に装着されている。なお、本実施形態では、タッチパネル13は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。本実施形態では、タッチパネル13として、下側LCD12の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル13の解像度と下側LCD12の解像度が一致している必要はない。また、下側ハウジング11の上側面には挿入口17(図1に示す点線)が設けられている。挿入口17は、タッチパネル13に対する操作を行うために用いられるタッチペン28を収納することができる。なお、タッチパネル13に対する入力は通常タッチペン28を用いて行われるが、タッチペン28に限らずユーザの指でタッチパネル13に対する入力をすることも可能である。
各操作ボタン14A〜14Iは、所定の入力を行うための入力装置である。図1に示されるように、下側ハウジング11の内側面(主面)には、十字ボタン14A(方向入力ボタン14A)、ボタン14B、ボタン14C、ボタン14D、ボタン14E、電源ボタン14F、セレクトボタン14G、HOMEボタン14H、及びスタートボタン14Iが、設けられる。十字ボタン14Aは、十字の形状を有しており、上下左右の方向を指示するボタンを有している。ボタン14A〜14E、セレクトボタン14J、HOMEボタン14K、及びスタートボタン14Lには、ゲーム装置10が実行するプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン14Aは選択操作等に用いられ、各操作ボタン14B〜14Eは例えば決定操作やキャンセル操作等に用いられる。また、電源ボタン14Fは、ゲーム装置10の電源をオン/オフするために用いられる。
アナログスティック15は、方向を指示するデバイスである。アナログスティック15は、そのキートップが、下側ハウジング11の内側面に平行にスライドするように構成されている。アナログスティック15は、ゲーム装置10が実行するプログラムに応じて機能する。例えば、3次元仮想空間に所定のオブジェクトが登場するゲームがゲーム装置10によって実行される場合、アナログスティック15は、当該所定のオブジェクトを3次元仮想空間内で移動させるための入力装置として機能する。この場合において、所定のオブジェクトはアナログスティック15のキートップがスライドした方向に移動される。なお、アナログスティック15として、上下左右及び斜め方向の任意の方向に所定量だけ傾倒することでアナログ入力を可能としたものを用いてもよい。
また、下側ハウジング11の内側面には、マイクロフォン用孔18が設けられる。マイクロフォン用孔18の下部には後述する音声入力装置としてのマイク(図2参照)が設けられ、当該マイクがゲーム装置10の外部の音を検知する。
また、図示はしていないが、下側ハウジング11の上側面には、Lボタン14J及びRボタン14Kが設けられている。Lボタン14J及びRボタン14Kは、例えば、撮像部のシャッターボタン(撮影指示ボタン)として機能することができる。また、図示はしていないが、下側ハウジング11の左側面には、音量ボタン14Lが設けられる。音量ボタン14Lは、ゲーム装置10が備えるスピーカの音量を調整するために用いられる。
また、図1に示されるように、下側ハウジング11の左側面には開閉可能なカバー部11Bが設けられる。このカバー部11Bの内側には、ゲーム装置10とデータ保存用外部メモリ45とを電気的に接続するためのコネクタ(図示せず)が設けられる。データ保存用外部メモリ45は、コネクタに着脱自在に装着される。データ保存用外部メモリ45は、例えば、ゲーム装置10によって撮像された画像のデータを記憶(保存)するために用いられる。
また、図1に示されるように、下側ハウジング11の上側面には、ゲーム装置10とゲームプログラムを記録した外部メモリ44を挿入するための挿入口11Cが設けられ、その挿入口11Cの内部には、外部メモリ44と電気的に着脱自在に接続するためのコネクタ(図示せず)が設けられる。当該外部メモリ44がゲーム装置10に接続されることにより、所定のゲームプログラムが実行される。
また、図1に示されるように、下側ハウジング11の下側面にはゲーム装置10の電源のON/OFF状況をユーザに通知する第1LED16Aが設けられる。さらに、図示はしていないが、下側ハウジング11の右側面にはゲーム装置10の無線通信の確立状況をユーザに通知する第2LED16Bが設けられる。ゲーム装置10は他の機器との間で無線通信を行うことが可能であり、第2LED16Bは、無線通信が確立している場合に点灯する。ゲーム装置10は、例えば、IEEE802.11b/gの規格に準拠した方式により、無線LANに接続する機能を有する。下側ハウジング11の右側面には、この無線通信の機能を有効/無効にする無線スイッチ19が設けられる(図示せず)。
なお、図示は省略するが、下側ハウジング11には、ゲーム装置10の電源となる充電式電池が収納され、下側ハウジング11の側面(例えば、上側面)に設けられた端子を介して当該電池を充電することができる。
(上側ハウジングの説明)
次に、上側ハウジング21の構成について説明する。図1に示すように、上側ハウジング21には、上側LCD(Liquid Crystal Display:液晶表示装置)22、外側撮像部23(外側撮像部(左)23a及び外側撮像部(右)23b)、内側撮像部24、3D調整スイッチ25、及び、3Dインジケータ26が設けられる。以下、これらの詳細について説明する。
図1に示すように、上側LCD22は上側ハウジング21に収納される。上側LCD22の画素数は、例えば、800dot×240dot(横×縦)であってもよい。なお、本実施形態では上側LCD22は液晶表示装置であるとしたが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置などが利用されてもよい。また、上側LCD22として、任意の解像度の表示装置を利用することができる。
上側LCD22は、立体視可能な画像を表示することが可能な表示装置である。また、本実施形態では、実質的に同一の表示領域を用いて左目用画像と右目用画像が表示される。具体的には、左目用画像と右目用画像が所定単位で(例えば、1列ずつ)横方向に交互に表示される方式の表示装置である。または、左目用画像と右目用画像とが時分割で交互に表示される方式の表示装置であってもよい。また、本実施形態では、裸眼立体視可能な表示装置である。そして、横方向に交互に表示される左目用画像と右目用画像とを左目及び右目のそれぞれに分解して見えるようにレンチキュラー方式やパララックスバリア方式(視差バリア方式)のものが用いられる。本実施形態では、上側LCD22はパララックスバリア方式のものとする。上側LCD22は、右目用画像と左目用画像とを用いて、裸眼で立体視可能な画像(以下、立体視画像と称する)を表示する。すなわち、上側LCD22は、視差バリアを用いてユーザの左目に左目用画像をユーザの右目に右目用画像を視認させることにより、ユーザにとって立体感のある立体視画像を表示することができる。また、上側LCD22は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる(上述した立体視とは反対の意味で平面視の画像を表示することができる。すなわち、表示された同一の画像が右目にも左目にも見えるような表示モードである)。このように、上側LCD22は、立体視可能な立体視画像を表示する立体視表示(立体表示モード)と、画像を平面的に表示する(平面視画像を表示する)平面視表示(平面表示モード)とを切り替えることが可能な表示装置である。この表示の切り替えは、CPU311の処理、又は後述する3D調整スイッチ25によって行われる。
外側撮像部23は、上側ハウジング21の外側面(上側LCD22が設けられた主面と反対側の背面)21Dに設けられた2つの撮像部(23a及び23b)の総称である。外側撮像部(左)23aと外側撮像部(右)23bの撮像方向は、いずれも当該外側面21Dの外向きの法線方向である。外側撮像部(左)23aと外側撮像部(右)23bとは、ゲーム装置10が実行するプログラムによって、ステレオカメラとして使用することが可能である。外側撮像部(左)23a及び外側撮像部(右)23bは、それぞれ所定の共通の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。レンズは、ズーム機構を有するものでもよい。
内側撮像部24は、上側ハウジング21の内側面(主面)21Bに設けられ、当該内側面の内向きの法線方向を撮像方向とする撮像部である。内側撮像部24は、所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。レンズは、ズーム機構を有するものでもよい。
3D調整スイッチ25は、スライドスイッチであり、上述のように上側LCD22の表示モードを切り替えるために用いられるスイッチである。3D調整スイッチ25は、上側LCD22に表示された立体視画像の立体感を調整するために用いられる。ただし、後述で明らかとなるように、本実施形態では一例として、3D調整スイッチ25に関わらずに、上側LCD22に表示される画像を立体視画像と平面視画像との間で切り替える。
3Dインジケータ26は、上側LCD22が立体表示モードか否かを示す。3Dインジケータ26は、LEDであり、上側LCD22の立体表示モードが有効の場合に点灯する。なお、3Dインジケータ26は、上側LCD22が立体表示モードになっており、かつ、立体視画像を表示するプログラム処理が実行されているときに限り、点灯するようにしてもよい。図1に示されるように、3Dインジケータ26は、上側ハウジング21の内側面に設けられ、上側LCD22の画面近傍に設けられる。このため、ユーザが上側LCD22の画面を正視した場合、ユーザは3Dインジケータ26を視認しやすい。従って、ユーザは上側LCD22の画面を視認している状態でも、上側LCD22の表示モードを容易に認識することができる。
また、上側ハウジング21の内側面には、スピーカ孔21Eが設けられる。後述するスピーカ43からの音声がこのスピーカ孔21Eから出力される。
[ゲーム装置10の内部構成]
次に、図2を参照して、ゲーム装置10の内部の電気的構成について説明する。図2は、ゲーム装置10の内部構成を示すブロック図である。図2に示すように、ゲーム装置10は、上述した各部に加えて、情報処理部31、メインメモリ32、外部メモリインターフェイス(外部メモリI/F)33、データ保存用外部メモリI/F34、データ保存用内部メモリ35、無線通信モジュール36、ローカル通信モジュール37、リアルタイムクロック(RTC)38、加速度センサ39、電源回路40、及びインターフェイス回路(I/F回路)41等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて下側ハウジング11(または上側ハウジング21でもよい)内に収納される。
情報処理部31は、所定のプログラムを実行するためのCPU(Central Processing Unit)311、画像処理を行うGPU(Graphics Processing Unit)312等を含む情報処理手段である。情報処理部31のCPU311は、ゲーム装置10内のメモリ(例えば外部メモリI/F33に接続された外部メモリ44やデータ保存用内部メモリ35)に記憶されているプログラムを実行することによって、当該プログラムに応じた処理を実行する。なお、情報処理部31のCPU311によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。また、情報処理部31は、VRAM(Video RAM)313を含む。情報処理部31のGPU312は、情報処理部31のCPU311からの命令に応じて画像を生成し、VRAM313に描画する。そして、情報処理部31のGPU312は、VRAM313に描画された画像を上側LCD22及び/又は下側LCD12に出力し、上側LCD22及び/又は下側LCD12に当該画像が表示される。
情報処理部31には、メインメモリ32、外部メモリI/F33、データ保存用外部メモリI/F34、及びデータ保存用内部メモリ35が接続される。外部メモリI/F33は、外部メモリ44を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリI/F34は、データ保存用外部メモリ45を着脱自在に接続するためのインターフェイスである。
メインメモリ32は、情報処理部31(のCPU311)のワーク領域やバッファ領域として用いられる揮発性の記憶手段である。すなわち、メインメモリ32は、上記プログラムに基づく処理に用いられる各種データを一時的に記憶したり、外部(外部メモリ44や他の機器等)から取得されるプログラムを一時的に記憶したりする。本実施形態では、メインメモリ32として例えばPSRAM(Pseudo−SRAM)を用いる。
外部メモリ44は、情報処理部31によって実行されるプログラムを記憶するための不揮発性の記憶手段である。外部メモリ44は、例えば読み取り専用の半導体メモリで構成される。外部メモリ44が外部メモリI/F33に接続されると、情報処理部31は外部メモリ44に記憶されたプログラムを読み込むことができる。情報処理部31が読み込んだプログラムを実行することにより、所定の処理が行われる。データ保存用外部メモリ45は、不揮発性の読み書き可能なメモリ(例えばNAND型フラッシュメモリ)で構成され、所定のデータを格納するために用いられる。例えば、データ保存用外部メモリ45には、外側撮像部23で撮像された画像や他の機器で撮像された画像が記憶される。データ保存用外部メモリ45がデータ保存用外部メモリI/F34に接続されると、情報処理部31はデータ保存用外部メモリ45に記憶された画像を読み込み、上側LCD22及び/又は下側LCD12に当該画像を表示することができる。
データ保存用内部メモリ35は、読み書き可能な不揮発性メモリ(例えばNAND型フラッシュメモリ)で構成され、所定のデータを格納するために用いられる。例えば、データ保存用内部メモリ35には、無線通信モジュール36を介した無線通信によってダウンロードされたデータやプログラムが格納される。
無線通信モジュール36は、例えばIEEE802.11b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、ローカル通信モジュール37は、所定の通信方式(例えば独自プロトコルによる通信や、赤外線通信)により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール36及びローカル通信モジュール37は情報処理部31に接続される。情報処理部31は、無線通信モジュール36を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール37を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
また、情報処理部31には、RTC38及び電源回路40が接続される。RTC38は、時間をカウントして情報処理部31に出力する。情報処理部31は、RTC38によって計時された時間に基づき現在時刻(日付)を計算する。
また、情報処理部31には、加速度センサ39が接続される。加速度センサ39は、3軸(xyz軸)方向に沿った直線方向の加速度(直線加速度)の大きさを検知する。加速度センサ39は、上側ハウジング21の内部に設けられる。加速度センサ39は、図1に示すように、上側LCD22の長辺方向をx軸、上側LCD22の短辺方向をy軸、上側LCD22の表示面に対して垂直な方向をz軸として、各軸の直線加速度の大きさを検知する。なお、加速度センサ39は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ39は1軸又は2軸方向を検知する加速度センサであってもよい。情報処理部31は、加速度センサ39が検知した加速度を示すデータ(加速度データ)を受信して、ゲーム装置10の姿勢や動きを検知することができる。
情報処理部31には、角速度センサ40が接続される。角速度センサ40は、上側LCD22の3軸(本実施形態では、xyz軸)周りにおける角速度をそれぞれ検知し、検知した角速度を示すデータ(角速度データ)を情報処理部31へ出力する。角速度センサ40は、例えば下側ハウジング11の内部に設けられる。情報処理部31は、角速度センサ40から出力された角速度データを受信して、上側LCD22の姿勢や動きを算出する。
なお、上述の通り、加速度センサ39や角速度センサ40によって、上側LCD22の姿勢や動きが算出されるが、上側LCD22の長辺方向、短辺方向、および表示面に対して垂直な方向はそれぞれ、上側ハウジング21の長辺方向、短辺方向、および内側面(主面)に対して垂直な方向と一致しているため、上側LCD22の姿勢や動きと、当該上側LCDを固定的に収納する上側ハウジング21の姿勢や動きは一致することになる。以降で装置の姿勢や動きを取得するとして説明している部分は、上側LCD22の姿勢や動きを取得していることと同等となる。
電源回路41は、ゲーム装置10が有する電源(下側ハウジング11に収納される上記充電式電池)からの電力を制御し、ゲーム装置10の各部品に電力を供給する。
また、情報処理部31には、I/F回路42が接続される。I/F回路42には、マイク43、及びスピーカ44が接続される。具体的には、I/F回路42には、図示しないアンプを介してスピーカ44が接続される。マイク43は、ユーザの音声を検知して音声信号をI/F回路42に出力する。アンプは、I/F回路42からの音声信号を増幅し、音声をスピーカ44から出力させる。また、I/F回路42には上述したタッチパネル13も接続される。I/F回路42は、マイク43及びスピーカ44(アンプ)の制御を行う音声制御回路と、タッチパネルの制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するA/D変換及びD/A変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル13からの信号に基づいて所定の形式のタッチ位置データを生成して情報処理部31に出力する。タッチ位置データは、タッチパネル13の入力面において入力が行われた位置の座標を示す。
操作ボタン14は、上記各操作ボタン14A〜14Lからなり、情報処理部31に接続される。操作ボタン14から情報処理部31へは、各操作ボタン14A〜14Iに対する入力状況(押下されたか否か)を示す操作データが出力される。情報処理部31は、操作ボタン14から操作データを取得することによって、上記各操作ボタン14A〜14Lに対する入力に従った処理を実行する。なお、CPU311は、操作ボタン14からの操作データの取得を所定時間に1回の割合で行う。
下側LCD12及び上側LCD22は情報処理部31に接続される。下側LCD12及び上側LCD22は、情報処理部31(のGPU312)の指示に従って画像を表示する。本実施形態では、情報処理部31は、上側LCD22に立体視画像(立体視可能な画像)を表示させる。
具体的には、情報処理部31は、上側LCD22のLCDコントローラ(図示せず)と接続され、当該LCDコントローラに対して視差バリアのON/OFFを制御する。上側LCD22の視差バリアがONになっている場合、情報処理部31のVRAM313に記憶された右目用画像と左目用画像とが、上側LCD22に出力される。より具体的には、LCDコントローラは、右目用画像について縦方向に1ライン分の画素データを読み出す処理と、左目用画像について縦方向に1ライン分の画素データを読み出す処理とを交互に繰り返すことによって、VRAM313から右目用画像と左目用画像とを読み出す。これにより、右目用画像及び左目用画像が、画素を縦に1ライン毎に並んだ短冊状画像に分割され、分割された右目用画像の短冊状画像と左目用画像の短冊状画像とが交互に配置された画像が、上側LCD22の画面に表示される。そして、上側LCD22の視差バリアを介して当該画像がユーザに視認されることによって、ユーザの右目に右目用画像が、ユーザの左目に左目用画像が視認される。本実施形態では、視差バリアは常にONになっているものとする。以上により、上側LCD22の画面には立体視可能な画像が表示される。
外側撮像部23及び内側撮像部24は、情報処理部31に接続される。外側撮像部23及び内側撮像部24は、情報処理部31の指示に従って画像を撮像し、撮像した画像データを情報処理部31に出力する。
3D調整スイッチ25は、情報処理部31に接続される。3D調整スイッチ25は、スライダ25aの位置に応じた電気信号を情報処理部31に送信する。
また、3Dインジケータ26は、情報処理部31に接続される。情報処理部31は、3Dインジケータ26の点灯を制御する。例えば、情報処理部31は、上側LCD22が立体表示モードである場合、3Dインジケータ26を点灯させる。以上がゲーム装置10の内部構成の説明である。
[情報処理の概要]
以下、実施形態の一例における情報処理の概要について図3、図4および図5を参照しながら説明する。本実施形態においては、情報処理の一例として、ゲーム処理がゲーム装置10によって行われるものとする。
本実施形態のゲーム処理では、プレイヤは、ゲーム装置10の操作手段を用いて、仮想ゲーム空間に登場するプレイヤオブジェクトを当該仮想ゲーム空間内で動かすことでゲームを進行させる。例えば、アナログスティック15を上方向に傾けるとプレイヤオブジェクトは仮想空間内を奥方向に移動し、アナログスティック15を下方向に傾けるとプレイヤオブジェクトは仮想空間内を手前方向に移動する。また、プレイヤオブジェクトの姿勢(向き)は、アナログスティック15で指示した方向が前方になるように姿勢制御される。また、他の操作手段(ボタンやタッチパネル等)を操作することで、プレイヤオブジェクトに例えばジャンプ等の動作をさせることもできるが、詳細は省略する。
本実施形態のゲーム処理が行われる際には、仮想ゲーム空間内に仮想ステレオカメラを配置する処理が行われ、配置された仮想ステレオカメラを用いて仮想ゲーム空間を撮像することでゲーム装置の画面上に表示される画像が生成される。仮想ステレオカメラは、右仮想カメラおよび左仮想カメラを含み、それぞれの仮想カメラで仮想ゲーム空間を撮像することで右目用画像および左目用画像を生成し、これらの画像を用いることで表示手段22上に立体視表示を行う。
なお、本実施形態において、仮想ステレオカメラの位置及び姿勢は、プレイヤオブジェクトの位置及び姿勢に基づいて配置される。具体的には、プレイヤオブジェクトを後ろから撮影するような位置に、撮像方向がプレイヤオブジェクトを撮像する方向を向くような姿勢で配置される。前述したように、プレイヤオブジェクトの姿勢は、ユーザの所定操作(本実施形態においては、アナログスティック15の操作)により制御されるので、それにともなって、仮想ステレオカメラの姿勢が変更される。
また、本実施形態において、仮想ステレオカメラを仮想ゲーム空間に配置する際には、プレイヤオブジェクトの位置及び姿勢に基づいてまず基準となる仮想カメラ(基準仮想カメラ)を決めて、当該基準仮想カメラの設定に基づいて、左右の仮想カメラを配置する。具体的な処理は後述で説明するが、基準仮想カメラを、左右(基準仮想カメラ座標系におけるx軸方向の正方向および負方向)に移動したものをそれぞれ左右の仮想カメラとして用いる。
前述したように、仮想ステレオカメラの位置及び姿勢は、アナログスティック15の操作に基づくプレイヤオブジェクトの位置及び姿勢によって変化する。本実施例のゲーム処理では、仮想ステレオカメラの姿勢については、さらに、ゲーム装置の現実空間における姿勢を変化させることで仮想カメラの姿勢を変化させることができる。このようなゲーム装置の姿勢による仮想カメラの姿勢の制御のことを「装置姿勢追従制御」と呼ぶ。。より具体的には、プレイヤがゲーム装置10の操作手段を用いてあらかじめ定める所定の操作を行った場合に、装置姿勢追従制御が有効となる。本実施形態では、Rボタン14Kを押す操作がこの「所定の操作」であり、Rボタン14Kが押し続けている間は仮想カメラ制御モードになり、仮想カメラを操作できる。Rボタン14Kを離しているときは通常のモードとなり、装置の姿勢を変化させても、仮想カメラが動くことはない。なお、Rボタン14Kを押したときに、その後ボタンを離しても、装置姿勢追従制御が継続するようにしてもかまわない。
図3および図4はゲーム装置10を動かすことで仮想ステレオカメラを操作する様子を示す図である。なお、実際には、仮想ステレオカメラは左仮想カメラおよび右仮想カメラの2つがあり、また、画面は立体的に表示されているが、図3および図4では、分かりやすいように仮想カメラは1つで、画面は平面的な表示として描いている。図3には通常の状態(Rボタン14Kを押していない状態)でのプレイの様子301A、そのときに画面に表示される画像302A、そのときの仮想ゲーム空間におけるオブジェクトと仮想カメラの状態302Aを表している。302Aに示されるように、通常の状態では、プレイヤキャラクタ310を真後ろから撮像するように仮想カメラ312Aが配置されており、プレイヤキャラクタ310が左右方向の中央に来るような画像が画面上に表示されている。図4は、図3の状態でRボタン14Kを押した後、装置を左方向に回転させた時の様子301A、そのときに画面に表示される画像302B、およびそのときの仮想ゲーム空間におけるオブジェクトと仮想カメラの状態302Bを表している。このときは、Rボタン14Kが押されているため、前述の装置姿勢追従制御が有効となっており、画面上には装置姿勢追従制御が有効になっていることを示す画像311が表示される。装置姿勢追従制御が有効な間は、装置の姿勢に応じて仮想カメラを動かすことができる。図4では、装置姿勢追従制御が有効になった後(Rボタン14Kを押した状態にした後)に装置を左方向に回転させたため、仮想カメラ312Bも同じように左方向に回転している。これによって、仮想カメラ312Bの撮像方向が左方向に変化し、もともと撮像していた範囲の左方向の範囲を撮像することになる。すると、画面上に当初は表示されていなかった、プレイヤキャラクタの左方向に存在していたオブジェクト313が表示されるようになる。
図4の状態からRボタン14Kを離すと、装置姿勢追従制御は無効になる。このとき、装置の姿勢を301Aの状態に戻さなくても自動的に仮想カメラは303Aで示す姿勢に戻り、画面の表示も302Aと同様となる。
装置の姿勢の変化としては、x軸周り(チルト方向)、y軸周り(パン方向)、z軸周り(ロール方向)の変化がある。図3および図4では、y軸周りに装置の姿勢を変化させた場合の説明をした。詳しい説明は省略するが、装置をx軸周りに回転移動させた場合も、y軸周りに回転移動させた場合と同様に、装置の姿勢に合わせて仮想カメラの姿勢が変化する。
また、z軸周りに装置姿勢を変化させた場合も、装置の姿勢に合わせて仮想カメラの姿勢が変化する。図5に、装置を傾けた様子401およびそのときに画面に表示される画像402を示している。z軸周りに装置姿勢を変化させたときは、仮想カメラの撮影方向自体は変化せず、仮想カメラの撮影方向を軸として、当該軸周りに回転し、402に示すように、装置に対して傾いたような画像が表示される。装置を401に示す状態にしたときは、当該画像を表示する表示手段自体がユーザに対して傾いた状態となるため、結果的に、ユーザはプレイヤブジェクト等の仮想ゲーム空間内のオブジェクトを、ゲーム装置を傾ける前と後で同じ角度で視認することになる。
なお、本実施形態では、角速度センサ40によって検知された各軸周りの角速度に基づいて算出される各軸周りの角度の単位と、仮想空間における各軸周りの角度の単位とが一致するように予め定められているものとする。従って、本実施形態では、角速度センサ40によって検知された各軸周りの角速度に基づいて算出される各軸周りの回転角度を、仮想カメラの姿勢を変化させるときの回転角度としてそのまま用いることができる。
本実施例では、x軸周り(チルト方向)、y軸周り(パン方向)について、仮想カメラの姿勢を変化させられる範囲には制限が設けられる。具体的には、仮想カメラの撮像方向がプレイヤキャラクタから大きく外れない範囲でのみ、仮想カメラの姿勢を変化させることができる。例えば、装置姿勢追従制御が有効にしたまま(Rボタン14Kを離さないまま)、図4に示す状態から装置をさらに左方向に回転させた場合、同じように仮想カメラを左方向に回転させると、プレイヤキャラクタが仮想カメラの撮像範囲から外れてしまい、画面上に表示されなくなってしまう。そのため、図4に示す状態から装置をさらに左方向に回転させても、仮想カメラは図4の状態以上には回転せず、画面の表示も図4の状態からは変化しない。
一方、z軸周り(ロール方向)に装置の姿勢を変化させた場合については、x軸周り(チルト方向)、y軸周り(パン方向)のように仮想カメラの姿勢の変化について制限はされない。ただし、z軸周り(ロール方向)に装置の姿勢を変化させた場合には、以下のような問題が発生する。本実施態様において用いる裸眼立体表示手段は、右目用の画像は右目のみに、左目用の画像は左目のみに視認されるように振り分けることで立体視可能に表示するものであり、通常、ユーザと表示手段とが正対したときに(ユーザの上下方向が表示手段の上下方向と一致したときに)立体視可能ように左右画像の振り分けるように立体視表示がなされている。このままで表示手段をz軸周りに回転してしまうと、ユーザの上下方向と表示手段の上下方向がずれて、右目用の画像が左目でも視認されたり、左目用の画像が右眼でも視認されたりすることが発生してしまい、立体視ができなくなってしまう。こうした状態では、装置の姿勢が少し変化しただけで、右目用の画像が見えたり、左目用の画像が見えたり、両画像が一緒に見えたりする状態が頻繁に切り替わるため、右目用の画像と左目用の画像との視差が大きいと、画像として違いの大きい画像が切り替わって、ぶれたように見える表示になってしまい、見づらい表示となってしまう。
そのため、本実施例においては、装置の姿勢の変化に応じて仮想カメラを上側LCD22に垂直な軸周り(z軸周り)に回転させる際には、右目用画像と左目用画像の視差が小さくなるような仮想カメラの制御を同時に行う。具体的には、ロール方向の回転角が大きくなるほど、仮想ステレオカメラの間隔(右仮想カメラと左仮想カメラの間の間隔)が小さくなるように、右仮想カメラと左仮想カメラとの位置を変更する。本実施例においては、基準仮想カメラ姿勢からロール方向に25度傾いた時に仮想カメラの間隔がゼロになるように仮想カメラ間隔が制御される。25度以上傾けた場合は仮想カメラ間隔はゼロのままとなり、この場合は右目用画像と左目用画像は同じものとなるため、表示手段には平面視で画像が表示される。
[メインメモリに記憶されるデータ]
次に、ゲーム装置10のCPU311の具体的な動作について説明する前に、当該CPU311がゲームプログラムを実行することに応じてメインメモリ32に記憶されるデータについて図6を参照しながら説明する。ゲームプログラムは、ゲーム装置10に装着可能な所定の記憶媒体、または、ゲーム装置10内の不揮発メモリに記憶され、メインメモリに読み込まれて実行される。
図6に一例として示すように、メインメモリ32には、プレイヤオブジェクト位置姿勢データ501、基準仮想カメラ設定データ502、仮想ステレオカメラ間隔データ503、装置回転角度データ504、x軸周りしきい値データ505、y軸周りしきい値データ506、z軸周りしきい値データ507、基準間隔データ508が記憶される。プレイヤオブジェクト位置姿勢データ501、基準仮想カメラ設定データ502、仮想ステレオカメラ間隔データ503、装置回転角度データ504は、CPU311が本ゲームプログラムを実行することにより生成されるデータである。x軸周りしきい値データ505、y軸周りしきい値データ506、z軸周りしきい値データ507、基準間隔データ508は、そのデータがゲームプログラムに含まれる。
プレイヤオブジェクト位置姿勢データ501は、仮想ゲーム空間中でのプレイヤオブジェクトの位置及び姿勢を示すデータである。プレイヤオブジェクトの位置は仮想空間のワールド座標系におけるxyz軸方向についての座標で表され、姿勢はxyz各軸周りの角度で表される。
基準仮想カメラ設定データ502は、基準仮想カメラの設定を示すデータであり、基準仮想カメラの配置位置及び姿勢の情報を含むデータである。基準仮想カメラの位置は仮想空間のワールド座標系におけるxyz軸方向についての座標で表され、姿勢はxyz各軸周りの角度で表される。また、当該基準仮想カメラ設定データ502には、基準仮想カメラの画角やニアクリップ面、ファークリップ面等の情報も含まれる。
仮想ステレオカメラ間隔データ503は、右仮想カメラと左仮想カメラとの間の距離を示すデータである。基準間隔データ508は、右仮想カメラと左仮想カメラとの間の距離の基準となる値を示すデータである。
仮想ステレオカメラ間隔データ503の値は、後述するように、基準間隔データ508が示す基準値を用いて設定される。
x軸周りしきい値データ505およびy軸周りしきい値データ506は、後述する仮想ステレオカメラ設定更新処理で用いるデータであり、基準仮想カメラの姿勢を調整する際にどのように調整するかの判断に用いられるしきい値のデータである。
z軸周りしきい値データ507は、後述する仮想ステレオカメラ設定更新処理で用いるデータであり、仮想ステレオカメラ間隔を調整する際にどのように調整するかの判断に用いられるしきい値のデータである。
[ゲーム処理]
以下、本実施形態における情報処理の具体的な動作について図7および図8を参照しながら説明する。まず、ゲーム装置に電源が投入されると、CPU311によってブートプログラム(図示せず)が実行され、これによりデータ保存用内部メモリに記憶されているゲームプログラムが読み込まれてメインメモリ32に記憶される。そして、メインメモリ32に記憶されたゲームプログラムがCPU311で実行されることによって、図7、及び図8のフローチャートに示す処理が行われる。図7、及び図8は、CPU311がゲームプログラムを実行することによって行われる上記ゲーム処理の一例を、ゲーム処理における1単位時間(例えば1/60秒)に実行される内容として示すフローチャートである。なお、図7、及び図8では、ステップを「S」と省略して記載している。
ゲーム処理を開始すると、CPU311は、始めに初期設定処理をする(ステップ100)。具体的には、CPU311は、メインメモリ32に記憶されている各種データを初期値に設定する。
初期設定処理を終了すると、CPU311は、ゲーム操作入力受付処理を実行する(ステップ105)。具体的には、ゲーム装置のアナログスティック15や操作ボタン14A〜Eへの入力状況を把握する。
ゲーム操作入力受付処理を終了すると、CPU311は、プレイヤオブジェクト位置姿勢更新処理を実行する(ステップ110)。具体的には、アナログスティック15等への入力状況に基づいて、プレイヤオブジェクトの仮想空間内での位置および姿勢を更新し、プレイヤオブジェクト位置姿勢データ501を更新する。
プレイヤオブジェクト位置更新処理を終了すると、CPU311は、基準仮想カメラ設定処理を行う(ステップ115)。具体的には、CPU311はまず、プレイヤオブジェクト位置姿勢データ501を参照してプレイヤオブジェクトの位置及び姿勢を取得し、取得したプレイヤオブジェクトの位置および姿勢に基づいて、基準仮想カメラの位置および姿勢を設定する。より具体的には、プレイヤオブジェクトが向いている方向に対して、プレイヤオブジェクト310の位置から後方および上方向に所定距離だけ離れた位置を基準仮想カメラの位置(基準仮想カメラ座標系の原点の座標)として決定する。さらに、決定された基準仮想カメラの位置から、プレイヤオブジェクト310の位置を向く方向が、基準仮想カメラの撮像方向となるように基準仮想カメラの姿勢(基準仮想カメラ座標系の各軸の方向)を決定する。CPU311は、以上のようにして決定された基準仮想カメラの設定を示すように、基準仮想カメラ設定データ502を更新する。なお、このときの基準仮想カメラの姿勢が、後の処理で基準仮想カメラの姿勢の更新をする際の基準の姿勢となる。
基準仮想カメラ設定処理を終了すると、CPU311は、仮想カメラ間隔設定処理を行い、基準となる仮想カメラの間隔を設定する(ステップS115)。本実施例では、基準となる仮想カメラ間隔としては、本ゲームプログラムによりあらかじめ決められた距離を用いるため、仮想カメラ間隔が当該決められた距離となるように仮想カメラ間隔データを更新する。他の実施例では、例えば、ユーザの操作に応じて基準となる仮想カメラ間隔を変更するようにしてもよい。
仮想カメラ間隔設定処理を終了すると、CPU311は、有効化操作入力がオンになっているかどうかを確認する(ステップ120)。具体的には、有効化操作として割り当てられたユーザ操作である、Rボタン14Kの入力がオンになっているかどうか(Rボタン14Kが押された状態かどうか)を判断する。有効化操作入力がオンになっていると判断された場合(ステップ120でYES)はステップ125に、なっていないと判断された場合(ステップ120でNO)はステップ145に進む。
CPU311は、ステップ120で有効化操作入力がオンになっていると判断したときには、さらに、有効化操作入力がオフからオンになったかどうかを確認する(ステップ125)。すなわち、有効化操作入力が、現在のタイミングでオンになったものか、以前のタイミングでオンになり、オンになった状態が現在まで継続しているのかのどちらであるかを判断する。有効化操作入力が現在のタイミングでオンになったと判断された場合(ステップ125でYES)はステップ135に、オンになった状態が継続していると判断された場合(ステップ125でYES)はステップ140に進む。
CPU311は、ステップ130で有効化操作入力が現在のタイミングでオンになったと判断したときには、装置回転角度データ初期化処理を行う(ステップ135)。具体的には、装置のx軸、y軸、z軸周りの回転角度データをそれぞれゼロとするように、装置回転角度データ504を更新する。この処理によって、以降の仮想ステレオカメラ設定更新処理においては、有効化操作入力が有効になったときの姿勢を基準として、当該装置基準姿勢からの装置の回転角度が求められることとなる。
装置姿勢データ初期化処理が終了したとき、および、ステップ130で有効化操作入力がオンになった状態が継続していると判断されたとき、CPU311は、仮想ステレオカメラ設定更新処理を行う(ステップ140)。以下、図8のフローを参照して、仮想ステレオカメラ設定更新処理の詳細について説明する。
仮想ステレオカメラ設定更新処理において、CPU311はまず、角速度データ検出処理を行う(ステップ200)。具体的には、CPU311は、角速度センサ40によってサンプリングされた、x軸、y軸、z軸の各軸方向についての角速度を取得する。
角速度データ検出処理を終了すると、CPU311は、装置回転角度データ更新処理を行う(ステップ210)。具体的には、ステップ200で検出した角速度データに基づいて、ゲーム装置が、x軸、y軸、z軸の各軸周りにどれだけの角度回転したかを算出し、算出された角度を、更新前の装置回転角度データ504を参照して取得した、直前の装置回転角度(x軸、y軸、z軸の各軸周りについての装置基準姿勢からの回転角度)に加算することによって、現在の装置の回転角度を算出する。CPU311は、算出された装置の回転角度を示すように装置回転角度データ504を更新する。
装置回転角度データ更新処理を終了すると、CPU311は、更新された装置回転角度データ504に基づいて基準仮想カメラの姿勢の更新を行う(ステップ215〜ステップ245)。以下、基準仮想カメラの姿勢の更新の流れについて説明する。
まず、CPU311は、更新された装置回転角度データ504から装置のx軸周りの回転角度を参照して、当該x軸周りの回転角度が、x軸周りしきい値データ505を参照して取得されたしきい値以下であるかどうかを確認する(ステップ215)。 装置のx軸周りの回転角度がしきい値以下であった場合(ステップ215でYES)は、基準仮想カメラを、装置の回転角度に合わせるようにx軸方向に回転させる(ステップ220)。より具体的には、基準仮想カメラ設定データ502を参照して、ステップS115で設定された基準仮想カメラの位置および姿勢を取得し、当該姿勢から、基準仮想カメラ座標系のx軸周りに、装置のx軸周りの回転角度と同じだけ基準仮想カメラを回転させる。CPU311は、回転させた基準仮想カメラの姿勢を示すように基準仮想カメラ設定データ502を更新する。装置のx軸周りの回転角度がしきい値を超えていた場合(ステップ215でNO)は、装置のx軸周りの回転角度と同じだけ仮想カメラを回転してしまうと、プレイヤキャラクタが基準仮想カメラの画角から外れてしまう。そのため、装置のx軸周りの回転角度と同じだけ回転させるのではなく、しきい値として設定されたx軸周りの回転角度だけ回転させ、回転させた基準仮想カメラの姿勢を示すように基準仮想カメラ設定データ502を更新する(ステップ225)。これによって、基準仮想カメラはしきい値として設定された角度までしか回転しないため、画面上に常にプレイヤキャラクタが表示される。なお、上記の説明および以降の説明においては、しきい値と回転角度との比較に関して、両方が正の値の場合について記載しているが、実際には、基準の位置を基に、一方向への回転角度を正、当該方向と逆方向への回転角度を負として、負方向についてもしきい値の範囲内かどうかを確認している。なお、正方向と負方向のしきい値は絶対値が同じ値としてもよいし、別々の値をとるように設定してもよい。
x軸周りに関して基準仮想カメラ設定データ502の更新を行った後、CPU311は次に、y軸周りについてもx軸周りと同様の処理(ステップ230〜ステップ240)を行う。すなわち、CPU311は、装置のy軸周りの回転角度またはしきい値として設定されたy軸周りの回転角度だけ、基準仮想カメラ座標系のy軸周りに基準仮想カメラを回転させて、基準仮想カメラ設定データ502を更新する。これらの処理についてはx方向の場合と同様なため、詳細の説明は省略する。
y軸周りに関して基準仮想カメラ設定データ502の更新を行った後、CPU311は次に、z軸周りに関して基準仮想カメラ設定データ502の更新を行う(ステップ245)。具体的には、CPU311は、基準仮想カメラの姿勢について、装置のz軸周りの回転角度と同じだけ、基準仮想カメラ座標系のz軸周りに基準仮想カメラを回転させて、基準仮想カメラ設定データ502を更新する。なお、x方向やy方向についての場合と異なり、基準仮想カメラの撮像方向(基準仮想カメラ座標系でのz軸方向)はおおよそプレイヤオブジェクトの方向を向いているため、基準仮想カメラ座標系のz軸周りについては、どれだけ回転してもプレイヤオブジェクトが画面上に表示されなくなることがない。そのため、z軸周りについて基準仮想カメラの姿勢の更新を行う際には、しきい値を超えているかどうかを判断することなく姿勢の更新を行っている。
以上のように、ステップ215〜ステップ245の処理によって、基準仮想カメラの姿勢が変更され、基準仮想カメラ設定データ502の更新が行われる。
基準仮想カメラ設定データ502の更新が行われると、CPU311は、仮想ステレオカメラ間隔データ503の更新を行う(ステップ250〜ステップ260)。以下、仮想ステレオカメラ間隔データ503の更新の流れについて説明する。
まず、CPU311は、更新された装置回転角度データ504から装置のz軸周りの回転角度を参照して、当該z軸周りの回転角度が、z軸周りしきい値データ506を参照して取得されたしきい値以下であるかどうかを確認する(ステップ250)。装置のz軸周りの回転角度がしきい値以下であった場合(ステップ250でYES)は、装置のz軸周りの回転角度の大きさに応じて仮想ステレオカメラ間隔を調整する(ステップ255)。具体的には、基準間隔データ508を参照して得られる仮想ステレオカメラ間隔の基準値を装置姿勢のz軸周りの回転角度の大きさに応じて減少させる。より具体的には、装置姿勢のz軸周りの回転角度が0度の時に基準値の100%、前記z軸周りしきい値の大きさの時に基準値の0%となるように設定する。CPU311は、仮想ステレオカメラ間隔の値を示すように仮想ステレオカメラ間隔データ503を更新する。装置のz軸周りの回転角度が前記z軸周りしきい値を超えていた場合(ステップ250でNO)は、仮想ステレオカメラ間隔がゼロとなるように仮想ステレオカメラ間隔データ503を更新する(ステップ260)。
以上のように、ステップ250〜ステップ260の処理によって、仮想ステレオカメラ間隔データ503の更新が行われる。仮想ステレオカメラ間隔データ503の更新を行うと、CPU311は、仮想ステレオカメラ設定更新処理を終了し、元の図7のフローのステップ145に進む。
仮想ステレオカメラ設定更新処理が終了した場合、および、ステップ125で有効化操作入力がオンではないと判断された場合、CPU311は、仮想ステレオカメラ配置処理を行う(ステップ145)。
仮想ステレオカメラ配置処理を終了すると、CPU311は、配置された右仮想カメラおよび左仮想カメラによって仮想空間を撮像し、右目用画像および左目用画像を生成し、生成した画像を表示手段上に表示する(ステップ150)。
図9は、仮想ステレオカメラを配置する方法を示す図である。CPU311はまず、基準仮想カメラ設定データ502を参照し、基準仮想カメラBkの設定を取得する。また、仮想ステレオカメラ間隔データ503を参照して、仮想ステレオカメラ間隔Kkを取得する。そして、図9に示すように、基準仮想カメラを、基準仮想カメラ座標系の原点Oから、x軸方向の正方向及び負方向に向かって間隔Kk/2の位置に移動して、右仮想カメラHkおよび左仮想カメラMkとして配置する。なお、左仮想カメラHk、及び右仮想カメラMkの撮像方向は互いに平行となる。
右目用画像および左目用画像の生成および表示処理が終了すると、CPU311は、ユーザによってゲーム処理を終了する操作がされたか否かを判断する(ステップ155)。ゲーム処理を終了する操作がされたと判断した場合(ステップ155でYES)は、ゲームプログラムの実行を終了する。ユーザによってゲーム処理を終了する操作がされていないと判断した場合(ステップ155でNO)は、ステップ105からの処理を繰り返す。
以上が、本発明の実施形態に係るゲーム装置10の説明である。本実施形態に係るゲーム装置10によれば、ユーザがゲーム装置10をz軸周り(ロール方向)に回転させることによってユーザの視認する方向と、立体視に最適な方向とのずれの大きさに応じて画像の視差を低減し、視認性を向上できる。
なお、本実施形態では、z軸周り(ロール方向)の回転角度について、25度をしきい値として、回転角度としきい値とを比較する場合について説明したが、当該しきい値は任意の角度であってよい。
また、上述した説明では、本発明を携帯型のゲーム装置10に適用した場合について説明したが、本発明は携帯型ゲーム装置に限定されない。例えば、据置型ゲーム装置、携帯電話機、簡易型携帯電話機(PHS)、PDA等の携帯情報端末にも本発明の適用は可能である。また、据置型ゲーム機やパーソナルコンピュータにも本発明の適用は可能である。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施形態の記載から、本発明の記載及び技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。従って、他に定義されない限り、本明細書中で使用される全ての専門用語及び技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。