(第1の実施形態)
[ゲーム装置の外観構成]
以下、本発明の実施形態の一例(第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は、下側ハウジング11の内部に設けられる。加速度センサ39は、図1に示すように、下側ハウジング11の長辺方向をx軸、下側ハウジング11の短辺方向をy軸、下側ハウジング11の内側面(主面)に対して垂直な方向をz軸として、各軸の直線加速度の大きさを検知する。なお、加速度センサ39は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ39は1軸又は2軸方向を検知する加速度センサであってもよい。情報処理部31は、加速度センサ39が検知した加速度を示すデータ(加速度データ)を受信して、ゲーム装置10の姿勢や動きを検知することができる。
情報処理部31には、角速度センサ40が接続される。角速度センサ40は、ゲーム装置10の3軸(本実施形態では、xyz軸)周りに生じる角速度をそれぞれ検知し、検知した角速度を示すデータ(角速度データ)を情報処理部31へ出力する。角速度センサ40は、例えば下側ハウジング11の内部に設けられる。情報処理部31は、角速度センサ40から出力された角速度データを受信して、ゲーム装置10の姿勢や動きを算出する。
電源回路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の内部構成の説明である。
[情報処理の概要]
次に、第1の実施形態における情報処理の概要について、図3〜図7を参照しながら説明する。第1の実施形態では、情報処理の一例としてゲーム処理がゲーム装置10によって行われるものとする。図3は、図1に示すゲーム装置10の使用例を示す図である。図3には、外側撮像部23で撮像した現実空間の画像と仮想空間の画像との合成画像が上側LCD22に表示されている。
本実施形態では、仮想空間に出現し、移動する敵オブジェクトEoを破壊するゲーム処理をゲーム装置10に行わせる。本実施形態のゲーム処理では、移動する敵オブジェクトEoを照準で狙って弾オブジェクトを打ち当てることにより、当該敵オブジェクトEoを破壊することができる。本実施形態のゲーム処理は、ゲーム装置10において所定のゲームプログラムが実行されることによって行われる。
まず、ゲーム装置10においてゲーム処理が行われる際には、仮想空間内に仮想カメラを配置する処理が行われる。より詳細には、上側LCD22に表示される画像は、図4に一例として示すように、仮想空間内に配置された仮想カメラを用いて撮像された画像として表示される。仮想カメラは、仮想空間における原点Oを中心として、ゲーム装置10の現実空間における動きに連動するように位置、及び撮像方向が設定され、配置される。なお、仮想カメラは、ゲーム装置10の現実空間における動き方によっては、その位置のみが変化する場合や撮像方向のみが変化する場合もある。本実施形態では、ゲーム装置10の現実空間における動きを、角速度センサ40を用いて検知する。従って、本実施形態におけるゲーム装置10の動きは、図1に示すゲーム装置10のxyz軸のそれぞれの軸周りの角速度として検知される。そして、仮想カメラの撮像方向が設定されるときには、角速度センサ40を用いて検知されたそれぞれの軸周りの角速度に基づいてそれぞれ算出された角度に対応するように、仮想カメラの仮想空間におけるxyz軸周りの回転角度がそれぞれ設定される。
なお、本実施形態では、角速度センサ40によって検知された各軸周りの角速度に基づいて算出される各軸周りの角度の単位と、仮想空間における各軸周りの角度の単位とが一致するように予め定められているものとする。従って、本実施形態では、角速度センサ40によって検知された各軸周りの角速度に基づいて算出される各軸周りの回転角度を、仮想カメラの撮像方向を設定するときの回転角度としてそのまま用いることができる。また、後述で明らかとなるが、本実施形態では、ゲーム装置10の電源が投入され、初期設定処理が行われたときに、仮想カメラの撮像方向が所定の初期方向を向くように設定される。仮想カメラの撮像方向が初期方向を向くように設定する場合には、仮想空間における仮想カメラのxyz軸の各軸周りの回転角度がそれぞれゼロに初期化される。本実施形態では、仮想カメラの初期方向が、図5に一例として示すように、z軸の正方向であるものとする。
また、上記ゲーム処理が行われる際には、敵オブジェクトEoを出現させたり、移動させたりする処理も敵オブジェクト処理として行われる。ここで、本実施形態の敵オブジェクトEoについて説明する。本実施形態では、図3に一例として示すように、人の顔を示す画像が敵オブジェクトEoに用いられる。敵オブジェクトEoに用いる人の顔の画像としては、外側撮像部23を用いて撮像し、収集した人の顔の画像を用いることができる。顔の画像の収集は、例えば、撮像した顔の画像を用いたゲームを実行し、実行したゲームの結果が成功である場合に、データ保存用内部メモリ33などの不揮発性メモリに記憶して収集するようにしてもよい。また、顔の画像は、無線通信モジュール36又はローカル通信モジュール37を介してダウンロードするなど、任意の手法で取得及び収集した顔の画像を用いてもよい。
本実施形態における敵オブジェクトEoは、ユーザによって決定される。敵オブジェクトEoが決定されるときには、まず、上述したように収集した顔の画像の中から、ユーザによって任意の画像が選択される。ユーザによって選択された顔の画像は、所定のオブジェクトにテクスチャマッピングするための画像として用いられる。また、顔の画像がテクスチャマッピングされたオブジェクトには、所定の形状を有する被り物オブジェクトが被せられる。被り物オブジェクトは、例えば、ボスキャラクタや通常キャラクタなどの格付けに応じて予め定められた形状のオブジェクトの中から、ユーザによって選択される。このようにユーザによって選択された顔の画像をテクスチャマッピングしたオブジェクトに、被り物オブジェクトを被せることによって、敵オブジェクトEoが決定される。敵オブジェクトEoは、1種類以上が決定されるものとする。なお、本実施形態では、上述したように顔の画像を収集するための処理や敵オブジェクトEoを決定するための処理は、上記ゲーム処理とは別に行われるものとし、詳細な説明は省略する。
上記敵オブジェクト処理は、このように決定された1種類以上の敵オブジェクトEoを、所定のアルゴリズム(以下、敵制御アルゴリズムと称する)に従って仮想空間内に出現させたり、当該仮想空間を移動させたりする処理として行われる。より詳細には、本実施形態では、図4に一例として示すように、仮想空間の原点Oを中心とする球体のスクリーンオブジェクトが当該仮想空間に配置される。敵オブジェクト処理では、スクリーンオブジェクト内及びスクリーンオブジェクト外やこれらの境界上に、敵制御アルゴリズムに従って敵オブジェクトEoを出現させる処理が行われる。さらに、敵オブジェクト処理では、スクリーンオブジェクト内及びスクリーンオブジェクト外やこれらの境界上を移動するように敵オブジェクトEoの位置、及び姿勢を敵制御アルゴリズムに従って設定する処理が行われる。
また、上記ゲーム処理が行われる際には、敵オブジェクトEoを破壊するための弾を示す弾オブジェクトを所定のアルゴリズム(以下、弾制御アルゴリズムと称する)に従って発射させたり移動させたりするための処理も弾オブジェクト処理として行われる。弾オブジェクト処理では、操作ボタン14から出力される操作データに基づいて弾を発射する操作が行われたと判断したときに弾オブジェクトを仮想空間内の所定の出現位置に出現させる処理が行われる。また、弾オブジェクト処理では、既に発射された弾オブジェクトを所定の速度で所定の方向に移動させたりする処理も行われる。また、弾オブジェクト処理では、弾オブジェクトがいずれかの敵オブジェクトEoに命中したと判断したときに、当該敵オブジェクトEoが破壊され、消滅するように表示する処理なども行われる。
また、上記ゲーム処理が行われる際には、上記スクリーンオブジェクトに外側撮像画像Ogをテクスチャマッピングするための処理も行われる。本実施形態では、外側左撮像部23aによって撮像された画像を外側撮像画像Ogとして用いるものとする。外側左撮像部23aによって外側撮像画像Ogが撮像されると、上述したように設定された仮想カメラの撮像方向に基づいて、撮像範囲に含まれるスクリーンオブジェクトの内面の領域Nr(図4参照)が判断される。撮像範囲に含まれるスクリーンオブジェクトの領域Nrが判断されると、当該領域Nrに外側撮像画像Ogがテクスチャマッピングされる。
本実施形態では、仮想カメラを配置する処理、及び撮像範囲内のスクリーンオブジェクトに外側撮像画像Ogをテクスチャマッピングする処理が所定の処理単位時間毎にリアルタイムに繰り返される。また、外側撮像画像Ogがテクスチャマッピングされたスクリーンオブジェクトを含む仮想空間に敵オブジェクトEo、及び弾オブジェクトを必要に応じて上述したようにそれぞれ出現、及び移動させる処理も上記処理単位時間毎にリアルタイムに繰り返される。従って、上側LCD22には、まるで、外側撮像画像Ogによって示される現実空間に敵オブジェクトEoが出現し、移動しているように見える仮想空間が表示される。
また、仮想カメラの配置は、上述したようにゲーム装置10の現実空間における動きに連動するように上記処理単位毎にリアルタイムに設定される。そして、上側LCD22の中央には、図3に一例として示すように、照準画像Sgが重畳して表示される。従って、上記ゲーム処理によれば、現実空間に存在しているように表示されている敵オブジェクトEoに照準を合わせるようにゲーム装置10を動かして、所定の操作ボタンを押下して弾を発射し、破壊するゲームをユーザに提供できる。
次に、上側LCD22に表示される画像についてより詳細に説明する。本実施形態では、後述するようにゲーム装置10を大きく動かさない限り、上側LCD22には上述した立体視画像が表示される。本実施形態における立体視画像は、上述したように仮想空間内に配置され、撮像方向が設定される仮想カメラを2つ用いて生成されるものとする。仮想空間内に配置される2つの仮想カメラは、それぞれ上述した左目用画像、及び右目用画像を生成するために用いられる。仮想空間内に配置される2つの仮想カメラの一方が左目用画像を生成するための左仮想カメラとして配置され、他方が右目用画像を生成するための右仮想カメラとして配置される。
図5は、本実施形態において仮想空間内に配置される仮想カメラの一例を示す図である。本実施形態では、図5に一例として示すように、左仮想カメラHk、及び右仮想カメラMkのそれぞれが、仮想空間の原点Oからx軸の正方向及び負方向に向かって間隔Kk(以下、仮想カメラ間隔Kkと称する)の位置に移動させられ、配置される。従って、左仮想カメラHk、及び右仮想カメラMkの間隔は、仮想カメラ間隔Kkの2倍の間隔となる。また、左仮想カメラHk、及び右仮想カメラMkの撮像方向は互いに平行である。このように、互いの間隔が2Kkで撮像方向が互いに平行な位置関係の左仮想カメラHk、及び右仮想カメラMkが、上述したようにゲーム装置10の動きと連動するように、仮想空間の原点Oを中心として回転させられて配置される。そして、左仮想カメラHkで仮想空間を撮像した画像として左目用画像が生成され、右仮想カメラMkで仮想空間を撮像した画像として右目用画像が生成される。左仮想カメラHk、及び右仮想カメラMkの間隔は2Kkであるので、左目用画像、及び右目用画像は、当該間隔に対応する視差を有する画像として生成される。従って、左目用画像、及び右目用画像は互いに視差を有する立体視画像として、上側LCD22に表示される。
図6は、仮想空間を示す立体視画像を表示している上側LCD22の一例を示している。立体視画像は、仮想空間における仮想カメラの視点に対応する現実空間における最適な視点から見たときに、立体感があり、ぼやけることのない画像としてユーザに視認される。具体的には、仮想空間における右仮想カメラMkの視点に対する現実空間におけるユーザの右目の視点と、仮想空間における左仮想カメラMkの視点に対する現実空間におけるユーザの左目の視点とがそれぞれ対応するように、両目の視点に対してゲーム装置10をユーザが位置させたときに、立体感があり、ぼやけることのない画像として立体視画像が視認される。図6は、最適な視点から見たときの上側LCD22の一例を示す図である。
これに対して、立体視画像を表示している上側LCD22を前述の最適な視点以外の視点から見ると、左目用画像と右目用画像とが視差を有する異なる画像であるため、図7に一例として示すように、二重のぼやけた画像としてユーザに視認される。図7は、ユーザの視点が最適な視点となるように位置させたゲーム装置10を、図1に示すy軸を中心として反時計回りに所定量だけ回転させたときの上側LCD22を示している。図7に一例として示すように、ユーザの視点が最適な視点からずれると、立体感がなく平面的でぼやけた画像として立体視画像がユーザに視認され、ユーザに不快感を与えてしまう。特に、上記ゲーム処理では、現実空間内を移動するように表示される敵オブジェクトEoに照準画像Sgを一致させるようにゲーム装置10をユーザが反射的に大きく動かす場合が多い。従って、このようなゲーム処理をゲーム装置10で行う場合には、前述の最適な視点とユーザの視点との間にずれが生じやすく、ユーザに不快感を与える可能性が相対的に高くなる。
そこで、本実施形態では、ゲーム装置10が大きく動かされたときには、ユーザの視点が前述の最適な視点からずれたと判断し、上側LCD22に表示される画像を立体視画像から、上述した平面視画像へと切り替える。より詳細には、ゲーム装置10が大きく動かされたときには、動きの大きさに応じた仮想カメラ間隔Kkを算出して設定する。本実施形態において、ゲーム装置10の動きの大きさに応じて仮想カメラ間隔Kkが算出されるときに、この仮想カメラ間隔Kkは、後述する上限値Jtより小さくなるように算出される。仮想カメラ間隔Kkが上限値Jtより小さくなるように算出され、設定されると、左目用画像と右目用画像との視差が小さくなる。従って、左目用画像と右目用画像との差が小さくなり、前述の最適な視点とユーザの視点との間にずれが生じているときのユーザに与える不快感が低減される。特に、ゲーム装置10の動きの大きさに応じて算出された仮想カメラ間隔Kkがゼロである場合には、左目用画像と右目用画像とが同一の画像となり、上述したようにユーザに与える不快感がなくなる。
具体的には、上記ゲーム処理を行う際に、角速度センサ40によって検知されるxyz軸(図1参照)周りのそれぞれの角速度のうちいずれかの角速度が所定の角速度しきい値以上であるか否かを判断する。そして、xyz軸周りの角速度のうちいずれかの角速度が角速度しきい値以上となった場合に、ゲーム装置10が大きく動かされたと判断して、当該角速度しきい値以上となった角速度に応じた仮想カメラ間隔Kkが算出される。本実施形態では、立体視画像から平面視画像に切り替えるときの角速度と仮想カメラ間隔Kkとの関係を予め定めておくものとする。また、立体視画像から平面視画像に切り替えるときの角速度と仮想カメラ間隔Kkとの本実施形態における関係は、角速度の大きさに応じた狭さで仮想カメラ間隔Kkが算出されるのであればどのような関係を用いてもよい。角速度と仮想カメラ間隔Kkとの関係の一例としては、角速度しきい値と等しい角速度で上限値Jtの仮想カメラ間隔Kkが算出され、当該角速度よりも所定量だけ大きい角速度でゼロの仮想カメラ間隔Kkが算出されるように、角速度と仮想カメラ間隔Kkとを正比例させる関係を用いてもよい。
図5から明らかなように、より狭い仮想カメラ間隔Kkが算出されると、左仮想カメラHk、及び右仮想カメラMkの視点が近くなる。このため、左目用画像と右目用画像とは互いの視差がより小さい画像として生成され、互いの画像の差がより小さくなり、立体視画像ではない平面視画像として上側LCD22に表示される。
また、本実施形態では、上側LCD22に表示される画像を立体視画像から平面視画像に切り替えた後、ユーザの視点が前述の最適な視点に戻ったと判断したときに、平面視画像を立体視画像に再び切り替える。これにより、ユーザの視点が最適な視点に戻ったときには、立体感のある立体視画像をユーザに再び表示できる。
具体的には、上記ゲーム処理を行う際に、角速度センサ40によって検知されるそれぞれの角速度が全て前述の角速度しきい値未満となったときに、ユーザの視点が前述の最適な視点に戻ったと判断する。角速度センサ40によって検知されるそれぞれの角速度が全て角速度しきい値未満となったときには、ユーザの視点が最適な視点で固定され、ゲーム装置10をユーザ自身に対して静止させていると考えられるからである。
本実施形態では、平面視画像から立体視画像に切り替えるときには、瞬時に切り替えることなく、緩やかに切り替える。具体的には、ユーザの視点が最適な視点に戻ったと判断したときを開始タイミングとして、以下の数式に従って、左仮想カメラHk、及び右仮想カメラMkのそれぞれの仮想カメラ間隔Kkを変化させる。
Kk=(−0.5×t3)+(1.5×t)×Jt …(1)
ここで、上記数式(1)におけるtは、上記開始タイミングからの経過時間(以下、切り替え時間tと称する)である。また、上記数式(1)におけるJtは、仮想カメラ間隔Kkの所定の上限値である。上記数式(1)から明らかなように、本実施形態では、切り替え時間tが所定の上限時間となったときに、上限値Jtの仮想カメラ間隔Kkが算出される。仮想カメラ間隔Kkの上限値Jtは、ユーザの視点が最適な視点に位置しているときに最も高い立体感で立体視画像を視認できる間隔となるように予め定められているものとする。また、本実施形態では、切り替え時間tの上限時間を1秒として予め定めておくものとする。
ここで、本実施形態では、立体視画像から平面視画像に切り替えるときに、上述したように角速度に応じた仮想カメラ間隔Kkが算出され、設定される。そして、本実施形態では、角速度に応じて算出された仮想カメラ間隔Kkがどのような値であったとしても、切り替え時間tが上限時間となったときには、仮想カメラ間隔Kkが上限値Jtとなるように、当該切り替え時間tの初期値が切り替え開始時間Stとして設定される。具体的には、上記数式(1)に代入したときに、立体視画像から平面視画像に切り替えるときに算出された仮想カメラ間隔Kkが算出されるような切り替え時間tが、切り替え開始時間Stとして決定され、設定される。
平面視画像から立体視画像への切り替えを開始するときには、切り替え開始時間Stが決定し、当該切り替え開始時間Stから上限時間まで切り替え時間tの計時を開始する。切り替え時間tが上限時間になるまでに、上記数式(1)に従って、仮想カメラ間隔Kkを上限値Jtまで逐次算出して設定すれば、平面視画像から立体視画像へ緩やかに切り替えることができる。そして、平面視画像から立体視画像へ瞬時に切り替えることによって、ユーザの目の焦点の調節が遅れることに起因して、立体視画像をぼやけることのない立体感のある画像として視認できなくなることを防げる。上記ゲーム処理のように、敵オブジェクトEoが現実空間を移動しているかのように上側LCD22に表示される場合には、移動しているオブジェクトを視認できなくなることを防げる。
[メインメモリに記憶されるデータ]
次に、ゲーム装置10のCPU311の具体的な動作について説明する前に、当該CPU311がゲームプログラムを実行することに応じて、メインメモリ32及びVRAM313に記憶されるデータについて図8、及び図9を参照しながら説明する。
図8に一例として示すように、メインメモリ32には、操作データ501、外側撮像画像データ502、角速度データ503、撮像方向データ504、仮想カメラ間隔データ505、停止フラグデータ506、オブジェクトデータ507、計時フラグデータ508、切り替え時間データ509、間隔曲線データ510、切り替え開始時間データ511、仮想カメラ間隔決定データ512、及び各種プログラム601が記憶される。
操作データ501は、上述したように、所定時間に1回の割合(例えば、上記処理単位時間毎に1回)でCPU311が操作ボタン14から取得して記憶されるデータである。
外側撮像画像データ502は、上記処理単位時間毎に外側撮像部23aによって撮像された外側撮像画像Ogを示すデータである。
角速度データ503は、上記処理単位時間毎に角速度センサ40から取得されるxyz軸のそれぞれの軸周りの回転角速度を示すデータである。角速度データ503は、上記処理単位時間毎に角速度センサ40から取得され、メインメモリ32に記憶される。なお、本実施形態に係る角速度センサ40は、xyz軸の各軸を中心として、時計回りを正とし、反時計回りを負としてそれぞれの角速度を検知するものとする。従って、角速度データ503によって示される各軸周りの角速度の回転方向は、それぞれ正負の符号で示されることとなる。
撮像方向データ504は、角速度データ503によって示されるそれぞれの角速度に基づいてCPU311が算出した仮想カメラの撮像方向をそれぞれ示すデータである。具体的には、撮像方向データ504によって示されるのは、左仮想カメラHk、及び右仮想カメラMkのそれぞれの仮想空間における原点Oを中心とする仮想空間のxyz軸の各軸周りの回転角度である。撮像方向データ504によって示されるそれぞれの回転角度は、後述する初期設定処理でそれぞれゼロに設定され、左仮想カメラHk、及び右仮想カメラMkが上述した初期方向を向くように設定される。そして、撮像方向データ504によって示されるそれぞれの回転角度には、角速度データ503によって示される各軸周りの角速度が、ゲーム装置10に電源が投入されてから、上記処理単位時間毎にCPU311によって加算される。角速度センサ40によって検知されるそれぞれの角速度は、上述の説明から明らかなように、時計方向周りの角速度に正の符号が付され、反時計方向周りの角速度に負の符号が付される。従って、撮像方向データ504によって示されるそれぞれの回転角度は、ゲーム装置10に電源を投入したときをゼロとし、それぞれリアルタイムに算出される当該ゲーム装置10の各軸周りの回転角度となる。そして、左仮想カメラHk、及び右仮想カメラMkが、撮像方向データ504に基づいて配置されるときには、それぞれ仮想空間の原点Oを中心として、当該撮像方向データ504によって示されるそれぞれの回転角度だけ、当該仮想空間のxyz軸の各軸周りに回転させられる。これにより、上述したゲーム装置10の動きに連動するように左仮想カメラHk、及び右仮想カメラMkの撮像方向を算出して設定できる。
仮想カメラ間隔データ505は、左仮想カメラHk、及び右仮想カメラMkのそれぞれの仮想カメラ間隔Kkを示すデータである。
停止フラグデータ506は、ユーザの視点が前述の最適な視点であるか否かをCPU311が判断した結果を示すデータである。停止フラグデータ506は、ユーザの視点が前述の最適な視点であることをオンで示し、ユーザの視点が当該最適な視点でないことをオフで示すフラグのデータである。
オブジェクトデータ507は、上述した敵オブジェクトEo、及び弾オブジェクトに関するデータである。より詳細には、オブジェクトデータ507は、上述したようにユーザによって決定された1種類以上の敵オブジェクトEoの形状、位置、及び姿勢をそれぞれ対応付けて示すデータである。また、オブジェクトデータ507は、上述した弾オブジェクトの形状、位置、及び姿勢もそれぞれ対応付けて示す。
なお、オブジェクトデータ507によって示される敵オブジェクトEoの形状、位置、及び姿勢を対応させて示すデータは、上述したようにゲーム処理とは別に行われる敵オブジェクトEoを決定するための処理をCPU311に行わせるためのプログラムが実行されたことに応じて、当該ゲーム処理が行われる前にメインメモリ32に記憶されるものとする。このとき、敵オブジェクトEoの位置、及び姿勢は、ゼロに初期化されるものとする。オブジェクトデータ507によって示される敵オブジェクトEoの姿勢は、仮想空間におけるxyz軸のそれぞれの軸周りの回転角度で示されるものとする。また、オブジェクトデータ507によって示される弾オブジェクトの形状は、所定の形状である。そして、オブジェクトデータ507によって示される弾オブジェクトの形状は、後述するようにゲームプログラムが読み出されるときに、共に読み出されてメインメモリ32に記憶される。このとき、弾オブジェクトの位置、及び姿勢はゼロに初期化され、読み出された形状に対応させられるものとする。オブジェクトデータ507によって示される弾オブジェクトの姿勢は、仮想空間におけるxyz軸のそれぞれの軸周りの回転角度で示されるものとする。また、弾オブジェクトは、ユーザの発射操作に応じて、同一の形状の弾オブジェクトが、仮想空間内に複数存在する場合がある。この場合、仮想空間内に存在する数だけ、弾オブジェクトの所定の形状が複製され、複製されたそれぞれの形状に、位置、及び姿勢をそれぞれ対応させるデータとして、オブジェクトデータ507が更新される。
計時フラグデータ508は、上述した切り替え時間tを計時しているか否かを示すデータである。計時フラグデータ508は、切り替え時間tを計時していることをオンで示し、切り替え時間tを計時していないことをオフで示すフラグのデータである。
切り替え時間データ509は、上記切り替え時間tを示すデータである。
間隔曲線データ510は、上述したように平面視画像から立体視画像に切り替えるときに、左仮想カメラHk、及び右仮想カメラMkのそれぞれの仮想カメラ間隔Kkを切り替え時間tと対応付けて示すデータである。具体的には、本実施形態では、上記数式(1)を示すデータが、間隔曲線データ510となる。間隔曲線データ510は、後述するようにゲームプログラムがデータ保存用内部メモリ35から読み出されるときに、共に読み出されるデータである。
切り替え開始時間データ511は、上述したように決定された切り替え開始時間Stを示すデータである。
仮想カメラ間隔決定データ512は、立体視画像から平面視画像に切り替えるときの角速度と仮想カメラ間隔Kkとの上述した関係を示すデータである。仮想カメラ間隔決定データ512は、後述するようにゲームプログラムがデータ保存用内部メモリ35から読み出されるときに、共に読み出されるデータである。
各種プログラム601は、CPU311によって実行される種々のプログラムである。例えば、上述で説明したゲームプログラム等が各種プログラム601としてメインメモリ32に記憶される。また、上述した敵制御アルゴリズムや弾制御アルゴリズムなどもメインメモリ32に記憶されるゲームプログラムに含まれる。
[VRAMに記憶されるデータ]
次に、VRAM313に記憶されるデータについて説明する。図9は、VRAM313に記憶されるデータの一例を示す図である。VRAM313には、左目用画像データ701、及び右目用画像データ702が記憶される。左目用画像データ701、及び右目用画像データ702は、CPU311がGPU312に指示を与えることによって生成された画像を示し、VRAM313に描画されることによって記憶されるデータである。具体的には、左目用画像データ701は、上述した左目用画像を示すデータであり、右目用画像データ702は、上述した右目用画像を示すデータである。
[ゲーム処理]
次に、本実施形態のゲーム装置10のCPU311の具体的な動作について説明する。まず、ゲーム装置10に電源が投入されると、CPU311によってブートプログラム(図示せず)が実行され、これによりデータ保存用内部メモリ35に記憶されているゲームプログラムが読み込まれてメインメモリ32に記憶される。そして、メインメモリ32に記憶されたゲームプログラムがCPU311で実行されることによって、図10、及び図11のフローチャートに示す処理が行われる。図10、及び図11は、CPU311がゲームプログラムを実行することによって行われる上記ゲーム処理の一例を示すフローチャートである。なお、図10、及び図11では、ステップを「S」と省略して記載している。
ゲーム処理を開始すると、CPU311は、まず始めに初期設定処理をする(ステップ101)。具体的には、CPU311は、メインメモリ32に記憶されている各種フラグデータをオフに設定する。また、CPU311は、外側撮像画像データ502によって示される画像をクリアする。また、CPU311は、角速度データ503、撮像方向データ504、切り替え時間データ509、及び切り替え開始時間データ511によってそれぞれ示される値をゼロに設定する。また、CPU311は、仮想カメラ間隔データ505によって示される仮想カメラ間隔Kkを、上記上限値Jtに設定する。さらに、CPU311は、VRAM313に記憶されている画像データを全て消去する。また、CPU311は、データ保存用内部メモリ35から間隔曲線データ510、及び仮想カメラ間隔決定データ512を読み出してメインメモリ32に記憶させる。
なお、初期設定処理において、CPU311が、仮想カメラ間隔データ505によって示される仮想カメラ間隔Kkを上限値Jtに設定することにより、ゲーム処理の開始直後は、立体視画像が上側LCDに表示されることになる。また、初期設定処理において、CPU311が、撮像方向データ504によって示される値をゼロに設定することにより、当該データによって示されるそれぞれの回転角度を、上述したように、ゲーム装置10に電源を投入したときをゼロとして算出することができる。
初期設定処理を完了すると、CPU311は、上述した敵オブジェクト処理をする(ステップ105)。具体的には、CPU311は、オブジェクトデータ507によって示される1種類以上の敵オブジェクトEoの中から仮想空間に出現させる敵オブジェクトEoが存在するか否かを、敵制御アルゴリズムに従って判断する。出現させる敵オブジェクトEoが存在する場合、CPU311は、オブジェクトデータ507によって当該敵オブジェクトEoに対応させられている位置を出現位置に更新し、当該敵オブジェクトEoに対応させられている姿勢を所定の初期姿勢に更新する。また、CPU311は、敵オブジェクト処理において、既に出現させられている敵オブジェクトEoを移動させるときの位置、及び姿勢を敵制御アルゴリズムに従って決定し、オブジェクトデータ507によって当該敵オブジェクトEoに対応させられている位置、及び姿勢を決定した位置に更新する。
敵オブジェクト処理を完了すると、CPU311は、操作データ501を参照し(ステップ110)、操作ボタン14の入力状況を把握する。
操作データ501を参照すると、CPU311は、上述した弾オブジェクト処理をする(ステップ115)。具体的には、CPU311は、ステップ110で参照した操作データ501に基づいて、弾を発射する操作がされたか否かを判断する。弾を発射する操作がされた場合、CPU311は、オブジェクトデータ507によって示される弾オブジェクトの形状に対応させられている位置を所定の出現位置に更新する。また、CPU311は、弾オブジェクト処理において、既に発射された弾オブジェクトがある場合、弾制御アルゴリズムに従って、当該弾オブジェクトを移動させるときの位置を決定する。CPU311は、弾オブジェクトを移動させるときの位置を決定すると、オブジェクトデータ507によって当該弾オブジェクトの形状に対応させられている位置を、決定した位置に更新する。また、弾オブジェクトを移動させるときの位置を決定すると、決定した位置と、敵オブジェクト処理で決定したそれぞれの敵オブジェクトEoの位置とに基づいて、仮想空間内に存在するいずれかの敵オブジェクトEoに命中した弾オブジェクトがあるか否かも判断する。CPU311は、弾オブジェクトが命中した敵オブジェクトEoがあると判断したとき、当該敵オブジェクトEoが破壊され、消滅させられるように表示する設定をする。
弾オブジェクト処理を完了すると、CPU311は、外側撮像画像Ogを撮像する(ステップ120)。具体的には、CPU311は、外側左撮像部23aに外側撮像画像Ogを撮像する指示を与える。そして、指示に応じて外側左撮像部23aによって撮像された外側撮像画像Ogを取得し、メインメモリ32に記憶されている外側撮像画像データ502を、取得した外側撮像画像Ogを示すように更新する。
外側撮像画像Ogを撮像すると、CPU311は、メインメモリ32に記憶されている角速度データ503を参照する(ステップ125)。
角速度データ503を参照すると、CPU311は、ゲーム装置10が上述したように大きく動かされたか否かを判断する(ステップ130)。具体的には、CPU311は、参照した角速度データ503によって示される各軸周りの角速度のうち、少なくともいずれか1つの角速度が角速度しきい値を超えているか否かを判断する。角速度データ503によって示されるそれぞれの角速度のうち、少なくともいずれか1つの角速度が角速度しきい値を超えている場合、CPU311は、ゲーム装置10が大きく動かされたと判断する(ステップ130でYes)。一方、角速度データ503によって示される全ての角速度が角速度しきい値以下である場合、CPU311は、ゲーム装置10が大きく動かされていないと判断する(ステップ130でNo)。
CPU311は、ゲーム装置10が大きく動かされたと判断した場合(ステップ130でYes)、停止フラグがオフであるか否かを判断する(ステップ145)。具体的には、CPU311は、メインメモリ32に記憶されている停止フラグデータ506を参照し、オフが示されているか否かを判断する。CPU311は、停止フラグデータ506によって、オフが示されている場合、停止フラグがオフであると判断する(ステップ145でYes)。一方、CPU311は、停止フラグデータ506によって、オフが示されていない場合(オンが示されている場合)、停止フラグがオフでないと判断する(ステップ145でNo)。
CPU311は、停止フラグがオフでないと判断した場合(ステップ145でNo)、停止フラグをオフにする(ステップ150)。具体的には、CPU311は、メインメモリ32に記憶されている停止フラグデータ506を、オフを示すように更新する。これにより、CPU311は、ゲーム装置10が大きく動かされたと判断したときに、ユーザの視点が最適な視点ではないことをメインメモリ32に記憶することになる。
CPU311は、停止フラグをオフにする(ステップ150)、又は停止フラグがオフであると判断した場合(ステップ145でYes)、上述したように仮想カメラ間隔Kkを設定する(ステップ155)。具体的には、CPU311は、メインメモリ32に記憶されている仮想カメラ間隔決定データ512を参照し、ステップ125で参照した角速度データ503によって示される角速度に応じた仮想カメラ間隔Kkを決定する。CPU311は、仮想カメラ間隔Kkを決定すると、メインメモリ32に記憶されている仮想カメラ間隔データ505を、決定した仮想カメラ間隔Kkを示すように更新する。これにより、CPU311は、左仮想カメラHk及び右仮想カメラMkの仮想カメラ間隔Kkを、ゲーム装置10が大きく動かされたと判断した場合に瞬時に設定することができる。
一方、CPU311は、ゲーム装置10が大きく動かされていないと判断した場合(ステップ130でNo)、停止フラグがオンであるか否かを判断する(ステップ135)。具体的には、CPU311は、メインメモリ32に記憶されている停止フラグデータ506を参照し、オンが示されているか否かを判断する。CPU311は、停止フラグデータ506によって、オンが示されている場合、停止フラグがオンであると判断する(ステップ135でYes)。一方、CPU311は、停止フラグデータ506によって、オンが示されていない場合、停止フラグがオンでない(オフである)と判断する(ステップ135でNo)。
CPU311は、停止フラグがオンでないと判断したとき(ステップ135でNo)、停止フラグをオンにする(ステップ140)。具体的には、CPU311は、メインメモリ32に記憶されている停止フラグデータ506を、オンを示すように更新する。これにより、CPU311は、ゲーム装置10が大きく動かされていないと判断したときに、ユーザの視点が最適な視点であることをメインメモリ32に記憶することになる。
CPU311は、停止フラグがオンであると判断したとき(ステップ135でYes)、又は停止フラグをオンにしたとき(ステップ140)、計時フラグがオンであるか否かを判断する(ステップ170)。具体的には、CPU311は、メインメモリ32に記憶されている計時フラグデータ508を参照し、オンが示されているか否かを判断する。CPU311は、計時フラグデータ508によって、オンが示されている場合、計時モードフラグがオンであると判断する(ステップ170でYes)。一方、CPU311は、計時フラグデータ508によって、オフが示されている場合、計時モードフラグがオンでない(オフである)と判断する(ステップ170でNo)。
CPU311は、計時モードフラグがオンでないと判断したとき(ステップ170でNo)、切り替え開始時間Stを設定する(ステップ175)。具体的には、CPU311は、メインメモリ32に記憶されている仮想カメラ間隔データ505によって示される仮想カメラ間隔Kkが、間隔曲線データ510によって示される上記数式(1)で算出されるような切り替え時間tを逆算して、切り替え開始時間Stとして決定する。CPU311は、切り替え開始時間Stを決定すると、決定した切り替え開始時間Stを示すように切り替え開始時間データ511を更新して設定する。
CPU311は、切り替え開始時間Stを設定すると、切り替え時間tの計時を、切り替え開始時間Stから開始する(ステップ177)。これにより、CPU311は、平面視画像から立体視画像に切り替える場合において、上述した切り替え時間tの計時を開始していないときに、計時を開始することができる。
CPU311は、切り替え時間tの計時を開始すると、計時フラグをオンにする(ステップ180)。具体的には、CPU311は、メインメモリ32に記憶されている計時フラグデータ508を、オンを示すように更新する。これにより、CPU311は、平面視画像から立体視画像への切り替えを開始して、切り替え時間tを計時中であることをメインメモリ32に記憶させることができる。
CPU311は、計時フラグがオンであると判断したとき(ステップ170でYes)、又は計時フラグをオンにする(ステップ180)と、切り替え時間tを計時する(ステップ185)。具体的には、CPU311は、RTC38によってカウントされる時間に基づいて、切り替え開始時間Stからの経過時間を示すように、切り替え時間データ509を更新する。
CPU311は、切り替え時間tを計時すると、切り替え時間tが所定の上限時間を経過したか否かを判断する(ステップ190)。具体的には、CPU311は、メインメモリ32に記憶されている切り替え時間データ509を参照し、当該切り替え時間データ509によって示される切り替え時間tが所定の上限時間を経過しているか否かを判断する。
CPU311は、切り替え時間tが所定の上限時間を経過していないと判断したとき(ステップ190でNo)、仮想カメラ間隔Kkを計算する(ステップ195)。具体的には、CPU311は、メインメモリ32に記憶されている間隔曲線データ510によって示される数式と、切り替え時間データ509によって示される切り替え時間tとを参照する。さらに、CPU311は、参照した数式に、参照した切り替え時間tを代入して、仮想カメラ間隔Kkを計算する。そして、CPU311は、計算した仮想カメラ間隔Kkを示すように、仮想カメラ間隔データ595を更新する。これにより、CPU311は、切り替え時間tを計時中であって、平面視画像から立体視画像への切り替えの途中であるときに、仮想カメラ間隔Kkを上記数式(1)に基づいて緩やかに変化するように算出できる。
一方、CPU311は、切り替え時間tが所定の時間を経過したと判断すると(ステップ190でYes)、計時フラグをオフにする(ステップ200)。具体的には、CPU311は、メインメモリ32に記憶されている計時フラグデータ508を、オフを示すように更新する。これにより、CPU311は、平面視画像から立体視画像への切り替えを開始してから、切り替え時間tの計時を完了したことをメインメモリ32に記憶させることができる。
CPU311は、計時フラグをオフにすると、切り替え時間tをゼロにリセットする(ステップ205)。具体的には、CPU311は、メインメモリ32に記憶されている切り替え時間データ509を、ゼロの切り替え時間tを示すように更新して初期化する。
CPU311は、仮想カメラ間隔Kkを設定する(ステップ155)、仮想カメラ間隔Kkを計算する(ステップ195)、又は切り替え時間tをゼロにリセットする(ステップ205)と、左仮想カメラHkを仮想空間に配置する(ステップ215)。具体的には、CPU311は、ステップ125で参照した角速度データ503によって示される各軸周りの角速度を、撮像方向データ504によって示される各軸周りの回転角度にそれぞれ加算して、撮像方向データ504を更新する。撮像方向データ504を更新すると、CPU311は、仮想空間の原点Oから仮想カメラ間隔Kkだけx軸の負方向に左仮想カメラHkを移動させる。そして、CPU311は、移動させた左仮想カメラHkを、更新後の撮像方向データ504によって示される各軸周りの回転角度だけ、仮想空間の原点Oを中心として回転させて、配置する。これにより、CPU311は、上述したように左仮想カメラHkをゲーム装置10の動きに連動させて配置することができる。
CPU311は、左仮想カメラHkを配置すると、右仮想カメラMkを配置する(ステップ220)。具体的には、CPU311は、ステップ125で参照した角速度データ503によって示される各軸周りの角速度を、撮像方向データ504によって示される各軸周りの回転角度にそれぞれ加算して、撮像方向データ504を更新する。撮像方向データ504を更新すると、CPU311は、仮想空間の原点Oから仮想カメラ間隔Kkだけx軸の正方向に右仮想カメラMkを移動させる。そして、CPU311は、移動させた右仮想カメラMkを、更新後の撮像方向データ504によって示される各軸周りの回転角度だけ、仮想空間の原点Oを中心として回転させて、配置する。これにより、CPU311は、上述したように右仮想カメラMkをゲーム装置10の動きに連動させて配置することができる。
なお、CPU311が、仮想カメラ間隔Kkをゼロにリセットした後(ステップ145)、左仮想カメラHk、及び右仮想カメラMkを配置した場合(ステップ215、ステップ220)、左仮想カメラHk、及び右仮想カメラMkを上述したように同一の視点にすることができる。また、CPU311が、仮想カメラ間隔Kkを計算した後(ステップ195)、左仮想カメラHk、及び右仮想カメラMkを配置した場合(ステップ215、ステップ220)、左仮想カメラHk、及び右仮想カメラMkの間隔を緩やかに増加させることができる。また、CPU311が、切り替え時間tが所定の時間を経過したと判断した後(ステップ190でYes)、左仮想カメラHk、及び右仮想カメラMkを配置した場合(ステップ215、ステップ220)、上限値Jt、すなわち、初期設定処理で設定した仮想カメラ間隔Kkで再び配置することができる。
CPU311は、右仮想カメラMkを配置すると、左目用画像、及び右目用画像を生成する(ステップ225)。具体的には、CPU311は、敵オブジェクト処理でそれぞれ設定した位置、及び姿勢で敵オブジェクトEoを仮想空間に配置する。また、CPU311は、弾オブジェクト処理でそれぞれ設定した位置に弾オブジェクトを仮想空間内に配置する。また、CPU311は、左仮想カメラHkの撮像方向に基づいて、上述したようにスクリーンオブジェクトの領域Nrを判断し、ステップ120で撮像した外側撮像画像Ogをテクスチャマッピングする。次に、CPU311は、上述したように配置した左仮想カメラHkで、これらのオブジェクトが存在する仮想空間を撮像する処理をする。このとき、弾オブジェクトが命中したと判断された敵オブジェクトEoは、破壊され、消滅して表示されるように処理された上で撮像されるものとする。左仮想カメラHkで仮想空間を撮像する処理をすると、CPU311は、左仮想カメラHkで撮像した画像を左目用画像としてVRAM313に描画することによって、左目用画像データ701を更新する。CPU311は、左目用画像データ701を更新すると、右仮想カメラHkの撮像方向に基づいて、上述したようにスクリーンオブジェクトの領域Nrを判断し、ステップ120で撮像した外側撮像画像Ogをテクスチャマッピングする。次に、CPU311は、上述したように配置した右仮想カメラMkで、上述したように配置した敵オブジェクトEo、弾オブジェクト、及びスクリーンオブジェクトが存在する仮想空間を撮像する処理をする。このとき、弾オブジェクトが命中したと判断された敵オブジェクトEoは、破壊され、消滅して表示されるように処理された上で撮像されるものとする。右仮想カメラMkで仮想空間を撮像する処理をすると、CPU311は、右仮想カメラMkで撮像した画像を右目用画像としてVRAM313に描画することによって、右目用画像データ702を更新する。
CPU311は、左目用画像、及び右目用画像を生成すると、生成したこれらの画像を上側LCD22に表示させる(ステップ227)。具体的には、CPU311は、VRAM313に描画された左目用画像、及び右目用画像を出力させる。VRAM313から出力された左目用画像、及び右目用画像は、それぞれ上述したようにLCDコントローラによって読み込まれ、上側LCD22に表示される。VRAM313に描画された左目用画像、及び右目用画像は、左仮想カメラHk、及び右仮想カメラMkの仮想カメラ間隔Kkが上限値Jtでない場合には、上述したように平面視画像として上側LCD22に表示される。一方、VRAM313に描画された左目用画像、及び右目用画像は、左仮想カメラHk、及び右仮想カメラMkの仮想カメラ間隔Kkが上限値Jtである場合には、上述したように立体視画像として上側LCD22に表示される。
CPU311は、左目用画像、及び右目用画像を上側LCD22に表示させると、メインメモリ32に記憶されている操作データ501を参照する(ステップ230)。
CPU311は、操作データ501を参照すると、ユーザによってゲーム処理を終了する操作がされたか否かを判断する(ステップ230)。具体的には、CPU311は、参照した操作データ501によって示される操作ボタン14の操作状態に基づいて、ユーザによってゲーム処理を終了する操作がされたか否かを判断する。
CPU311は、ユーザによってゲーム処理を終了する操作がされたと判断したとき(ステップ235でYes)、ゲームプログラムの実行を終了する。一方、CPU311は、ユーザによってゲーム処理を終了する操作がされていないと判断したとき(ステップ235でNo)、ステップ101から処理を繰り返す。
以上が、本発明の第1の実施形態に係るゲーム装置10の説明である。本実施形態に係るゲーム装置10によれば、大きく動かされたことによって、ユーザの視点と上記最適な視点との間にずれが生じたときにユーザに与える不快感を低減できる。なお、図11、及び図12に示した本実施形態のゲーム処理は、上述した処理時間単位毎に繰り返されるものとする。
(第2の実施形態)
次に、本発明の実施形態の他の一例(第2の実施形態)に係るゲーム装置について説明する。第1の実施形態に係るゲーム装置10では、xyz軸(図1参照)の各軸周りの角速度のうちいずれかの角速度が角速度しきい値以上となったときに平面視画像を表示するものとした。これに対して、第2の実施形態では、ゲーム装置10が重力方向の軸周りに回転するときの回転角度に応じて仮想カメラ間隔Kkを制御し、立体視画像と平面視画像とを切り替える。
[情報処理の概要]
以下、本実施形態における情報処理の概要について図12〜図15を参照しながら説明する。本実施形態においても、第1の実施形態と同様に情報処理の一例としてゲーム処理がゲーム装置10によって行われるものとする。第1の実施形態で説明したゲーム処理の際に行われる処理のうち、敵オブジェクト処理、弾オブジェクト処理、スクリーンオブジェクトに外側撮像画像Ogをテクスチャマッピングする処理は、本実施形態においても同様に行われるものとする。第1の実施形態で説明したゲーム処理の際に行われる処理のうち、第1の実施形態とは異なる形態で、仮想カメラを配置する処理が、本実施形態において行われる。
本実施形態では仮想カメラを配置する処理をする際に、まず、加速度センサ39が検知した加速度に基づいて、ゲーム装置10のxyz軸(図1参照)の重力方向に対する傾き(以下、単にゲーム装置10の傾きと称する)を算出する処理をする。ゲーム装置10の傾きを算出する手法としては、加速度センサ39から出力される加速度に基づいて、各軸の加速度に対して処理を施すことによって算出する手法であれば、任意の周知の手法を用いてよい。例えば、加速度センサ39が静的、或いは動的のいずれかを前提の状態とする場合に、加速度センサ39の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するゲーム装置10の傾きを知ることが可能である。
また、本実施形態では、第1の実施形態で説明したように角速度センサ40によって検知されたゲーム装置10の各軸周りの角速度に基づいて仮想カメラの撮像方向を設定する処理もする。ここで、仮想カメラの撮像方向は、第1の実施形態で説明した撮像方向データ504によって示される。第1の実施形態で説明したように、撮像方向データ504によって示されるそれぞれの回転角度は、ゲーム装置10に電源を投入したときをゼロとし、それぞれリアルタイムに算出される当該ゲーム装置10の各軸周りの回転角度となる。
本実施形態では、上述したゲーム装置10の傾きと、ゲーム装置10の各軸周りの回転角度とに基づいて、ゲーム装置10の重力方向軸周りの回転角度を水平回転角度Skとして算出する。ゲーム装置10の傾きと、ゲーム装置10の各軸周りの回転角度とに基づいて、水平回転角度Skを算出するための手法は、任意の周知の手法を用いてよい。例えば、ゲーム装置10の各軸(xyz軸)からなる座標系、及び仮想空間の各軸(xyz軸)からなる座標系とは異なる現実空間における座標系(xyz軸)を設定する手法を用いてもよい。現実空間における座標系の一例としては、重力方向をz軸とし、当該z軸を垂線とする水平面をx−y平面とする座標系が挙げられる。そして、ゲーム装置10の傾きに基づいて、ゲーム装置10の各軸周りの回転角度を、現実空間におけるxyz軸の各軸周りの回転角度に変換する手法を用いてもよい。この場合、現実空間における座標系として設定した座標系のz軸周りの回転角度が、水平回転角度Skとなる。
本実施形態では、上述したように算出した水平回転角度Skに応じて、仮想カメラ間隔Kkを決定する。図12は、本実施形態における水平回転角度Skと仮想カメラ間隔Kkとの関係の一例を示す図である。本実施形態では、図12に一例として示すように、水平回転角度Skが0°±22.5°の間で、水平回転角度Skの絶対値に比例するように、上限値Jtから当該上限値Jtの20%まで仮想カメラ間隔Kkを変化させるものとする。
図13、及び図14は、鉛直方向に見下ろしたゲーム装置10のユーザをそれぞれ模式的に示す図である。図13、及び図14にそれぞれ示すユーザは着座しているものとする。例えば、図13に示す状態でゲーム装置10にゲーム処理を開始させたユーザが、第1の実施形態で説明したように敵オブジェクトEoを狙うために、図14に示すようにゲーム装置10を把持しながら上体をひねった場合を想定する。この場合、図14に一例として示すように、水平方向に回転させたゲーム装置10の回転角度に完全に一致するように頭部を必ずしも向けられない場合が生じる。図14に示す一例では、ゲーム装置10の水平回転角度Skと頭部正面方向との間にΔθのずれが生じている。
図14に一例として示す場合には、第1の実施形態で説明したように、ユーザの視点が最適な視点からずれることとなる。従って、図7を例に挙げて説明したように、上側LCD22に表示されている立体視画像がぼやけてユーザに視認される。また、ゲーム装置10が水平方向に大きく回転するほど(水平回転角度Skの絶対値が大きくなるほど)、頭部の向きとのずれが大きくなりやすい。従って、本実施形態では、図12に一例として示すように、水平回転角度Skの絶対値に比例するように仮想カメラ間隔Kkを変化させる。これにより、ユーザがゲーム装置10を水平方向に回転させてずれが大きくなるのに応じて、立体視画像を平面視画像に緩やかに切り替えられる。そして、水平方向の回転角度の大きさに応じて、ユーザに与える不快感を低減できる。
図15は、図12に一例として示す関係と、図13に示す模式図とを対応させて示す図である。図15に一例として示すように、本実施形態では、ユーザがゲーム装置10を正面から水平回転角度Skが22.5°となるように正方向に回転させたときに、仮想カメラ間隔Kkを上限値Jtから、当該上限値Jtの20%の間隔まで比例するように減少させる。また、本実施形態では、ユーザがゲーム装置10を正面から水平回転角度Skが-22.5°となるように負方向に回転させたときに、仮想カメラ間隔Kkを上限値Jtから、当該上限値Jtの20%の間隔まで比例するように減少させる。さらに、本実施形態では、水平回転角度Skが±22.5°を超える範囲では、仮想カメラ間隔Kkを上限値Jtの20%で一定にする(図15に示す斜線部分)。すなわち、本実施形態では、仮想カメラ間隔Kkの上限値Jtの20%の間隔を下限値とする。
なお、立体視画像は、ゲーム装置10における水平方向(図1のx軸方向)の視差を有する左目用画像、及び右目用画像を最適な視点とは異なる視点から視認することにより、ぼやけてユーザに視認される。従って、本実施形態では、垂直方向など水平方向とは異なる方向へのユーザの視点と最適な視点とのずれは考慮せずに、水平方向のずれのみを考慮し、水平回転角度Skのみに基づいて仮想カメラ間隔Kkを決定するものとする。
[メインメモリに記憶されるデータ]
次に、ゲーム装置10のCPU311の具体的な動作について説明する前に、当該CPU311が、本実施形態に係るゲームプログラムを実行することに応じて、メインメモリ32、及びVRAM313に記憶されるデータについて図16を参照しながら説明する。
図16に一例として示すように、メインメモリ32には、操作データ501、外側撮像画像データ502、角速度データ503、撮像方向データ504、仮想カメラ間隔データ505、オブジェクトデータ507、間隔曲線データ513、水平回転角度データ514、傾きデータ515、加速度データ516、及び各種プログラム801が記憶される。なお、図16に示すデータ、及びプログラムのうち、第1の実施形態と同一のものについては、同一の参照符号を付しており、これらについては説明を省略する。
間隔曲線データ513は、第1の実施形態と同様に、平面視画像から立体視画像に切り替えるときに、左仮想カメラHk、及び右仮想カメラMkのそれぞれの仮想カメラ間隔Kkを切り替え時間tと対応させて示すデータである。しかしながら、本実施形態の間隔曲線データ513は、第1の実施形態の間隔曲線データ510とは異なり、図12に一例として示すように水平回転角度Skと仮想カメラ間隔Kkとを対応させて示すデータとなる。間隔曲線データ513は、後述するようにゲームプログラムがデータ保存用内部メモリ35から読み出されるときに、共に読み出されるデータである。
水平回転角度データ514は、上述したようにゲーム装置10の現実空間における水平方向の回転角度としてCPU311が算出した水平回転角度Skを示すデータである。
傾きデータ515は、加速度センサ39が検知した加速度に基づいて、CPU311が算出したゲーム装置10の各軸(図1参照)の重力方向に対する傾きを示すデータである。
加速度データ516は、上記処理単位時間毎に加速度センサ39から取得されるxyz軸のそれぞれの軸方向の加速度を示すデータである。加速度データ516は、上記処理単位時間毎に加速度センサ39から取得され、メインメモリ32に記憶される。
各種プログラム801は、CPU311によって実行される種々のプログラムである。例えば、上述で説明した本実施形態に係るゲーム処理をCPU311に行わせるゲームプログラム等が各種プログラム801としてメインメモリ32に記憶される。また、第1の実施形態で説明した敵制御アルゴリズムや弾制御アルゴリズムなどもメインメモリ32に記憶されるゲームプログラムに含まれる。
[VRAMに記憶されるデータ]
本実施形態においてVRAM313に記憶されるデータは、第1の実施形態で説明した左目用画像データ701、及び右目用画像データ702であるので、説明を省略する。
[ゲーム処理]
次に、本実施形態のゲーム装置10のCPU311の具体的な動作について説明する。まず、ゲーム装置10に電源が投入されると、CPU311によってブートプログラム(図示せず)が実行され、これによりデータ保存用内部メモリ35に記憶されているゲームプログラムが読み込まれてメインメモリ32に記憶される。そして、メインメモリ32に記憶されたゲームプログラムがCPU311で実行されることによって、図17のフローチャートに示す処理が行われる。図17は、CPU311がゲームプログラムを実行することによって行われるゲーム処理の一例を示すフローチャートである。なお、図17では、ステップを「S」と省略して記載している。また、図17に示す処理のうち第1の実施形態のゲーム処理のフローチャートに示す処理と同一の処理については、同一の参照符号を付し、詳細な説明を省略するものとする。
ゲーム処理を開始すると、CPU311は、まず始めに初期設定処理をする(ステップ301)。具体的には、CPU311は、外側撮像画像データ502によって示される画像をクリアする。また、CPU311は、角速度データ503、撮像方向データ504、水平回転角度データ514、及び傾きデータ515によってそれぞれ示される値をゼロに設定する。また、CPU311は、仮想カメラ間隔データ505によって示される仮想カメラ間隔Kkを、上記上限値Jtに設定する。さらに、CPU311は、VRAM313に記憶されているデータを全て消去する。また、CPU311は、データ保存用内部メモリ510から間隔曲線データ513を読み出してメインメモリ32に記憶させる。
なお、初期設定処理において、CPU311が、仮想カメラ間隔データ505によって示される仮想カメラ間隔Kkを上限値Jtに設定することにより、ゲーム処理の開始直後は、立体視画像が上側LCDに表示されることになる。また、初期設定処理において、CPU311が、撮像方向データ504によって示される値をゼロに設定することにより、当該データによって示されるそれぞれの回転角度を、上述したように、ゲーム装置10に電源を投入したときをゼロとして算出することができる。また、上述した水平回転角度Skも、撮像方向データ504によって示されるそれぞれの回転角度を上述したように変換した角度である。従って、撮像方向データ504によって示される回転角度と同様に、水平回転角度Skも、電源を投入したときの基準方向をゼロとして算出される。
CPU311は、初期設定処理をすると、第1の実施形態と同様に、敵オブジェクト処理から外側撮像画像Ogを撮像する処理までをする(ステップ105〜ステップ120)。
外側撮像画像Ogを撮像すると、CU311は、メインメモリ32に記憶されている加速度データ516を参照する(ステップ305)。
CPU311は、加速度データ516を参照すると、ゲーム装置10の傾きを算出する(ステップ310)。具体的には、CPU311は、参照した加速度データ516によって示される各軸方向の加速度に基づいて、ゲーム装置10の各軸(図1参照)の重力方向に対する傾きを上述で説明したように算出する。CPU311は、ゲーム装置10の傾きを算出すると、算出した傾きを示すように傾きデータ515を更新する。
CPU311は、ゲーム装置10の傾きを算出すると、第1の実施形態と同様にメインメモリ32に記憶されている角速度データ503を参照する(ステップ125)。
CPU311は、角速度データ503を参照すると、仮想カメラの撮像方向を算出する(ステップ315)。具体的には、CPU311は、ステップ125で参照した角速度データ503によって示される各軸周りの角速度を、撮像方向データ504によって示される各軸周りの回転角度にそれぞれ加算して、撮像方向データ504を更新する。
CPU311は、仮想カメラの撮像方向を算出すると、水平回転角度Skを算出する(ステップ320)。具体的には、CPU311は、傾きデータ515によって示される傾きと、撮像方向データ504によって示されるそれぞれの回転角度とに基づいて、上述で説明したように水平回転角度Skを算出する。CPU311は、水平回転角度Skを算出すると、算出した水平回転角度Skを示すように水平回転角度データ514を更新する。
CPU311は、水平回転角度Skを算出すると、仮想カメラ間隔Kkを決定する(ステップ325)。具体的には、CPU311は、メインメモリ32に記憶されている間隔曲線データ513と水平回転角度データ514とを参照する。CPU311は、参照した間隔曲線データ513によって示される関係(本実施形態では図12に示す関係)を用いて、参照した水平回転角度データ514によって示される水平回転角度Skに対応する仮想カメラ間隔Kkを判断して決定する。CPU311は、仮想カメラ間隔Kkを決定すると、決定した仮想カメラ間隔Kkを示すように仮想カメラ間隔データ505を更新する。
CPU311は、仮想カメラ間隔Kkを決定すると、左仮想カメラHkを仮想空間に配置する(ステップ330)。具体的には、CPU311は、仮想カメラ間隔データ505によって示される仮想カメラ間隔Kkだけ仮想空間の原点Oからx軸の負方向に左仮想カメラHkを移動させる。そして、CPU311は、移動させた左仮想カメラHkを、撮像方向データ504によって示される各軸周りの回転角度だけ、仮想空間の原点Oを中心として回転させて、配置する。これにより、CPU311は、左仮想カメラHkをゲーム装置10の動きに連動させて配置することができる。
CPU311は、左仮想カメラHkを仮想空間に配置すると、右仮想カメラMkを仮想空間に配置する(ステップ335)。具体的には、CPU311は、仮想カメラ間隔データ505によって示される仮想カメラ間隔Kkだけ仮想空間の原点Oからx軸の正方向に右仮想カメラMkを移動させる。そして、CPU311は、移動させた右仮想カメラMkを、撮像方向データ504によって示される各軸周りの回転角度だけ、仮想空間の原点Oを中心として回転させて、配置する。これにより、CPU311は、右仮想カメラMkをゲーム装置10の動きに連動させて配置することができる。
CPU311は、左仮想カメラHk、及び右仮想カメラMkを配置すると、左目用画像、及び右目用画像を第1の実施形態と同様に生成し(ステップ225)、同じく第1の実施形態と同様に上側LCD22に表示させる(ステップ227)。
CPU311は、左目用画像、及び右目用画像を上側LCD22に表示させると、第1の実施形態と同様に、メインメモリ32に記憶されている操作データ501を参照し、ユーザによってゲーム処理を終了する操作がされたか否かを判断する(ステップ230〜ステップ235)。CPU311は、第1の実施形態と同様に、ユーザによってゲーム処理を終了する操作がされたと判断したとき(ステップ235でYes)、ゲームプログラムの実行を終了する。一方、CPU311は、第1の実施形態と同様に、ユーザによってゲーム処理を終了する操作がされていないと判断したとき(ステップ235でNo)、ステップ301から処理を繰り返す。
以上が、本発明の第2の実施形態に係るゲーム装置10の説明である。本実施形態に係るゲーム装置10によれば、ユーザがゲーム装置10を水平方向に回転させることによってユーザの視点と最適な視点とのずれの大きさに応じて、ユーザに与える不快感を低減できる。なお、図17に示した本実施形態のゲーム処理は、上述した処理時間単位毎に繰り返されるものとする。
なお、第2の実施形態では、水平回転角度Skが±22.5°の所定値となったときに上限値Jtの20%の下限値となる場合について説明したが、当該所定値は任意の角度であってよい。また、当該下限値は、上限値Jtの20%の値に限らず、他の任意の値であってもよい。
また、第2の実施形態では、重力方向軸周りにゲーム装置10を回転させたときの水平回転角度Skに応じて、仮想カメラ間隔Kkを緩やかに切り替えるものとした。しかしながら、他の一実施形態では、図18に一例として示すように、現実空間における重力方向軸、及び水平方向軸とからなる平面の垂線方向軸Go周りにゲーム装置10を回転させたときの回転角度θに応じて、仮想カメラ間隔Kkを緩やかに切り替えてもよい。この場合、例えば、図12に一例として示す関係における水平回転角度Skと仮想カメラ間隔Kkと同じ関係や、他の任意の関係を予め定めて用い、回転角度θに対応する仮想カメラ間隔Kkを設定するようにしてもよい。他の任意の関係の一例としては、例えば、垂線方向軸Go周りの回転角度θがゼロから90°回転させたとき(すなわち、ゲーム装置10を図1のz軸周りに90°回転させて縦持ちしたとき)に、仮想カメラ間隔Kkが上限値Jtから当該上限値の0%(すなわち、仮想カメラ間隔Kkがゼロ)まで、比例するように減少させる関係を用いてもよい。
立体視画像は、第2の実施形態で説明したように、ゲーム装置10における水平方向(図1のx軸方向)の視差を有する左目用画像、及び右目用画像を最適な視点から視認することにより、立体画像として視認される。従って、図18に一例として示すように、垂線方向軸Go周りにゲーム装置10を回転させたときには、立体視画像の視差の方向と、ユーザの両目の視差の方向との間にずれが生じ、立体視画像はぼやけてユーザに視認されることとなる。そこで、上述したように、垂線方向軸Go周りにゲーム装置10を回転させたときの回転角度θに応じて、仮想カメラ間隔Kkを変化させることにより、最適な視点とユーザの視点とにねじれが生じるときにも、第2の実施形態と同様に、ユーザに与える不快感を低減できる。
また、ユーザに与える不快感を低減できるのであれば、重力方向軸周り、又は前述の垂線方向軸Go周りに限らず、任意の所定の方向軸周りの回転角度を従来周知の手法で算出し、算出した回転角度に応じて、仮想カメラ間隔Kkを変化させてもよい。
また、例えば、第2の実施形態で説明したように水平回転角度Skに応じて仮想カメラ間隔Kkを徐々に変化させる処理をしている場合において、第1の実施形態で説明したようにゲーム装置10が大きく動かされた場合には、仮想カメラ間隔Kkを徐々に変化させる処理を中止して、平面視表示に瞬時に切り替えてもよい。これにより、第2の実施形態においても、第1の実施形態と同様にユーザに与える不快感を低減できる。また、このように第1の実施形態と第2の実施形態とを組み合わせるだけでなく、上述した垂線方向軸Go周りの回転角度θに応じて仮想カメラ間隔Kkを変化させる処理をさらに組み合わせてもよい。
また、例えば、第2の実施形態で説明したように水平回転角度Skに応じて仮想カメラ間隔Kkを徐々に変化させる処理をしている場合において、第1の実施形態で説明したようにゲーム装置10が大きく動かされた場合には、仮想カメラ間隔Kkを徐々に変化させる処理を中止して、平面視表示に瞬時に切り替えた後、当該処理を再開してもよい。より詳細には、仮想カメラ間隔Kkを徐々に変化させる処理を中止した後、角速度センサ40によって検知される各軸周りの角速度が全て角速度しきい値未満となった場合に、第2の実施形態で説明した仮想カメラ間隔Kkを徐々に変化させる処理を再開してもよい。再開するときの仮想カメラ間隔Kkは、中止したときの仮想カメラ間隔Kkであってもよいし、上限値Jtの仮想カメラ間隔Kkであってもよい。上限値Jtの仮想カメラ間隔Kkから再開する場合には、再開するときに水平回転角度Skをゼロにリセットする必要がある。すなわち、再開するときの方向を基準方向として、当該基準方向からの回転角度を水平回転角度Skとして算出する必要がある。また、例えば、ゲーム装置10の動きに連動する方向や位置にプレイヤキャラクタを仮想空間内で移動させるような上記ゲーム処理とは異なるゲーム処理をしているときに、このような基準方向の設定を任意のタイミングで行ってもよい。これにより、例えば、プレイヤキャラクタを正しい方向に進めているときなど、任意の状況でユーザに与える不快感を低減することができる。
また、上述の説明では、平面視画像と立体視画像とを切り替えるために、仮想カメラ間隔Kkを変化させるものとした。しかしながら、平面視画像と立体視画像とを切り替えられるのであれば、例えば、左目用画像、及び右目用画像を生成するためのいずれか一方の仮想カメラの視点と注視点とを結ぶ直線と、他方の仮想カメラの視点と当該注視点とを結ぶ直線とがなす角度など、立体視画像を立体視するときの視差に関係するパラメータであれば、仮想カメラ間隔Kkの代わりに任意のパラメータを上述したように変化させてもよい。
また、第1の実施形態では、角速度センサ40によって検知される各軸周りの角速度の少なくともいずれか1つが角速度しきい値以上となったときに、平面視画像に切り替えるものとした。しかしながら、他の一実施形態では、少なくともいずれか2つ、又は全ての角速度が角速度しきい値以上となったときに、ゲーム装置10が大きく動かされたと判断して、平面視画像に切り替えるようにしてもよい。
また、第1の実施形態では、角速度センサ40によって検知される各軸周りの角速度の少なくともいずれか1つが角速度しきい値以上となったときに、平面視画像に切り替えるものとした。しかしながら、他の一実施形態では、加速度センサ39によって検知される各軸方向の加速度のうち少なくともいずれか1つ、少なくともいずれか2つ、又は全ての加速度が、所定の加速度しきい値以上となったときに、ゲーム装置10が大きく動かされたと判断して、平面視画像に切り替えるようにしてもよい。
また、第1の実施形態、及び第2の実施形態では、ゲーム装置10の動きに応じて、左仮想カメラHk、及び右仮想カメラMkの撮像方向のみを設定するものとした。しかしながら、他の一実施形態では、ゲーム装置10の動きに応じて、左仮想カメラHk、及び右仮想カメラMkの撮像方向、及び位置の少なくともいずれかを設定するようにしてもよい。左仮想カメラHk、及び右仮想カメラMkの位置を設定する場合には、ゲーム装置10のxyz軸(図1参照)の各軸方向への加速度を加速度センサ39を用いてそれぞれ検知し、当該加速度に基づいてxyz軸方向への移動量を算出する。これにより、算出したゲーム装置10の各軸方向への移動量に応じて左仮想カメラHk、及び右仮想カメラMkの位置を設定することができる。また、この場合に、上述したように、加速度センサ39によって検知される各軸方向の加速度のうち少なくともいずれか1つ、少なくともいずれか2つ、又は全ての加速度が、所定の加速度しきい値以上となったときに、ゲーム装置10が大きく動かされたと判断して、平面視画像に切り替えるようにしてもよいことは言うまでもない。
また、第1の実施形態では、平面視画像から立体視画像に切り替えるときに、上記数式(1)に従って、切り替えるものとした。しかしながら、他の一実施形態では、切り替え時間tが経過するに従って、仮想カメラ間隔Kkが大きくなるのであれば、他の任意の数式、或いは関係を用いて切り替えてもよい。
また、第2の実施形態では、水平回転角度Skの絶対値が大きくなるのに従って、仮想カメラ間隔Kkが単純に減少するように予め定めた関係を用いるものとした。しかしながら、他の一実施形態では、水平回転角度Skの絶対値が大きくなるのに従って、仮想カメラ間隔Kkが大きくなるのであれば、他の任意の関係を用いてもよい。また、第2の実施形態では、ゼロの水平回転角度Skを基準として正の領域と負の領域で対称な関係を用いるものとしたが、非対称の関係を用いてもよい。
また、第2の実施形態で説明したように、水平回転角度Skに応じて平面視画像と立体視画像とを切り替える場合、漸増、又は漸減させるのではなく、水平回転角度Skの絶対値が所定のしきい値以上となったときに、瞬時に平面視画像に切り替えるようにしてもよい。
また、上述の説明では、ゲーム処理の際に平面視画像と立体視画像とを切り替える場合について説明した。しかしながら、他の一実施形態では、例えば、第1の実施形態で説明した顔の画像を収集するための処理や敵オブジェクトEoを決定するための処理など、他の任意の処理を行っているときに切り替えてもよい。また、第1の実施形態で説明したように仮想空間内を移動するオブジェクトが存在しない場合でも、上述で説明したように平面視画像と立体視画像とを切り替えることにより、ユーザに与える不快感を低減できることは言うまでもない。
また、上述の説明では、3D調整スイッチ25に関わらずに、立体視画像と平面視画像とを切り替えるものとした。しかしながら、他の一実施形態では、第1の実施形態や第2の実施形態で説明したように、CPU311が立体視画像と平面視画像とを切り替える処理をしているときにおいて、3D調整スイッチ25を用いて平面視画像を表示する表示モードにユーザが切り替えたときには、平面視表示をするようにしてもよい。これにより、ユーザ自身の状況判断によって、ゲーム装置から与えられる不快感をなくすことができる。
また、第1の実施形態では、ゲーム装置10を大きく動かしたときに、角速度に応じた仮想カメラ間隔Kkに設定するものとした。しかしながら、他の一実施形態では、ゲーム装置10を大きく動かしたときに、仮想カメラ間隔Kkを瞬時にゼロに設定するようにしてもよい。これにより、ゲーム装置10を大きく動かしたときには、同一の左目用画像と右目用画像とが瞬時に表示されるので、ユーザに与える不快感を瞬時に確実になくせる。
また、第1の実施形態では、立体視画像から平面視画像に切り替えるときに角速度に応じて算出した仮想カメラ間隔Kkが、切り替え開始時間Stから上限時間が経過したときに、上限値Jtとなるように変化させる場合について説明した。しかしながら、他の一実施形態では、仮想カメラ間隔Kkが上限値Jtになるまでの上限時間を、平面視画像から立体視画像への切り替えを開始したときの仮想カメラ間隔Kkに基づいて決定してもよい。この場合の上限時間は、0〜1秒の間で決定するようにしてもよいし、他の任意の時間に決定するようにしてもよい。
また、上述の説明では、処理単位時間毎に外側撮像画像Ogをスクリーンオブジェクトにテクスチャマッピングする場合を一例として説明した。しかしながら、他の一実施形態では、外側撮像画像Ogをそのまま上側LCD22の表示画面に背景として表示されるようにし、敵オブジェクトEoや弾オブジェクトなどの表示オブジェクトを重畳して描画するようにしてもよい。
また、上述した説明では、本発明を携帯型のゲーム装置10に適用した場合について説明したが、本発明は携帯型ゲーム装置に限定されない。例えば、据置型ゲーム装置、携帯電話機、簡易型携帯電話機(PHS)、PDA等の携帯情報端末にも本発明の適用は可能である。また、据置型ゲーム機やパーソナルコンピュータにも本発明の適用は可能である。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施形態の記載から、本発明の記載及び技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。従って、他に定義されない限り、本明細書中で使用される全ての専門用語及び技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。