(57)【特許請求の範囲】
【請求項１】
右目用の実カメラ撮像部および左目用の実カメラ撮像部からの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示プログラムであって、コンピュータを、
前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出手段、
前記位置姿勢算出手段によって算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合手段、
前記位置姿勢統合手段によって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定手段、
前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成手段、
前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成手段、および、
前記右目用の実カメラ撮像部から出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラ撮像部から出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像を出力する表示制御手段として機能させる、画像表示プログラム。
【請求項２】
前記仮想カメラ設定手段は、前記右仮想カメラと前記左仮想カメラとの間の相対姿勢の関係が、前記右目用の実カメラおよび前記左目用の実カメラとの間の設計上の相対姿勢の関係と同一になるように、前記右仮想カメラと前記左仮想カメラの位置および姿勢を決定する、請求項１に記載の画像表示プログラム。
【請求項３】
前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報を用いて、それらの姿勢の情報を統合した単一の姿勢を算出し、
前記仮想カメラ設定手段は、前記位置姿勢統合手段によって統合された姿勢を前記右仮想カメラおよび左仮想カメラの姿勢として用いる、請求項１に記載の画像表示プログラム。
【請求項４】
前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な位置の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な位置を用いて、それらの位置の情報を統合した単一の位置を算出し、
前記仮想カメラ設定手段は、前記位置姿勢統合手段によって統合された位置から対称な位置に前記右仮想カメラおよび左仮想カメラの位置を設定する、請求項１に記載の画像表示プログラム。
【請求項５】
前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報を用いて、それらの姿勢の情報を平均した姿勢を算出し、
前記仮想カメラ設定手段は、前記位置姿勢統合手段によって平均された姿勢を前記右仮想カメラおよび左仮想カメラの姿勢として用いる、請求項１に記載の画像表示プログラム。
【請求項６】
前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な位置の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な位置の位置を用いて、それらの位置の中点を算出し、
前記仮想カメラ設定手段は、前記位置姿勢統合手段によって算出された前記中点から対象な位置に前記右仮想カメラおよび左仮想カメラの位置を設定する、請求項１に記載の画像表示プログラム。
【請求項７】
前記コンピュータを、
前記右仮想カメラと前記左仮想カメラの間の距離を決定する仮想カメラ間距離決定手段としてさらに機能させ、
前記仮想カメラ設定手段は、前記位置姿勢統合手段によって統合された位置から前記仮想カメラ間距離決定手段によって決定された前記距離だけ対称に離れた位置に記右仮想カメラおよび左仮想カメラの位置を設定する、請求項４または６に記載の画像表示プログラム。
【請求項８】
前記仮想カメラ設定手段は、
前記右目用の実カメラから出力される実世界画像データと前記左目用の実カメラから出力される実世界画像データの視差に基づいて前記右仮想カメラと前記左仮想カメラの間の距離を決定する、請求項４に記載の画像表示プログラム。
【請求項９】
前記仮想カメラ設定手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な位置および姿勢の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な位置および姿勢の情報を用いて、前記右仮想カメラと前期左仮想カメラとの間の距離を算出する、請求項４または８に記載の画像表示プログラム。
【請求項１０】
右目用の実カメラおよび左目用の実カメラからの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示装置であって、
前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出手段、
前記位置姿勢算出手段によって算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合手段、
前記位置姿勢統合手段によって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定手段、
前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成手段、
前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成手段、および、
前記右目用の実カメラから出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラから出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像出力を行う表示制御手段を備える、画像表示装置。
【請求項１１】
右目用の実カメラおよび左目用の実カメラからの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示システムであって、
前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出手段、
前記位置姿勢算出手段によって算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合手段、
前記位置姿勢統合手段によって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定手段、
前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成手段、
前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成手段、および、
前記右目用の実カメラから出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラから出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像出力を行う表示制御手段を備える、画像表示システム。
【請求項１２】
右目用の実カメラおよび左目用の実カメラからの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示方法であって、
前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出ステップ、
前記位置姿勢算出ステップにおいて算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合ステップ、
前記位置姿勢統合ステップによって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定ステップ、
前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成ステップ、
前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成ステップ、および、
前記右目用の実カメラから出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラから出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像出力を行う表示制御ステップを備える、画像表示方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像表示プログラム、装置、システムおよび方法に関し、特に、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示するための、画像表示プログラム、装置、システムおよび方法に関する。
【背景技術】
【０００２】
近年、実世界の画像に仮想オブジェクトを合成表示することによって、その仮想オブジェクトがあたかも実世界内に実在するかのように表示する、ＡＲ（Augmented Reality：
拡張現実感）技術の研究が進んでいる。
【０００３】
例えば、特許文献１に開示されている立体表示装置では、ヘッドマウントディスプレイに取り付けられている右目カメラおよび左目カメラによってそれぞれ撮像された画像から、実空間に配置されたマーカーに対する右目カメラおよび左目カメラの相対位置姿勢をそれぞれ求め、その結果に基づいて、右目用の仮想オブジェクトの画像と左目用の仮想オブジェクトの画像をそれぞれ生成している。そして、右目カメラおよび左目カメラによってそれぞれ撮像された画像に対して、右目用の仮想オブジェクトの画像と左目用の仮想オブジェクトの画像をそれぞれ合成して、それらの合成画像を右目ＬＣＤ（液晶画面）と左目ＬＣＤにそれぞれ表示している。
【０００４】
また、非特許文献１には、カメラによって撮像された画像におけるマーカーの位置および姿勢に基づいて、実世界におけるマーカーとカメラとの相対位置及び相対姿勢を計算する方法が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１４６１０９号公報
【非特許文献】
【０００６】
【非特許文献１】Hirokazu Kato, Mark Billinghurst, "Marker Tracking and HMD Calibration for a Video-Based Augmented Reality Conferencing System," iwar, pp.85, 2nd IEEE and ACM International Workshop on Augmented Reality, 1999
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、カメラによって撮像された画像におけるマーカーの位置および姿勢に基づいて、実世界におけるマーカーとカメラとの相対位置及び相対姿勢を計算する場合、カメラによって撮像された画像がぼけている場合や、マーカー認識の精度が完璧でない場合には、計算結果に誤差が含まれてしまうことになる。したがって、特許文献１に開示されている立体表示装置において、右目カメラによって撮像された画像に基づいて計算された、マーカーに対する右目カメラの相対位置姿勢は、必ずしも正確ではなく、同様に、左目カメラによって撮像された画像に基づいて計算された、マーカーに対する左目カメラの相対位置姿勢も、必ずしも正確ではない。正確でない計算結果に基づいて生成された右目用の仮想オブジェクトの画像と左目用の仮想オブジェクトの画像は、互いに整合しない矛盾した画像となるため、ユーザは仮想オブジェクトを正常に立体視することができない。
【０００８】
それ故、本発明の目的は、正常に立体視できるように仮想オブジェクトを表示することができる、画像表示プログラム、装置、システムおよび方法を提供することである。
【課題を解決するための手段】
【０００９】
本発明は、上記の課題を解決するために、以下の構成を採用した。
【００１０】
本発明の画像表示プログラムは、右目用の実カメラ撮像部および左目用の実カメラ撮像部からの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示プログラムであるコンピュータを、前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出手段、前記位置姿勢算出手段によって算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合手段、前記位置姿勢統合手段によって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定手段、前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成手段、
前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成手段、および、前記右目用の実カメラ撮像部から出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラ撮像部から出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像を出力する表示制御手段として機能させる。
【００１１】
また、この発明では、前記仮想カメラ設定手段は、前記右仮想カメラと前記左仮想カメラとの間の相対姿勢の関係が、前記右目用の実カメラおよび前記左目用の実カメラとの間の設計上の相対姿勢の関係と同一になるように、前記右仮想カメラと前記左仮想カメラの位置および姿勢を決定するようにしてもよい。
【００１２】
また、この発明では、前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報を用いて、それらの姿勢の情報を統合した単一の姿勢を算出し、前記仮想カメラ設定手段は、前記位置姿勢統合手段によって統合された姿勢を前記右仮想カメラおよび左仮想カメラの姿勢として用いるようにしてもよい。
【００１３】
また、この発明では、前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な位置の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な位置を用いて、それらの位置の情報を統合した単一の位置を算出し、前記仮想カメラ設定手段は、前記位置姿勢統合手段によって統合された位置から対称な位置に前記右仮想カメラおよび左仮想カメラの位置を設定するようにしてもよい。
【００１４】
また、この発明では、前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な姿勢の情報を用いて、それらの姿勢の情報を平均した姿勢を算出し、前記仮想カメラ設定手段は、前記位置姿勢統合手段によって平均された姿勢を前記右仮想カメラおよび左仮想カメラの姿勢として用いるようにしてもよい。
【００１５】
また、この発明では、前記位置姿勢統合手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な位置の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な位置の位置を用いて、それらの位置の中点を算出し
、
前記仮想カメラ設定手段は、前記位置姿勢統合手段によって算出された前記中点から対象な位置に前記右仮想カメラおよび左仮想カメラの位置を設定するようにしてもよい。
【００１６】
また、この発明では、前記コンピュータを、前記右仮想カメラと前記左仮想カメラの間の距離を決定する仮想カメラ間距離決定手段としてさらに機能させ、前記仮想カメラ設定手段は、前記位置姿勢統合手段によって統合された位置から前記仮想カメラ間距離決定手段によって決定された前記距離だけ対称に離れた位置に記右仮想カメラおよび左仮想カメラの位置を設定するようにしてもよい。
【００１７】
また、この発明では、前記仮想カメラ設定手段は、前記右目用の実カメラから出力される実世界画像データと前記左目用の実カメラから出力される実世界画像データの視差に基づいて前記右仮想カメラと前記左仮想カメラの間の距離を決定するようにしてもよい。
【００１８】
また、この発明では、前記仮想カメラ設定手段は、前記位置姿勢算出手段によって算出された右目用の実カメラ撮像部と前記撮像対象との相対的な位置および姿勢の情報と、左目用の実カメラ撮像部と前記撮像対象との相対的な位置および姿勢の情報を用いて、前記右仮想カメラと前期左仮想カメラとの間の距離を算出するようにしてもよい。
【００１９】
本発明の画像表示装置は、右目用の実カメラおよび左目用の実カメラからの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示装置である。前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出手段、前記位置姿勢算出手段によって算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合手段、前記位置姿勢統合手段によって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定手段、前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成手段、前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成手段、および、前記右目用の実カメラから出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラから出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像出力を行う表示制御手段を備える。
【００２０】
本発明の画像表示システムは、右目用の実カメラおよび左目用の実カメラからの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示システムである。前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出手段、  前記位置姿勢算出手段によって算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合手段、前記位置姿勢統合手段によって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定手段、前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成手段、前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成手段、および、前記右目用
の実カメラから出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラから出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像出力を行う表示制御手段を備える。
【００２１】
本発明の画像表示方法は、右目用の実カメラおよび左目用の実カメラからの出力を利用して、立体視可能な立体表示装置の画面に、３次元の仮想オブジェクトを合成した実世界画像を立体表示する画像表示方法である。前記２つの実カメラ撮像部からそれぞれ出力される２つの実世界画像データのそれぞれについて、当該各実世界画像データ内の所定の撮像対象を認識することにより、前記２つの実カメラ撮像部と当該撮像対象との間の相対的な位置および姿勢を示す位置姿勢情報をそれぞれ算出する位置姿勢算出ステップ、前記位置姿勢算出ステップにおいて算出された２つの位置姿勢情報を統合して、単一の位置姿勢情報を算出する位置姿勢統合ステップ、前記位置姿勢統合ステップによって統合された単一の前記位置姿勢情報に基づいて、所定の仮想空間における右目用の仮想画像を生成するための右仮想カメラおよび左目用の仮想画像を生成するための左仮想カメラの両方についての位置および姿勢を決定する仮想カメラ設定ステップ、前記右仮想カメラから見た前記仮想空間を示す右仮想空間画像を生成する右仮想空間画像生成ステップ、前記左仮想カメラから見た前記仮想空間を示す左仮想空間画像を生成する左仮想空間画像生成ステップ、および、前記右目用の実カメラから出力される実世界画像データに前記右仮想空間画像を合成し、かつ、前記左目用の実カメラから出力される実世界画像データに前記左仮想空間画像を合成して、前記立体表示装置に立体視のための画像出力を行う表示制御ステップを備える。
【発明の効果】
【００２２】
本発明によれば、正常に立体視できるように仮想オブジェクトを表示することができる。
【図面の簡単な説明】
【００２３】
【図１】開状態におけるゲーム装置１０の正面図
【図２】開状態におけるゲーム装置１０の側面図
【図３】閉状態におけるゲーム装置１０の左側面図、正面図、右側面図および背面図
【図４】図１に示す上側ハウジング２１のＡ−Ａ’線断面図
【図５Ａ】３Ｄ調整スイッチ２５のスライダ２５ａが最下点（第３の位置）に存在する様子を示す図
【図５Ｂ】３Ｄ調整スイッチ２５のスライダ２５ａが最下点よりも上方位置（第１の位置）に存在する様子を示す図
【図５Ｃ】３Ｄ調整スイッチ２５のスライダ２５ａが最上点（第２の位置）に存在する様子を示す図
【図６】ゲーム装置１０の内部構成を示すブロック図
【図７】上側ＬＣＤ２２の画面に表示される立体画像の一例を示す図
【図８】上側ＬＣＤ２２の画面に表示される立体画像の他の一例を示す図
【図９】マーカー６１を示す図
【図１０】上側ＬＣＤ２２の画面に表示される立体画像のさらに他の一例を示す図
【図１１】ゲーム装置１０のメインメモリ３２のメモリマップを示す図
【図１２】メインメモリ３２に格納される各種変数の一例を示す図
【図１３】マーカー処理の流れを示すフローチャート
【図１４】メイン処理の流れを示すフローチャート
【図１５】更新処理の詳細を示すフローチャート
【図１６】仮想カメラ間隔決定処理の詳細を示すフローチャート
【図１７】ビュー行列生成処理の詳細を示すフローチャート
【図１８】メイン実世界画像設定処理の詳細を示すフローチャート
【図１９】表示モード切替処理の詳細を示すフローチャート
【図２０】左実世界画像および右実世界画像の一例を示す図
【図２１】マーカー認識処理の結果に応じて算出される左仮想カメラ６３Ｌの位置及び姿勢を示す図
【図２２】マーカー認識処理の結果に応じて算出される右仮想カメラ６３Ｒの位置及び姿勢を示す図
【図２３】立体視ゼロ距離に基づく左実世界画像の切り出し範囲を示す図
【図２４】立体視ゼロ距離に基づく右実世界画像の切り出し範囲を示す図
【図２５】仮想オブジェクト６２と左仮想カメラ６３Ｌの位置関係を示す図
【図２６】左目用画像の生成方法を示す図
【図２７】左仮想カメラ座標系で表される右仮想カメラ６３Ｒの座標の計算方法を示す図
【図２８】ｅｗとｅｄを示す図
【図２９】マーカー座標系で表される左仮想カメラ６３Ｌ及び右仮想カメラ６３Ｒの座標の計算方法を示す図
【図３０】左仮想カメラ６３Ｌの位置及び姿勢に基づいて決定される右仮想カメラ６３Ｒの位置を示す図
【図３１】右仮想カメラ６３Ｒの位置及び姿勢に基づいて決定される左仮想カメラ６３Ｌの位置を示す図
【図３２】｜Ｖ．ｚ｜を示す図
【図３３】ＥｙｅＷｉｄｔｈを再計算する理由を説明するための図
【図３４】ＥｙｅＷｉｄｔｈを再計算する理由を説明するための図
【図３５】ＥｙｅＷｉｄｔｈを再計算する理由を説明するための図
【図３６】ＥｙｅＷｉｄｔｈを再計算する理由を説明するための図
【図３７】左射影行列について説明するための図
【図３８】右射影行列について説明するための図
【図３９】メイン実世界画像を左実世界画像から右実世界画像へ切り替えるか否かの判定方法を示す図
【図４０】メイン実世界画像を右実世界画像から左実世界画像へ切り替えるか否かの判定方法を示す図
【発明を実施するための形態】
【００２４】
（ゲーム装置の構成）
以下、本発明の一実施形態に係るゲーム装置について説明する。図１〜図３は、ゲーム装置１０の外観を示す平面図である。ゲーム装置１０は携帯型のゲーム装置であり、図１〜図３に示すように折り畳み可能に構成されている。図１および図２は、開いた状態（開状態）におけるゲーム装置１０を示し、図３は、閉じた状態（閉状態）におけるゲーム装置１０を示している。図１は、開状態におけるゲーム装置１０の正面図であり、図２は、開状態におけるゲーム装置１０の右側面図である。ゲーム装置１０は、撮像部によって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりすることが可能である。また、ゲーム装置１０は、交換可能なメモリカード内に記憶され、または、サーバーや他のゲーム装置から受信したゲームプログラムを実行可能であり、仮想空間に設定された仮想カメラで撮像した画像などのコンピュータグラフィックス処理により生成された画像を画面に表示したりすることができる。
【００２５】
まず、図１〜図３を参照して、ゲーム装置１０の外観構成について説明する。図１〜図３に示されるように、ゲーム装置１０は、下側ハウジング１１および上側ハウジング２１を有する。下側ハウジング１１と上側ハウジング２１とは、開閉可能（折り畳み可能）に接続されている。本実施形態では、各ハウジング１１および２１はともに横長の長方形の板状形状であり、互いの長辺部分で回転可能に接続されている。
【００２６】
図１および図２に示されるように、下側ハウジング１１の上側長辺部分には、下側ハウジング１１の内側面（主面）１１Ｂに対して垂直な方向に突起する突起部１１Ａが設けられる。また、上側ハウジング２１の下側長辺部分には、上側ハウジング２１の下側面から当該下側面に垂直な方向に突起する突起部２１Ａが設けられる。下側ハウジング１１の突起部１１Ａと上側ハウジング２１の突起部２１Ａとが連結されることにより、下側ハウジング１１と上側ハウジング２１とが、折り畳み可能に接続される。
【００２７】
（下側ハウジングの説明）
まず、下側ハウジング１１の構成について説明する。図１〜図３に示すように、下側ハウジング１１には、下側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）１２、タッチパネル１３、各操作ボタン１４Ａ〜１４Ｌ（図１、図３）、アナログスティック１５、ＬＥＤ１６Ａ〜１６Ｂ、挿入口１７、および、マイクロフォン用孔１８が設けられる。以下、これらの詳細について説明する。
【００２８】
図１に示すように、下側ＬＣＤ１２は下側ハウジング１１に収納される。下側ＬＣＤ１２は横長形状であり、長辺方向が下側ハウジング１１の長辺方向に一致するように配置される。下側ＬＣＤ１２は下側ハウジング１１の中央に配置される。下側ＬＣＤ１２は、下側ハウジング１１の内側面（主面）に設けられ、下側ハウジング１１に設けられた開口部から当該下側ＬＣＤ１２の画面が露出される。ゲーム装置１０を使用しない場合には閉状態としておくことによって、下側ＬＣＤ１２の画面が汚れたり傷ついたりすることを防止することができる。下側ＬＣＤ１２の画素数は、例えば、２５６ｄｏｔ×１９２ｄｏｔ（横×縦）であってもよい。下側ＬＣＤ１２は、後述する上側ＬＣＤ２２とは異なり、画像を（立体視可能ではなく）平面的に表示する表示装置である。なお、本実施形態では表示装置としてＬＣＤを用いているが、例えばＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ：電界発光）を利用した表示装置など、他の任意の表示装置を利用してもよい。また、下側ＬＣＤ１２として、任意の解像度の表示装置を利用することができる。
【００２９】
図１に示されるように、ゲーム装置１０は、入力装置として、タッチパネル１３を備えている。タッチパネル１３は、下側ＬＣＤ１２の画面上に装着されている。なお、本実施形態では、タッチパネル１３は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。本実施形態では、タッチパネル１３として、下側ＬＣＤ１２の解像度と同解像度（検出精度）のものを利用する。ただし、必ずしもタッチパネル１３の解像度と下側ＬＣＤ１２の解像度が一致している必要はない。また、下側ハウジング１１の上側面には挿入口１７（図１および図３（ｄ）に示す点線）が設けられている。挿入口１７は、タッチパネル１３に対する操作を行うために用いられるタッチペン２８を収納することができる。なお、タッチパネル１３に対する入力は通常タッチペン２８を用いて行われるが、タッチペン２８に限らずユーザの指でタッチパネル１３に対する入力をすることも可能である。
【００３０】
各操作ボタン１４Ａ〜１４Ｌは、所定の入力を行うための入力装置である。図１に示されるように、下側ハウジング１１の内側面（主面）には、各操作ボタン１４Ａ〜１４Ｌのうち、十字ボタン１４Ａ（方向入力ボタン１４Ａ）、ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅ、電源ボタン１４Ｆ、セレクトボタン１４Ｊ、ＨＯＭＥボタン１４Ｋ、およびスタートボタン１４Ｌが、設けられる。十字ボタン１４Ａは、十字の形状を有しており、上下左右の方向を指示するボタンを有している。ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅは、十字状に配置される。ボタン１４Ａ〜１４Ｅ、セレクトボタン１４Ｊ、ＨＯＭＥボタン１４Ｋ、およびスタートボタン１４Ｌには、ゲーム装置１０が実行するプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン１
４Ａは選択操作等に用いられ、各操作ボタン１４Ｂ〜１４Ｅは例えば決定操作やキャンセル操作等に用いられる。また、電源ボタン１４Ｆは、ゲーム装置１０の電源をオン／オフするために用いられる。
【００３１】
アナログスティック１５は、方向を指示するデバイスであり、下側ハウジング１１の内側面の下側ＬＣＤ１２より左側領域の上部領域に設けられる。図１に示すように、十字ボタン１４Ａは下側ＬＣＤ１２より左側領域の下部領域に設けられるので、アナログスティック１５は、十字ボタン１４Ａの上方に設けられる。また、アナログスティック１５、および、十字ボタン１４Ａは、下側ハウジングを把持した左手の親指で操作可能な位置に設計される。また、アナログスティック１５を上部領域に設けたことにより、下側ハウジング１１を把持する左手の親指が自然と位置するところにアナログスティック１５が配され、十字ボタン１４Ａは、左手の親指を少し下にずらした位置に配される。アナログスティック１５は、そのキートップが、下側ハウジング１１の内側面に平行にスライドするように構成されている。アナログスティック１５は、ゲーム装置１０が実行するプログラムに応じて機能する。例えば、３次元仮想空間に所定のオブジェクトが登場するゲームがゲーム装置１０によって実行される場合、アナログスティック１５は、当該所定のオブジェクトを３次元仮想空間内で移動させるための入力装置として機能する。この場合において、所定のオブジェクトはアナログスティック１５のキートップがスライドした方向に移動される。なお、アナログスティック１５として、上下左右および斜め方向の任意の方向に所定量だけ傾倒することでアナログ入力を可能としたものを用いても良い。
【００３２】
十字状に配置される、ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅの４つのボタンは、下側ハウジング１１を把持する右手の親指が自然と位置するところに配置される。また、これらの４つのボタンと、アナログスティック１５とは、下側ＬＣＤ１２を挟んで、左右対称に配置される。これにより、ゲームプログラムによっては、例えば、左利きの人が、これらの４つのボタンを使用して方向指示入力をすることも可能である。
【００３３】
また、下側ハウジング１１の内側面には、マイクロフォン用孔１８が設けられる。マイクロフォン用孔１８の下部には後述する音声入力装置としてのマイク（図６参照）が設けられ、当該マイクがゲーム装置１０の外部の音を検出する。
【００３４】
図３（ａ）は閉状態におけるゲーム装置１０の左側面図であり、図３（ｂ）は閉状態におけるゲーム装置１０の正面図であり、図３（ｃ）は閉状態におけるゲーム装置１０の右側面図であり、図３（ｄ）は閉状態におけるゲーム装置１０の背面図である。図３（ｂ）および（ｄ）に示されるように、下側ハウジング１１の上側面には、Ｌボタン１４ＧおよびＲボタン１４Ｈが設けられている。Ｌボタン１４Ｇは、下側ハウジング１１の上面の左端部に設けられ、Ｒボタン１４Ｈは、下側ハウジング１１の上面の右端部に設けられる。Ｌボタン１４ＧおよびＲボタン１４Ｈは、例えば、撮像部のシャッターボタン（撮影指示ボタン）として機能することができる。また、図３（ａ）に示されるように、下側ハウジング１１の左側面には、音量ボタン１４Ｉが設けられる。音量ボタン１４Ｉは、ゲーム装置１０が備えるスピーカの音量を調整するために用いられる。
【００３５】
図３（ａ）に示されるように、下側ハウジング１１の左側面には開閉可能なカバー部１１Ｃが設けられる。このカバー部１１Ｃの内側には、ゲーム装置１０とデータ保存用外部メモリ４５とを電気的に接続するためのコネクタ（図示せず）が設けられる。データ保存用外部メモリ４５は、コネクタに着脱自在に装着される。データ保存用外部メモリ４５は、例えば、ゲーム装置１０によって撮像された画像のデータを記憶（保存）するために用いられる。なお、上記コネクタおよびそのカバー部１１Ｃは、下側ハウジング１１の右側面に設けられてもよい。
【００３６】
また、図３（ｄ）に示されるように、下側ハウジング１１の上側面には、ゲーム装置１０とゲームプログラムを記録した外部メモリ４４を挿入するための挿入口１１Ｄが設けられ、その挿入口１１Ｄの内部には、外部メモリ４４と電気的に着脱自在に接続するためのコネクタ（図示せず）が設けられる。当該外部メモリ４４がゲーム装置１０に接続されることにより、所定のゲームプログラムが実行される。なお、上記コネクタおよびその挿入口１１Ｄは、下側ハウジング１１の他の側面（例えば、右側面等）に設けられてもよい。
【００３７】
また、図１および図３（ｃ）に示されるように、下側ハウジング１１の下側面にはゲーム装置１０の電源のＯＮ／ＯＦＦ状況をユーザに通知する第１ＬＥＤ１６Ａ、下側ハウジング１１の右側面にはゲーム装置１０の無線通信の確立状況をユーザに通知する第２ＬＥＤ１６Ｂが設けられる。ゲーム装置１０は他の機器との間で無線通信を行うことが可能であり、第１ＬＥＤ１６Ｂは、無線通信が確立している場合に点灯する。ゲーム装置１０は、例えば、ＩＥＥＥ８０２．１１．ｂ／ｇの規格に準拠した方式により、無線ＬＡＮに接続する機能を有する。下側ハウジング１１の右側面には、この無線通信の機能を有効／無効にする無線スイッチ１９が設けられる（図３（ｃ）参照）。
【００３８】
なお、図示は省略するが、下側ハウジング１１には、ゲーム装置１０の電源となる充電式電池が収納され、下側ハウジング１１の側面（例えば、上側面）に設けられた端子を介して当該電池を充電することができる。
【００３９】
（上側ハウジングの説明）
次に、上側ハウジング２１の構成について説明する。図１〜図３に示すように、上側ハウジング２１には、上側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）２２、外側撮像部２３（外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂ）、内側撮像部２４、３Ｄ調整スイッチ２５、および、３Ｄインジケータ２６が設けられる。以下、これらの詳細について説明する。
【００４０】
図１に示すように、上側ＬＣＤ２２は上側ハウジング２１に収納される。上側ＬＣＤ２２は、横長形状であり、長辺方向が上側ハウジング２１の長辺方向に一致するように配置される。上側ＬＣＤ２２は上側ハウジング２１の中央に配置される。上側ＬＣＤ２２の画面の面積は、下側ＬＣＤ１２の画面の面積よりも大きく設定される。また、上側ＬＣＤ２２の画面は、下側ＬＣＤ１２の画面よりも横長に設定される。すなわち、上側ＬＣＤ２２の画面のアスペクト比における横幅の割合は、下側ＬＣＤ１２の画面のアスペクト比における横幅の割合よりも大きく設定される。
【００４１】
上側ＬＣＤ２２の画面は、上側ハウジング２１の内側面（主面）２１Ｂに設けられ、上側ハウジング２１に設けられた開口部から当該上側ＬＣＤ２２の画面が露出される。また、図２に示すように、上側ハウジング２１の内側面は、透明なスクリーンカバー２７によって覆われている。当該スクリーンカバー２７は、上側ＬＣＤ２２の画面を保護するとともに、上側ＬＣＤ２２と上側ハウジング２１の内側面と一体的にさせ、これにより統一感を持たせている。上側ＬＣＤ２２の画素数は、例えば、６４０ｄｏｔ×２００ｄｏｔ（横×縦）であってもよい。なお、本実施形態では上側ＬＣＤ２２は液晶表示装置であるとしたが、例えばＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ：電界発光）を利用した表示装置などが利用されてもよい。また、上側ＬＣＤ２２として、任意の解像度の表示装置を利用することができる。
【００４２】
上側ＬＣＤ２２は、立体視可能な画像を表示することが可能な表示装置である。また、本実施例では、実質的に同一の表示領域を用いて左目用画像と右目用画像が表示される。具体的には、左目用画像と右目用画像が所定単位で（例えば、１列ずつ）横方向に交互に表示される方式の表示装置である。または、左目用画像と右目用画像とが交互に表示され
る方式の表示装置であってもよい。また、本実施例では、裸眼立体視可能な表示装置である。そして、横方向に交互に表示される左目用画像と右目用画像とを左目および右目のそれぞれに分解して見えるようにレンチキュラー方式やパララックスバリア方式（視差バリア方式）のものが用いられる。本実施形態では、上側ＬＣＤ２２はパララックスバリア方式のものとする。上側ＬＣＤ２２は、右目用画像と左目用画像とを用いて、裸眼で立体視可能な画像（立体画像）を表示する。すなわち、上側ＬＣＤ２２は、視差バリアを用いてユーザの左目に左目用画像をユーザの右目に右目用画像を視認させることにより、ユーザにとって立体感のある立体画像（立体視可能な画像）を表示することができる。また、上側ＬＣＤ２２は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる（上述した立体視とは反対の意味で平面視の画像を表示することができる。すなわち、表示された同一の画像が右目にも左目にも見えるような表示モードである）。このように、上側ＬＣＤ２２は、立体視可能な画像を表示する立体表示モードと、画像を平面的に表示する（平面視画像を表示する）平面表示モードとを切り替えることが可能な表示装置である。この表示モードの切り替えは、後述する３Ｄ調整スイッチ２５によって行われる。
【００４３】
外側撮像部２３は、上側ハウジング２１の外側面（上側ＬＣＤ２２が設けられた主面と反対側の背面）２１Ｄに設けられた２つの撮像部（２３ａおよび２３ｂ）の総称である。外側撮像部（左）２３ａと外側撮像部（右）２３ｂの撮像方向は、いずれも当該外側面２１Ｄの外向きの法線方向である。また、これらの撮像部はいずれも、上側ＬＣＤ２２の表示面（内側面）の法線方向と１８０度反対の方向に設計される。すなわち、外側撮像部（左）２３ａの撮像方向および外側撮像部（右）２３ｂの撮像方向は、平行である。外側撮像部（左）２３ａと外側撮像部（右）２３ｂとは、ゲーム装置１０が実行するプログラムによって、ステレオカメラとして使用することが可能である。また、プログラムによっては、２つの外側撮像部（２３ａおよび２３ｂ）のいずれか一方を単独で用いて、外側撮像部２３を非ステレオカメラとして使用することも可能である。また、プログラムによっては、２つの外側撮像部（２３ａおよび２３ｂ）で撮像した画像を合成してまたは補完的に使用することにより撮像範囲を広げた撮像をおこなうことも可能である。本実施形態では、外側撮像部２３は、外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの２つの撮像部で構成される。外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂは、それぞれ所定の共通の解像度を有する撮像素子（例えば、ＣＣＤイメージセンサやＣＭＯＳイメージセンサ等）と、レンズとを含む。レンズは、ズーム機構を有するものでもよい。
【００４４】
図１の破線および図３（ｂ）の実線で示されるように、外側撮像部２３を構成する外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂは、上側ＬＣＤ２２の画面の横方向と平行に並べられて配置される。すなわち、２つの撮像部を結んだ直線が上側ＬＣＤ２２の画面の横方向と平行になるように、外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂが配置される。図１の破線で示す２３ａおよび２３ｂは、上側ハウジング２１の内側面とは反対側の外側面に存在する外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂをそれぞれ表している。図１に示すように、ユーザが上側ＬＣＤ２２の画面を正面から視認した場合に、外側撮像部（左）２３ａは左側に外側撮像部（右）２３ｂは右側にそれぞれ位置している。外側撮像部２３をステレオカメラとして機能させるプログラムが実行されている場合、外側撮像部（左）２３ａは、ユーザの左目で視認される左目用画像を撮像し、外側撮像部（右）２３ｂは、ユーザの右目で視認される右目用画像を撮像する。外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの間隔は、人間の両目の間隔程度に設定され、例えば、３０ｍｍ〜７０ｍｍの範囲で設定されてもよい。なお、外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの間隔は、この範囲に限らない。
【００４５】
なお、本実施例においては、外側撮像部（左）２３ａおよび外側撮像部（右）２３はハウジングに固定されており、撮像方向を変更することはできない。
【００４６】
また、外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂは、上側ＬＣＤ２２（上側ハウジング２１）の左右方向に関して中央から対称となる位置にそれぞれ配置される。すなわち、外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂは、上側ＬＣＤ２２を左右に２等分する線に対して対称の位置にそれぞれ配置される。また、外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂは、上側ハウジング２１を開いた状態において、上側ハウジング２１の上部であって、上側ＬＣＤ２２の画面の上端よりも上方の位置の裏側に配置される。すなわち、外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂは、上側ハウジング２１の外側面であって、上側ＬＣＤ２２を外側面に投影した場合、投影した上側ＬＣＤ２２の画面の上端よりも上方に配置される。
【００４７】
このように、外側撮像部２３の２つの撮像部（２３ａおよび２３ｂ）が、上側ＬＣＤ２２の左右方向に関して中央から対称の位置に配置されることにより、ユーザが上側ＬＣＤ２２を正視した場合に、外側撮像部２３の撮像方向をユーザの視線方向と一致させることができる。また、外側撮像部２３は、上側ＬＣＤ２２の画面の上端より上方の裏側の位置に配置されるため、外側撮像部２３と上側ＬＣＤ２２とが上側ハウジング２１の内部で干渉することがない。従って、外側撮像部２３を上側ＬＣＤ２２の画面の裏側に配置する場合と比べて、上側ハウジング２１を薄く構成することが可能となる。
【００４８】
内側撮像部２４は、上側ハウジング２１の内側面（主面）２１Ｂに設けられ、当該内側面の内向きの法線方向を撮像方向とする撮像部である。内側撮像部２４は、所定の解像度を有する撮像素子（例えば、ＣＣＤイメージセンサやＣＭＯＳイメージセンサ等）と、レンズとを含む。レンズは、ズーム機構を有するものでもよい。
【００４９】
図１に示すように、内側撮像部２４は、上側ハウジング２１を開いた状態において、上側ハウジング２１の上部であって、上側ＬＣＤ２２の画面の上端よりも上方に配置され、上側ハウジング２１の左右方向に関して中央の位置（上側ハウジング２１（上側ＬＣＤ２２の画面）を左右に２等分する線の線上）に配置される。具体的には、図１および図３（ｂ）に示されるように、内側撮像部２４は、上側ハウジング２１の内側面であって、外側撮像部２３の左右の撮像部（外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂ）の中間の裏側の位置に配置される。すなわち、上側ハウジング２１の外側面に設けられた外側撮像部２３の左右の撮像部を上側ハウジング２１の内側面に投影した場合、当該投影した左右の撮像部の中間に、内側撮像部２４が設けられる。図３（ｂ）で示される破線２４は、上側ハウジング２１の内側面に存在する内側撮像部２４を表している。
【００５０】
このように、内側撮像部２４は、外側撮像部２３とは反対方向を撮像する。内側撮像部２４は、上側ハウジング２１の内側面であって、外側撮像部２３の左右の撮像部の中間位置の裏側に設けられる。これにより、ユーザが上側ＬＣＤ２２を正視した際、内側撮像部２４でユーザの顔を正面から撮像することができる。また、外側撮像部２３の左右の撮像部と内側撮像部２４とが上側ハウジング２１の内部で干渉することがないため、上側ハウジング２１を薄く構成することが可能となる。
【００５１】
３Ｄ調整スイッチ２５は、スライドスイッチであり、上述のように上側ＬＣＤ２２の表示モードを切り替えるために用いられるスイッチである。また、３Ｄ調整スイッチ２５は、上側ＬＣＤ２２に表示された立体視可能な画像（立体画像）の立体感を調整するために用いられる。図１〜図３に示されるように、３Ｄ調整スイッチ２５は、上側ハウジング２１の内側面および右側面の端部に設けられ、ユーザが上側ＬＣＤ２２を正視した場合に、当該３Ｄ調整スイッチ２５を視認できる位置に設けられる。また、３Ｄ調整スイッチ２５の操作部は、内側面および右側面の両方に突出しており、どちらからも視認および操作することができる。なお、３Ｄ調整スイッチ２５以外のスイッチは全て下側ハウジング１１
に設けられる。
【００５２】
図４は、図１に示す上側ハウジング２１のＡ−Ａ’線断面図である。図４に示すように、上側ハウジング２１の内側面の右端部には、凹部２１Ｃが形成され、当該凹部２１Ｃに３Ｄ調整スイッチ２５が設けられる。３Ｄ調整スイッチ２５は、図１および図２に示されるように、上側ハウジング２１の正面および右側面から視認可能に配置される。３Ｄ調整スイッチ２５のスライダ２５ａは、所定方向（上下方向）の任意の位置にスライド可能であり、当該スライダ２５ａの位置に応じて上側ＬＣＤ２２の表示モードが設定される。
【００５３】
図５Ａから図５Ｃは、３Ｄ調整スイッチ２５のスライダ２５ａがスライドする様子を示す図である。図５Ａは、３Ｄ調整スイッチ２５のスライダ２５ａが最下点（第３の位置）に存在する様子を示す図である。図５Ｂは、３Ｄ調整スイッチ２５のスライダ２５ａが最下点よりも上方位置（第１の位置）に存在する様子を示す図である。図５Ｃは、３Ｄ調整スイッチ２５のスライダ２５ａが最上点（第２の位置）に存在する様子を示す図である。
【００５４】
図５Ａに示すように、３Ｄ調整スイッチ２５のスライダ２５ａが最下点位置（第３の位置）に存在する場合、上側ＬＣＤ２２は平面表示モードに設定され、上側ＬＣＤ２２の画面には平面画像が表示される（なお、上側ＬＣＤ２２を立体表示モードのままとして、左目用画像と右目用画像を同一の画像とすることにより平面表示してもよい）。一方、図５Ｂに示す位置（最下点より上側の位置（第１の位置））から図５Ｃに示す位置（最上点の位置（第２の位置））までの間にスライダ２５ａが存在する場合、上側ＬＣＤ２２は立体表示モードに設定される。この場合、上側ＬＣＤ２２の画面には立体視可能な画像が表示される。スライダ２５ａが第１の位置から第２の位置の間に存在する場合、スライダ２５ａの位置に応じて、立体画像の見え方が調整される。具体的には、スライダ２５ａの位置に応じて、右目用画像および左目用画像の横方向の位置のずれ量が調整される。３Ｄ調整スイッチ２５のスライダ２５ａは、第３の位置で固定されるように構成されており、第１の位置と第２の位置との間では上下方向に任意の位置にスライド可能に構成されている。例えば、スライダ２５ａは、第３の位置において、３Ｄ調整スイッチ２５を形成する側面から図５Ａに示す横方向に突出した凸部（図示せず）によって固定されて、所定以上の力が上方に加わらないと第３の位置よりも上方にスライドしないように構成されている。第３の位置から第１の位置にスライダ２５ａが存在する場合、立体画像の見え方は調整されないが、これはいわゆるあそびである。他の例においては、あそびをなくして、第３の位置と第１の位置とを同じ位置としてもよい。また、第３の位置を第１の位置と第２の位置の間としてもよい。その場合、スライダを第３の位置から第１の位置の方向に動かした場合と、第２の方向に動かした場合とで、右目用画像および左目用画像の横方向の位置のずれ量の調整する方向が逆になる。
【００５５】
３Ｄインジケータ２６は、上側ＬＣＤ２２が立体表示モードか否かを示す。３Ｄインジケータ２６は、ＬＥＤであり、上側ＬＣＤ２２の立体表示モードが有効の場合に点灯する。なお、３Ｄインジケータ２６は、上側ＬＣＤ２２が立体表示モードになっており、かつ、立体視画像を表示するプログラム処理が実行されているとき（すなわち、３Ｄ調整スイッチが上記第１の位置から上記第２の位置にあるときに、左目用画像と右目用画像が異なるような画像処理が実行されているとき）に限り、点灯するようにしてもよい。図１に示されるように、３Ｄインジケータ２６は、上側ハウジング２１の内側面に設けられ、上側ＬＣＤ２２の画面近傍に設けられる。このため、ユーザが上側ＬＣＤ２２の画面を正視した場合、ユーザは３Ｄインジケータ２６を視認しやすい。従って、ユーザは上側ＬＣＤ２２の画面を視認している状態でも、上側ＬＣＤ２２の表示モードを容易に認識することができる。
【００５６】
また、上側ハウジング２１の内側面には、スピーカ孔２１Ｅが設けられる。後述するス
ピーカ４３からの音声がこのスピーカ孔２１Ｅから出力される。
【００５７】
（ゲーム装置１０の内部構成）
次に、図６を参照して、ゲーム装置１０の内部の電気的構成について説明する。図６は、ゲーム装置１０の内部構成を示すブロック図である。図６に示すように、ゲーム装置１０は、上述した各部に加えて、情報処理部３１、メインメモリ３２、外部メモリインターフェイス（外部メモリＩ／Ｆ）３３、データ保存用外部メモリＩ／Ｆ３４、データ保存用内部メモリ３５、無線通信モジュール３６、ローカル通信モジュール３７、リアルタイムクロック（ＲＴＣ）３８、加速度センサ３９、電源回路４０、およびインターフェイス回路（Ｉ／Ｆ回路）４１等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて下側ハウジング１１（または上側ハウジング２１でもよい）内に収納される。
【００５８】
情報処理部３１は、所定のプログラムを実行するためのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１１、画像処理を行うＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１２等を含む情報処理手段である。情報処理部３１のＣＰＵ３１１は、ゲーム装置１０内のメモリ（例えば外部メモリＩ／Ｆ３３に接続された外部メモリ４４やデータ保存用内部メモリ３５）に記憶されているプログラムを実行することによって、当該プログラムに応じた処理（例えば、撮影処理や、後述する画像表示処理）を実行する。なお、情報処理部３１のＣＰＵ３１１によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。また、情報処理部３１は、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３１３を含む。情報処理部３１のＧＰＵ３１２は、情報処理部３１のＣＰＵ３１１からの命令に応じて画像を生成し、ＶＲＡＭ３１３に描画する。そして、情報処理部３１のＧＰＵ３１２は、ＶＲＡＭ３１３に描画された画像を上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に出力し、上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に当該画像が表示される。
【００５９】
情報処理部３１には、メインメモリ３２、外部メモリＩ／Ｆ３３、データ保存用外部メモリＩ／Ｆ３４、および、データ保存用内部メモリ３５が接続される。外部メモリＩ／Ｆ３３は、外部メモリ４４を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリＩ／Ｆ３４は、データ保存用外部メモリ４５を着脱自在に接続するためのインターフェイスである。
【００６０】
メインメモリ３２は、情報処理部３１（のＣＰＵ３１１）のワーク領域やバッファ領域として用いられる揮発性の記憶手段である。すなわち、メインメモリ３２は、上記プログラムに基づく処理に用いられる各種データを一時的に記憶したり、外部（外部メモリ４４や他の機器等）から取得されるプログラムを一時的に記憶したりする。本実施形態では、メインメモリ３２として例えばＰＳＲＡＭ（Ｐｓｅｕｄｏ−ＳＲＡＭ）を用いる。
【００６１】
外部メモリ４４は、情報処理部３１によって実行されるプログラムを記憶するための不揮発性の記憶手段である。外部メモリ４４は、例えば読み取り専用の半導体メモリで構成される。外部メモリ４４が外部メモリＩ／Ｆ３３に接続されると、情報処理部３１は外部メモリ４４に記憶されたプログラムを読み込むことができる。情報処理部３１が読み込んだプログラムを実行することにより、所定の処理が行われる。データ保存用外部メモリ４５は、不揮発性の読み書き可能なメモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、所定のデータを格納するために用いられる。例えば、データ保存用外部メモリ４５には、外側撮像部２３で撮像された画像や他の機器で撮像された画像が記憶される。データ保存用外部メモリ４５がデータ保存用外部メモリＩ／Ｆ３４に接続されると、情報処理部３１はデータ保存用外部メモリ４５に記憶された画像を読み込み、上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に当該画像を表示することができる。
【００６２】
データ保存用内部メモリ３５は、読み書き可能な不揮発性メモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、所定のデータを格納するために用いられる。例えば、データ保存用内部メモリ３５には、無線通信モジュール３６を介した無線通信によってダウンロードされたデータやプログラムが格納される。
【００６３】
無線通信モジュール３６は、例えばＩＥＥＥ８０２．１１．ｂ／ｇの規格に準拠した方式により、無線ＬＡＮに接続する機能を有する。また、ローカル通信モジュール３７は、所定の通信方式（例えば独自プロトコルによる通信や、赤外線通信）により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール３６およびローカル通信モジュール３７は情報処理部３１に接続される。情報処理部３１は、無線通信モジュール３６を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール３７を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
【００６４】
また、情報処理部３１には、加速度センサ３９が接続される。加速度センサ３９は、３軸（ｘｙｚ軸）方向に沿った直線方向の加速度（直線加速度）の大きさを検出する。加速度センサ３９は、下側ハウジング１１の内部に設けられる。加速度センサ３９は、図１に示すように、下側ハウジング１１の長辺方向をｘ軸、下側ハウジング１１の短辺方向をｙ軸、下側ハウジング１１の内側面（主面）に対して垂直な方向をｚ軸として、各軸の直線加速度の大きさを検出する。なお、加速度センサ３９は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ３９は１軸又は２軸方向を検出する加速度センサであってもよい。情報処理部３１は、加速度センサ３９が検出した加速度を示すデータ（加速度データ）を受信して、ゲーム装置１０の姿勢や動きを検出することができる。
【００６５】
また、情報処理部３１には、ＲＴＣ３８および電源回路４０が接続される。ＲＴＣ３８は、時間をカウントして情報処理部３１に出力する。情報処理部３１は、ＲＴＣ３８によって計時された時間に基づき現在時刻（日付）を計算する。電源回路４０は、ゲーム装置１０が有する電源（下側ハウジング１１に収納される上記充電式電池）からの電力を制御し、ゲーム装置１０の各部品に電力を供給する。
【００６６】
また、情報処理部３１には、Ｉ／Ｆ回路４１が接続される。Ｉ／Ｆ回路４１には、マイク４２およびスピーカ４３が接続される。具体的には、Ｉ／Ｆ回路４１には、図示しないアンプを介してスピーカ４３が接続される。マイク４２は、ユーザの音声を検知して音声信号をＩ／Ｆ回路４１に出力する。アンプは、Ｉ／Ｆ回路４１からの音声信号を増幅し、音声をスピーカ４３から出力させる。また、タッチパネル１３はＩ／Ｆ回路４１に接続される。Ｉ／Ｆ回路４１は、マイク４２およびスピーカ４３（アンプ）の制御を行う音声制御回路と、タッチパネルの制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するＡ／Ｄ変換およびＤ／Ａ変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル１３からの信号に基づいて所定の形式のタッチ位置データを生成して情報処理部３１に出力する。タッチ位置データは、タッチパネル１３の入力面において入力が行われた位置の座標を示す。なお、タッチパネル制御回路は、タッチパネル１３からの信号の読み込み、および、タッチ位置データの生成を所定時間に１回の割合で行う。情報処理部３１は、タッチ位置データを取得することにより、タッチパネル１３に対して入力が行われた位置を知ることができる。
【００６７】
操作ボタン１４は、上記各操作ボタン１４Ａ〜１４Ｌからなり、情報処理部３１に接続される。操作ボタン１４から情報処理部３１へは、各操作ボタン１４Ａ〜１４Ｉに対する入力状況（押下されたか否か）を示す操作データが出力される。情報処理部３１は、操作
ボタン１４から操作データを取得することによって、操作ボタン１４に対する入力に従った処理を実行する。
【００６８】
下側ＬＣＤ１２および上側ＬＣＤ２２は情報処理部３１に接続される。下側ＬＣＤ１２および上側ＬＣＤ２２は、情報処理部３１（のＧＰＵ３１２）の指示に従って画像を表示する。本実施形態では、情報処理部３１は、上側ＬＣＤ２２に立体画像（立体視可能な画像）を表示させる。
【００６９】
具体的には、情報処理部３１は、上側ＬＣＤ２２のＬＣＤコントローラ（図示せず）と接続され、当該ＬＣＤコントローラに対して視差バリアのＯＮ／ＯＦＦを制御する。上側ＬＣＤ２２の視差バリアがＯＮになっている場合、情報処理部３１のＶＲＡＭ３１３に格納された右目用画像と左目用画像とが、上側ＬＣＤ２２に出力される。より具体的には、ＬＣＤコントローラは、右目用画像について縦方向に１ライン分の画素データを読み出す処理と、左目用画像について縦方向に１ライン分の画素データを読み出す処理とを交互に繰り返すことによって、ＶＲＡＭ３１３から右目用画像と左目用画像とを読み出す。これにより、右目用画像および左目用画像が、画素を縦に１ライン毎に並んだ短冊状画像に分割され、分割された右目用画像の短冊状画像と左目用画像の短冊状画像とが交互に配置された画像が、上側ＬＣＤ２２の画面に表示される。そして、上側ＬＣＤ２２の視差バリアを介して当該画像がユーザに視認されることによって、ユーザの右目に右目用画像が、ユーザの左目に左目用画像が視認される。以上により、上側ＬＣＤ２２の画面には立体視可能な画像が表示される。
【００７０】
外側撮像部２３および内側撮像部２４は、情報処理部３１に接続される。外側撮像部２３および内側撮像部２４は、情報処理部３１の指示に従って画像を撮像し、撮像した画像データを情報処理部３１に出力する。
【００７１】
３Ｄ調整スイッチ２５は、情報処理部３１に接続される。３Ｄ調整スイッチ２５は、スライダ２５ａの位置に応じた電気信号を情報処理部３１に送信する。
【００７２】
また、３Ｄインジケータ２６は、情報処理部３１に接続される。情報処理部３１は、３Ｄインジケータ２６の点灯を制御する。例えば、情報処理部３１は、上側ＬＣＤ２２が立体表示モードである場合、３Ｄインジケータ２６を点灯させる。以上がゲーム装置１０の内部構成の説明である。
【００７３】
（ゲーム装置１０の動作の概要）
以下、本実施形態におけるゲーム装置１０の動作の概要について説明する。本実施形態では、画像表示プログラムに基づいて、外側撮像部２３（外側撮像部（左）２３ａ、外側撮像部（右）２３ｂ）によって現在撮像されている実世界の画像と、３次元の仮想空間に存在する仮想オブジェクトの画像とを合成した合成画像が、上側ＬＣＤ２２の画面に立体視可能に表示される。
【００７４】
（実世界画像の立体視表示）
外側撮像部２３で撮影された２つの撮影画像は所定の視差を有するように上側ＬＣＤに供給されて立体視表示される。
【００７５】
図７は、外側撮像部２３によって３つのボール６０ａ〜６０ｃ（実オブジェクト）が撮像されているときに上側ＬＣＤ２２の画面に表示される立体画像の一例を示している。外側撮像部２３によって３つのボール６０ａ〜６０ｃが撮像されると、上側ＬＣＤ２２には、これらのボール６０ａ〜６０ｃが立体視可能に表示される。図７に示されるように、上側ＬＣＤ２２の画面上では、外側撮像部２３に最も近いボール６０ａが最も手前に位置す
るようにユーザに視認され、外側撮像部２３から最も遠いボール６０ｃが最も遠くに位置するようにユーザに視認される。なお、図７では、理解を容易にするために、上側ＬＣＤ２２の画面からボールをはみ出して図示しているが、実際にはボールは画面内に表示される。後述の図８や図１０についても同様である。なお、図７では、後述するマーカー６１（図８参照）が外側撮像部２３によって撮像されていないため、上側ＬＣＤ２２の画面には仮想オブジェクトは表示されていない。また、図７、図８、図１０等においては、表示対象が飛び出ているように視認される様子を図示しているが、立体視可能に表示する、と言った場合、必ずしも飛び出し方向に視認される場合のみでなく、画面より奥側に、奥行きを持って表示される場合も含む。
【００７６】
（実世界画像およびＣＧ画像の立体視表示）
図８は、外側撮像部２３によってマーカー６１（実オブジェクト）が撮像されているときに上側ＬＣＤ２２の画面に表示される立体画像の一例を示している。図８に示すように、マーカー６１には、矢印を含む正方形が描かれており、ＣＰＵ３１１は、外側撮像部２３から取得される画像に対して例えばパターンマッチング等の画像処理を行うことによって、当該画像にマーカーが含まれているか否かを判定することができる。外側撮像部２３によってマーカー６１が撮像されているときには、上側ＬＣＤ２２には、実世界画像としてマーカー６１が立体視可能に表示されるとともに、マーカー６１の位置に仮想オブジェクト６２（例えば犬を模した仮想オブジェクト）が立体視可能に合成表示される。なお、図９に示すように、マーカー６１には向き（前方向、右方向、上方向）が定義されており、マーカー６１の姿勢に応じた姿勢で仮想オブジェクトを配置することができる。例えば、仮想オブジェクト６２の前方向がマーカー６１の前方向と一致するように、マーカー６１の上に仮想オブジェクト６２を配置することが可能である。
【００７７】
図１０は、外側撮像部２３によってマーカー６１が撮像されているときに上側ＬＣＤ２２の画面に表示される立体画像の他の一例を示している。このように、ユーザーがゲーム装置１０を移動させることによって、上側ＬＣＤ２２の画面に表示されるマーカー６１の位置および向きが変化すると、それに追従するように、仮想オブジェクト６２の位置および向きが変化する。よって、ユーザーには仮想オブジェクト６２があたかも実世界に本当に存在しているかのように見える。
【００７８】
以下、図１１〜図４０を参照して、ゲーム装置１０において画像表示プログラムに基づいて実行される画像表示処理の詳細について説明する。
【００７９】
（メモリマップ）
まず、画像表示処理の際にメインメモリ３２に記憶される主なデータについて説明する。図１１は、ゲーム装置１０のメインメモリ３２のメモリマップを示す図である。図１１に示されるように、メインメモリ３２には、画像表示プログラム７０、最新左実世界画像７１Ｌ、最新右実世界画像７１Ｒ、表示用左実世界画像７２Ｌ、表示用右実世界画像７２Ｒ、立体視ゼロ距離７３、仮想オブジェクト情報７４、左変換行列７５Ｌ、右変換行列７５Ｒ、左ビュー行列７６Ｌ、右ビュー行列７６Ｒ、左射影行列７７Ｌ、右射影行列７７Ｒ、表示モード７８、マーカー認識モード７９、メイン実世界画像識別情報８０、各種変数８１等が記憶される。
【００８０】
画像表示プログラム７０は、ＣＰＵ３１１に上記画像表示処理を実行させるためのプログラムである。
【００８１】
最新左実世界画像７１Ｌは、外側撮像部（左）２３ａによって撮像された最新の画像である。
【００８２】
最新右実世界画像７１Ｒは、外側撮像部（右）２３ｂによって撮像された最新の画像である。
【００８３】
表示用左実世界画像７２Ｌは、外側撮像部（左）２３ａによって撮像された画像のうち、上側ＬＣＤ２２に表示されることが決定された最新の画像である。
【００８４】
表示用右実世界画像７２Ｒは、外側撮像部（右）２３ｂによって撮像された画像のうち、上側ＬＣＤ２２に表示されることが決定された最新の画像である。
【００８５】
立体視ゼロ距離７３は、外側撮像部２３から撮影方向にどれだけの距離だけ離れた物体が、上側ＬＣＤ２２の画面に立体表示されたときに上側ＬＣＤ２２の画面と同じ奥行き位置にあるように視認されるかを示す変数であり、例えば、センチメートルの単位で表される。本実施形態では、立体視ゼロ距離７３は２５ｃｍで固定とするが、これは単なる一例に過ぎず、ユーザーの指示に応じて、またはコンピュータによって自動的に、立体視ゼロ距離７３を随時変更するようにしても構わない。立体視ゼロ距離７３は、マーカー６１からの距離や、外側撮像部２３とマーカー６１の間の距離における比で指定しても構わない。また、必ずしも現実空間の距離として指定せず、仮想空間における距離で指定してもよい。マーカー６１のサイズが既知のときなどには、実世界における長さの単位と仮想空間における長さの単位とを一致させることができる。このように両者の単位を一致させることができる場合には、立体視ゼロ距離７３を実世界における長さの単位で設定できる。しかしながら、両者の単位を一致させることができない場合には、立体視ゼロ距離７３を仮想空間における長さの単位で設定してもよい。なお、後述の通り、本実施形態においては、マーカー６１のサイズを用いずに、実世界における長さの単位と仮想空間における長さの単位とを一致させることができる。
【００８６】
仮想オブジェクト情報７４は、前述の仮想オブジェクト６２に関連する情報であって、仮想オブジェクト６２の形状を表す３Ｄモデルデータ（ポリゴンデータ）や、仮想オブジェクト６２の模様を表すテクスチャデータや、仮想空間における仮想オブジェクト６２の位置や姿勢の情報などを含む。
【００８７】
左変換行列７５Ｌは、左実世界画像におけるマーカー６１の位置および姿勢を認識することにより計算される行列であり、マーカー６１の位置および姿勢を基準として設定される座標系（マーカー座標系）で表された座標を外側撮像部（左）２３ａの位置および姿勢を基準として表された座標系（外側撮像部（左）座標系）に変換する座標変換行列である。左変換行列７５Ｌは、マーカー６１の位置および姿勢に対する外側撮像部（左）２３ａの相対的な位置および姿勢の情報を含む行列であり、より具体的には、マーカー座標系における外側撮像部（左）２３ａの位置および姿勢の情報を含む行列である。
【００８８】
右変換行列７５Ｒは、右実世界画像におけるマーカー６１の位置および姿勢を認識することにより計算される行列であり、マーカー座標系で表された座標を外側撮像部（右）２３ｂの位置および姿勢を基準として表された座標系（外側撮像部（右）座標系）に変換する座標変換行列である。右変換行列７５Ｒは、マーカー６１の位置および姿勢に対する外側撮像部（右）２３ｂの相対的な位置および姿勢の情報を含む行列であり、より具体的には、マーカー座標系における外側撮像部（右）２３ｂの位置および姿勢の情報を含む行列である。
【００８９】
なお、本明細書において、マーカー座標系から外側撮像部（左）座標系または外側撮像部（右）座標系への変換行列のことを「マーカー・カメラ変換行列」と呼ぶ。左変換行列７５Ｌおよび右変換行列７５Ｒは「マーカー・カメラ変換行列」である。
【００９０】
左ビュー行列７６Ｌは、左仮想カメラから見た仮想オブジェクト６２を描画する際に用いられる行列であり、仮想世界のワールド座標系で表された座標を左仮想カメラ座標系で表された座標へと変換するための座標変換行列である。左ビュー行列７６Ｌは、仮想世界のワールド座標系における左仮想カメラの位置および姿勢の情報を含む行列である。
【００９１】
右ビュー行列７６Ｒは、右仮想カメラから見た仮想オブジェクト６２を描画する際に用いられる行列であり、仮想世界のワールド座標系で表された座標を右仮想カメラ座標系で表された座標へと変換するための座標変換行列である。右ビュー行列７６Ｒは、仮想世界のワールド座標系における右仮想カメラの位置および姿勢の情報を含む行列である。
【００９２】
左射影行列７７Ｌは、左仮想カメラから見た仮想世界（仮想世界に存在する仮想オブジェクト６２）を描画する際に用いられる行列であり、左仮想カメラ座標系で表された座標をスクリーン座標系で表された座標へと変換するための座標変換行列である。
【００９３】
右射影行列７７Ｒは、右仮想カメラから見た仮想世界（仮想世界に存在する仮想オブジェクト６２）を描画する際に用いられる行列であり、右仮想カメラ座標系で表された座標をスクリーン座標系で表された座標へと変換するための座標変換行列である。
【００９４】
表示モード７８は、現在の処理モードを示すデータであって、より具体的には、実世界画像と仮想空間画像とを同期させて合成表示する同期表示モードか、実世界画像と仮想空間画像とを同期させずに合成表示する非同期表示モードかを示すデータである。
【００９５】
マーカー認識モード７９は、現在の処理モードを示すデータであって、より具体的には、左実世界画像と右実世界画像のいずれか一方のみに対してマーカー認識処理を行う片画像認識モードか、左実世界画像と右実世界画像の両方に対してそれぞれマーカー認識処理を行う両画像認識モードかを示すデータである。
【００９６】
メイン実世界画像識別情報８０は、左実世界画像と右実世界画像のいずれがメイン実世界画像なのかを示すデータである。上記の片画像認識モードでは、メイン実世界画像に対してのみマーカー認識処理が行われ、他方の実世界画像（以下、サブ実世界画像と称す）に対してはマーカー認識処理は行われない。
【００９７】
各種変数８１は、画像表示プログラム７０の実行の際に用いられる変数であって、図１２に示すような変数を含む。これらの変数の意味については、以下の説明において随時説明する。
【００９８】
ゲーム装置１０の電源が投入されると、ゲーム装置１０の情報処理部３１（ＣＰＵ３１１）は、図示しないＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ３２等の各ユニットが初期化される。次に、データ保存用内部メモリ３５に記憶された画像表示プログラムがメインメモリ３２に読み込まれ、情報処理部３１のＣＰＵ３１１によって当該画像表示プログラムの実行が開始される。
【００９９】
以下、図１３〜図１９のフローチャートを参照して、画像表示プログラムに基づいて実行される処理の流れを説明する。なお、図１３〜図１９のフローチャートは、単なる一例に過ぎない。したがって、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判断ステップで利用される閾値も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、本実施形態では、図１３〜図１９のフローチャートの全てのステップの処理をＣＰＵ３１１が実行するものとして説明するが、図１３〜図１９のフローチャートの一部のステップの処理を、ＣＰＵ３１１以外のプロセッサや専用回路が実行するようにしてもよい。
【０１００】
（マーカー処理）
図１３は、画像表示プログラム７０に基づいてＣＰＵ３１１によって実行されるマーカー処理の流れを示すフローチャートである。マーカー処理は、後述するメイン処理と並列的に実行される処理であり、本実施形態では、ＣＰＵ３１１がアイドル状態のときに実行される。以下、マーカー処理の詳細について説明する。
【０１０１】
図１３のステップＳ１０において、ＣＰＵ３１１は、外側撮像部２３から両方の実世界画像（すなわち左実世界画像および右実世界画像）を取得したか否かを判断し、両方の実世界画像が取得されている場合には処理はステップＳ１１に進む。外側撮像部２３から取得された最新の左実世界画像は、最新左実世界画像７１Ｌとしてメインメモリ３２に格納され、最新の右実世界画像は、最新右実世界画像７１Ｒとしてメインメモリ３２に格納される。
【０１０２】
なお、前述のように、上側ハウジング２１において、外側撮像部（左）２３ａと外側撮像部（右）２３ｂは一定の間隔（例えば３．５ｃｍ、以下、撮像部間距離）だけ離れている。したがって、外側撮像部（左）２３ａと外側撮像部（右）２３ｂによって同時にマーカー６１を撮像した場合、図２０に示すように、外側撮像部（左）２３ａによって撮像された左実世界画像におけるマーカー６１の位置及び姿勢と、外側撮像部（右）２３ｂによって撮像された右実世界画像におけるマーカー６１の位置及び姿勢との間には、視差によるズレが生じる。
【０１０３】
ステップＳ１１において、ＣＰＵ３１１は、メイン実世界画像に対してマーカー認識処理を行う。より具体的には、パターンマッチング手法等によってメイン実世界画像にマーカー６１が含まれているか否かを判断し、メイン実世界画像にマーカー６１が含まれている場合には、メイン実世界画像におけるマーカー６１の位置および姿勢に基づいて、左変換行列７５Ｌまたは右変換行列７５Ｒを算出する（メイン実世界画像が左実世界画像である場合には、左変換行列７５Ｌを算出し、メイン実世界画像が右実世界画像である場合には、右変換行列７５Ｒを算出する）。
【０１０４】
なお、左変換行列７５Ｌは、左実世界画像におけるマーカー６１の位置および姿勢に基づいて計算される外側撮像部（左）２３ａの位置および姿勢を反映した行列である。より正確には、図２１に示すように、マーカー座標系（実世界におけるマーカー６１の位置を原点とし、マーカー６１の縦方向、横方向、法線方向の各方向を各軸とする座標系）で表された座標を、左実世界画像におけるマーカー６１の位置および姿勢に基づいて計算された外側撮像部（左）２３ａの位置および姿勢を基準とした外側撮像部（左）座標系で表される座標へと変換するための座標変換行列である。
【０１０５】
また、右変換行列７５Ｒは、右実世界画像におけるマーカー６１の位置および姿勢に基づいて計算される外側撮像部（右）２３ｂの位置および姿勢を反映した行列である。より正確には、図２２に示すように、マーカー座標系で表された座標を、右実世界画像におけるマーカー６１の位置および姿勢に基づいて計算された外側撮像部（右）２３ｂの位置および姿勢を基準とした外側撮像部（右）座標系で表される座標へと変換するための座標変換行列である。
【０１０６】
なお、マーカー認識精度に誤差が全く無く、かつゲーム装置１０に対する外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの取り付け精度に誤差が全く無いと仮定すると、右実世界画像のマーカー認識結果である右変換行列７５Ｒが示す外側撮像部（右）２３ｂの位置は、左実世界画像のマーカー認識結果である左変換行列７５Ｌが示す外側撮像部（左）２３ａの位置を、外側撮像部（左）座標系のｘ軸方向（ゲーム装置１０の横方向で
あり使用時の水平方向）に沿って一定距離（撮像部間距離）だけずらした位置となり、右変換行列７５Ｒが示す外側撮像部（右）２３ｂの姿勢と左変換行列７５Ｌが示す外側撮像部（左）２３ａの姿勢はゲーム装置１０における外側撮像部（左）２３ａと外側撮像部（右）２３ｂの取り付け状態と同じとなる。本実施例においては、ゲーム装置１０において外側撮像部（左）２３ａと外側撮像部（右）２３ｂは平行に取り付けられるように設計さているので、外側撮像部（左）座標系のｘ軸，ｙ軸，ｚ軸が、外側撮像部（右）座標系のｘ軸，ｙ軸，ｚ軸とそれぞれ平行となる。しかしながら実際には、マーカー認識精度にも、ゲーム装置１０に対する外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの取り付け精度にも誤差があるため、左変換行列７５Ｌが示す外側撮像部（左）２３ａの位置及び姿勢と、右変換行列７５Ｒが示す外側撮像部（右）２３ｂの位置及び姿勢は、理想的な関係にはならない。例えば、左変換行列７５Ｌと右変換行列７５Ｒは、外側撮像部（左）２３ａと外側撮像部（右）２３ｂが近すぎたり、離れすぎたり、外側撮像部（左）２３ａの姿勢と外側撮像部（右）２３ｂの姿勢が異なったりするような行列になる。また、外側撮像部（左）２３ａの姿勢と外側撮像部（右）２３ｂの姿勢が平行でないような行列になる。
【０１０７】
ここで、ＡＲでは、マーカー座標系を外側撮像部（左）座標系または外側撮像部（右）座標系に変換する行列を仮想カメラのビュー行列に指定することにより、実世界画像にＣＧ画像を合成することができるが、単に、左変換行列７５Ｌを左ビュー行列７６Ｌに指定し、右変換行列７５Ｒを右ビュー行列７６Ｒに指定して仮想空間画像を上側ＬＣＤ２２に立体表示する場合には、仮想オブジェクト６２が正常に立体視できないことがあり得る。そこで本実施形態では、後述する説明から明らかになるように、左実世界画像および右実世界画像のいずれか一方のマーカー認識結果（マーカー・カメラ変換行列）から計算される一方の仮想カメラの位置及び姿勢（ビュー行列）に基づいて、左仮想カメラ６３Ｌの位置及び姿勢と右仮想カメラ６３Ｒの位置及び姿勢が理想的な関係となるように、他方の仮想カメラの位置及び姿勢（ビュー行列）が決定される。
【０１０８】
なお、ステップＳ１１において、メイン実世界画像からマーカー６１が認識されなかった場合には、左変換行列７５Ｌまたは右変換行列７５Ｒにヌル値が格納され、これによって、左実世界画像または右実世界画像におけるマーカー６１の認識に失敗したことが記録される。
【０１０９】
ステップＳ１２において、ＣＰＵ３１１は、マーカー認識モードが片画像認識モードであるかどうかを判断する。そして、片画像認識モードである場合には、処理はステップＳ１３に進み、そうでない場合（すなわち両画像認識モードである場合）には、処理はステップＳ１４に進む。
【０１１０】
ステップＳ１３において、ＣＰＵ３１１は、左実世界画像及び右実世界画像のうち、メイン実世界画像ではない方の実世界画像（以下、サブ実世界画像と称す）のマーカー認識結果を“失敗”とみなす。より具体的には、メイン実世界画像が左実世界画像である場合には、右変換行列７５Ｒにヌル値を格納し、メイン実世界画像が右実世界画像である場合には、左変換行列７５Ｌにヌル値を格納する。
【０１１１】
ステップＳ１４において、ＣＰＵ３１１は、サブ実世界画像に対してマーカー認識処理を行う。より具体的には、パターンマッチング手法等によってサブ実世界画像にマーカー６１が含まれているか否かを判断し、サブ実世界画像にマーカー６１が含まれている場合には、サブ実世界画像におけるマーカー６１の位置および姿勢に基づいて、左変換行列７５Ｌまたは右変換行列７５Ｒを算出する（サブ実世界画像が左実世界画像である場合には、左変換行列７５Ｌを算出し、サブ実世界画像が右実世界画像である場合には、右変換行列７５Ｒを算出する）。
【０１１２】
ステップＳ１５において、ＣＰＵ３１１は、表示モードが同期表示モードであるかどうかを判断する。そして、同期表示モードである場合には、処理はステップＳ１７に進み、そうでない場合（すなわち非同期表示モードである場合）には、処理はステップＳ１６に進む。
【０１１３】
ステップＳ１６において、ＣＰＵ３１１は、最新左実世界画像７１Ｌ及び最新右実世界画像７１Ｒを、表示用左実世界画像７２Ｌ及び表示用右実世界画像７２Ｒとしてそれぞれメインメモリ３２に記憶する。そして、処理はステップＳ１０に戻る。
【０１１４】
ステップＳ１７において、ＣＰＵ３１１は、マーカー認識モードが片画像認識モードかどうかを判断する。そして、片画像認識モードである場合には、処理はステップＳ１８に進み、そうでない場合（すなわち両画像認識モードである場合）には、処理はステップＳ１９に進む。
【０１１５】
ステップＳ１８において、ＣＰＵ３１１は、メイン実世界画像のマーカー認識に成功したかどうかを判断する。より具体的には、ＣＰＵ３１１は、メイン実世界画像が左実世界画像である場合には、左変換行列７５Ｌにヌル値ではない有効な行列が格納されているかどうかを判断し、メイン実世界画像が右実世界画像である場合には、右変換行列７５Ｒにヌル値ではない有効な行列が格納されているかどうかを判断する。そして、メイン実世界画像のマーカー認識に成功したと判断された場合には、処理はステップＳ１６に進み、そうでない場合には、処理はステップＳ１０に戻る。
【０１１６】
ステップＳ１９において、ＣＰＵ３１１は、左実世界画像及び右実世界画像の少なくとも一方のマーカー認識に成功したかどうかを判断する。より具体的には、ＣＰＵ３１１は、左変換行列７５Ｌ及び右変換行列７５Ｒの両方に、ヌル値ではない有効な行列が格納されているかどうかを判断する。そして、左実世界画像及び右実世界画像の少なくとも一方のマーカー認識に成功したと判断された場合には、処理はステップＳ１６に進み、そうでない場合には、処理はステップＳ１０に戻る。
【０１１７】
（メイン処理）
図１４は、画像表示プログラム７０に基づいてＣＰＵ３１１によって実行されるメイン処理の流れを示すフローチャートである。メイン処理は、上述したマーカー処理と並列的に実行される処理である。以下、メイン処理の詳細について説明する。
【０１１８】
図１４のステップＳ２０において、ＣＰＵ３１１は、３次元の仮想空間の所定位置に仮想オブジェクト６２を配置する。本実施形態では、仮想空間の原点（ワールド座標系の原点）に仮想オブジェクト６２を配置する。
【０１１９】
ステップＳ２１において、ＣＰＵ３１１は、更新処理を実行する。この更新処理では、仮想オブジェクト６２を描画するために用いられる種々の変数を更新するための処理である。更新処理の詳細については後述する。
【０１２０】
ステップＳ２２において、ＣＰＵ３１１は、仮想オブジェクト処理を実行する。仮想オブジェクト処理とは、仮想空間に配置された仮想オブジェクト６２に関する処理であり、例えば、必要に応じて、仮想オブジェクト６２の大きさを変化させたり、仮想オブジェクト６２に所定の動作（仮想空間内で移動する。例えば、仮想空間の原点の周りを歩くような移動をさせると、マーカー座標系の原点の周りを歩くような表示がされる）を行わせたりする。なお、仮想オブジェクト６２の移動制御は、仮想空間のワールド座標系における仮想オブジェクトの位置座標を変更することにより実現される。
【０１２１】
ステップＳ２３において、ＣＰＵ３１１は、立体視ゼロ距離７３に応じて左実世界画像のうちの表示に使う範囲である描画範囲を決定する。より具体的には、図２３に示すように、外側撮像部２３から立体視ゼロ距離７３の値（例えば３０ｃｍ）だけ撮影方向に離れており、かつ外側撮像部（左）２３ａと外側撮像部（右）２３ｂから等距離にある点を立体視ゼロ点とし、外側撮像部（左）２３ａから見て当該立体視ゼロ点が中心にくるような範囲を、左実世界画像の描画範囲として決定する。当該範囲の横方向の長さは、例えば、図２３に示すように、外側撮像部（左）２３ａの撮影方向に垂直な直線を、外側撮像部（左）２３ａの画角を表す直線によって切り取った線分上での比として求めることができ、当該比を実世界画像の横方向の長さに対応させることによって、実世界画像上での範囲として決定される。なお、当該範囲の縦方向の長さについては、表示画面の縦横比に合うように、横方向の長さから決定される。
【０１２２】
なお、後述するステップＳ２７において右実世界画像の描画範囲を決定するときには、図２４に示すように、外側撮像部（右）２３ｂから見て当該立体視ゼロ点が中心にくるような範囲を、右実世界画像の描画範囲として決定する。これにより、上側ＬＣＤ２２に表示される左目用画像における立体視ゼロ点の位置と右目用画像における立体視ゼロ点の位置が、上側ＬＣＤ２２の画面上で一致することになり、ユーザーから見て画面と同じ奥行き位置に存在するように見える。
【０１２３】
ステップＳ２４において、ＣＰＵ３１１は、表示用左実世界画像７２Ｌにおける、ステップＳ２３で決定した描画範囲を、上側ＬＣＤ２２へ供給すべき左目用画像を一時的に記憶するためのＶＲＡＭ３１３内の所定の記憶領域（以下、左フレームバッファと称す）に描画する。
【０１２４】
ステップＳ２５において、ＣＰＵ３１１は、ＡＲＡｃｔｉｖｅ（図１２参照）の値がｔｒｕｅかどうかを判断する。ＡＲＡｃｔｉｖｅとは、実世界画像に仮想オブジェクトを合成表示することができる状況かどうかを示す変数（フラグ）であって、実世界画像に仮想オブジェクトを合成表示することができる状況では、その値がｔｒｕｅに設定され、実世界画像に仮想オブジェクトを合成表示することができない状況（例えば、マーカー６１が全く認識できていない状況など）では、その値がｆａｌｓｅ（初期値）に設定される。ＡＲＡｃｔｉｖｅの値がｔｒｕｅである場合には、処理はステップＳ２６に進み、そうでない場合（すなわちＡＲＡｃｔｉｖｅの値がｆａｌｓｅである場合）には、処理はステップＳ２７に進む。
【０１２５】
ステップＳ２６において、ＣＰＵ３１１は、例えば図２３に示すように、左仮想カメラ６３Ｌから見た仮想空間（以下、左目用の仮想空間画像と称す）を左フレームバッファに上書きする（実際には、典型的には、ＣＰＵ３１１からの指示にしたがってＧＰＵ３１２によって描画される）。これにより、図２６に示すように、ステップＳ２４で左フレームバッファに描画された左実世界画像に左目用の仮想空間画像が合成される。左フレームバッファに描画された画像は、所定のタイミングで左目用画像として上側ＬＣＤ２２へ供給されることになる。なお、当該左目用の仮想空間画像においては、仮想空間の背景は透明であり、そのため、実世界画像に仮想空間画像を合成することで、実世界画像上に仮想オブジェクト６２が存在するような画像が生成される。
【０１２６】
ステップＳ２７において、ＣＰＵ３１１は、立体視ゼロ距離７３に応じて右実世界画像の描画範囲を決定する。なお、描画範囲を決定するための処理の詳細は左実世界画像の描画範囲の決定の処理と同じであるため省略する。
【０１２７】
ステップＳ２８において、ＣＰＵ３１１は、表示用右実世界画像７２Ｒにおける、ステ
ップＳ２７で決定した描画範囲を、上側ＬＣＤ２２へ供給すべき右目用画像を一時的に記憶するためのＶＲＡＭ３１３内の所定の記憶領域（以下、右フレームバッファと称す）に描画する。
【０１２８】
ステップＳ２９において、ＣＰＵ３１１は、ＡＲＡｃｔｉｖｅの値がｔｒｕｅかどうかを判断する。ＡＲＡｃｔｉｖｅの値がｔｒｕｅである場合には、処理はステップＳ３０に進み、そうでない場合（すなわちＡＲＡｃｔｉｖｅの値がｆａｌｓｅである場合）には、処理はステップＳ３１に進む。
【０１２９】
ステップＳ３０において、ＣＰＵ３１１は、右仮想カメラ６３Ｒから見た仮想空間（以下、右目用の仮想空間画像と称す）を右フレームバッファに上書きする（実際には、典型的には、ＣＰＵ３１１からの指示にしたがってＧＰＵ３１２によって描画される）。これにより、ステップＳ２８で右フレームバッファに描画された右実世界画像に右目用の仮想空間画像が合成される。右フレームバッファに描画された画像は、所定のタイミングで右目用画像として上側ＬＣＤ２２へ供給されることになる。
【０１３０】
ステップＳ３１において、ＣＰＵ３１１は、上側ＬＣＤ２２からの割り込み信号（垂直同期割り込み）を待機し、当該割り込み信号が発生した場合には、処理はステップＳ２１に戻る。これにより、ステップＳ２１〜Ｓ３１の処理が一定の周期（例えば、６０分の１秒の周期）で繰り返される。
【０１３１】
（更新処理）
次に、メイン処理におけるステップＳ２１の更新処理の詳細について、図１５のフローチャートを参照して説明する。
【０１３２】
図１５のステップＳ４０において、ＣＰＵ３１１は、前述のマーカー処理におけるマーカー認識結果（すなわち、左変換行列７５Ｌ及び右変換行列７５Ｒ）が更新されたかどうかを判断し、更新されている場合には処理はステップＳ４１に進み、まだ更新されていない場合には処理はステップＳ４４に進む。
【０１３３】
ステップＳ４１において、ＣＰＵ３１１は、左実世界画像及び右実世界画像の両方の実世界画像のマーカー認識に成功しているかどうかを判断する。そして、両方の実世界画像のマーカー認識に成功している場合には、処理はステップＳ４２に進み、いずれか一方もしくは両方の実世界画像のマーカー認識に失敗している場合には、処理はステップＳ４４に進む。
【０１３４】
ステップＳ４２において、ＣＰＵ３１１は、ＥｙｅＷｉｄｔｈ（図１２参照）の値が０であるか、または、ＥｙｅＭｅａｓｕｒｅ（図１２参照）の値がｔｒｕｅであるかどうかを判断する。ＥｙｅＷｉｄｔｈとは、左変換行列７５Ｌと右変換行列７５Ｒとを用いて算出される、外側撮像部（左）２３ａと外側撮像部（右）２３ｂとの位置関係における、両撮像部間の距離を示す。なお、ここで両撮像部間の距離とは、実世界のスケールとして求める必要はなく、仮想空間での距離として求めてもよい。具体的には、左変換行列７５Ｌが示す、マーカー６１の位置と外側撮像部（左）２３ａの位置との関係と、右変換行列７５Ｒが示すマーカー６１の位置と外側撮像部（右）２３ｂの位置との関係とから、マーカー６１の位置を基準として、外側撮像部（左）２３ａの位置と外側撮像部（右）２３ｂの位置との関係を求めた場合の距離を求めている。なお、当該距離が未確定の場合には、その値が０（初期値）に設定される。なお、本実施形態では、ＥｙｅＷｉｄｔｈはスカラー値であるが、ＥｙｅＷｉｄｔｈを、左変換行列７５Ｌが示す外側撮像部（左）２３ａの位置と右変換行列７５Ｒが示す外側撮像部（右）２３ｂの位置との間を結ぶベクトルにしてもよい。また、ＥｙｅＷｉｄｔｈを、左変換行列７５Ｌが示す外側撮像部（左）２３ａの
位置と右変換行列７５Ｒが示す外側撮像部（右）２３ｂの位置との間を結ぶベクトルの、撮影方向に直交する成分の長さにしてもよい。なお、後述の通り、ＥｙｅＷｉｄｔｈは、仮想空間における左仮想カメラ６３Ｌと右仮想カメラ６３Ｒの距離（間隔）の設定に用いる。ＥｙｅＭｅａｓｕｒｅとは、ＥｙｅＷｉｄｔｈを再計算すべきか否かを示す変数（フラグ）であって、ＥｙｅＷｉｄｔｈを再計算すべき状況では、その値がｔｒｕｅに設定され、そうでない状況では、その値がｆａｌｓｅ（初期値）に設定される。ＥｙｅＷｉｄｔｈの値が０であるか、または、ＥｙｅＭｅａｓｕｒｅの値がｔｒｕｅである場合には、処理はステップＳ４３に進み、そうでない場合（すなわちＥｙｅＷｉｄｔｈの値が０以外の値であり、なおかつ、ＥｙｅＭｅａｓｕｒｅの値がｆａｌｓｅである場合）には、処理はステップＳ４４に進む。
【０１３５】
ステップＳ４３において、ＣＰＵ３１１は、仮想カメラ間隔決定処理を実行する。仮想カメラ間隔決定処理では、左仮想カメラ６３Ｌと右仮想カメラ６３Ｒの間隔（すなわちＥｙｅＷｉｄｔｈ）が適宜に決定および更新される。仮想カメラ間隔決定処理の詳細については後述する。
【０１３６】
ステップＳ４４において、ＣＰＵ３１１は、ビュー行列生成処理を実行する。ビュー行列生成処理では、すでに決定されている左仮想カメラ６３Ｌと右仮想カメラ６３Ｒの間隔（すなわちＥｙｅＷｉｄｔｈ）に基づいて、左ビュー行列７６Ｌと右ビュー行列７６Ｒが計算される。ビュー行列生成処理の詳細については後述する。
【０１３７】
ステップＳ４５において、ＣＰＵ３１１は、メイン実世界画像設定処理を実行する。メイン実世界画像設定処理では、左実世界画像と右実世界画像の間で、メイン実世界画像が適宜に切り替えられる（これは、外側撮像部（左）２３ａと外側撮像部（右）との間で、メイン撮像部を切り替えることと等価である）。メイン実世界画像設定処理の詳細については後述する。
【０１３８】
ステップＳ４６において、ＣＰＵ３１１は、表示モード切替処理を実行し、そして更新処理を終了する。表示モード切替処理では、同期表示モードと非同期表示モードの間で、表示モードが適宜に切り替えられる。表示モード切替処理の詳細については後述する。
【０１３９】
（仮想カメラ間隔決定処理）
次に、更新処理（図１５）におけるステップＳ４３の仮想カメラ間隔決定処理の詳細について、図１６のフローチャートを参照して説明する。ここでは、前述の通り、左変換行列７５Ｌが示すマーカー６１の位置に対する外側撮像部（左）２３ａの位置と右変換行列７５Ｒが示すマーカー６１の位置に対する外側撮像部（右）２３ｂの位置との距離を求める。この距離を計算する方法はいくつかあるが、本実施例では、計算方法の一例として、以下の方法を採用する。
【０１４０】
図１６のステップＳ５０において、ＣＰＵ３１１は、左変換行列７５Ｌおよび右変換行列７５Ｒに基づいて、座標Ｖ０を計算する。以下、図２７〜図２９を参照して、Ｖ０の計算方法を説明する。なお、図２７〜図２９においては、左実世界画像に基づいて計算される、マーカー６１に対する外側撮像部（左）２３ａの相対位置及び相対姿勢と、右実世界画像に基づいて計算される、マーカー６１に対する外側撮像部（右）２３ｂの相対位置及び相対姿勢とが、前述したように必ずしも理想的な関係とはならないことを強調するために、外側撮像部（左）２３ａの撮影方向と外側撮像部（右）２３ｂの撮影方向が互いに大きくずれているように図示している。
【０１４１】
まず、図２７に示すように、（０，０，０）に対して、左変換行列７５Ｌを乗算すると、外側撮像部（左）座標系で表されたマーカー座標系の原点の座標Ｖ１が求まる。座標Ｖ
１は、左実世界画像に基づいて計算された、外側撮像部（左）２３ａに対するマーカー６１の相対位置を表している。この座標Ｖ１が外側撮像部（右）座標系で表された座標であると見なすと、座標Ｖ１が示す位置は、外側撮像部（右）座標系では図２８に示す位置へと移動する。この座標Ｖ１に対して、さらに右変換行列７５Ｒの逆行列を乗算する。右変換行列７５Ｒの逆行列を乗算することは、外側撮像部（右）座標系で表された座標をマーカー座標系で表された座標に変換することに相当する。したがって、上記逆行列の乗算は、外側撮像部（右）座標系で表された座標Ｖ１（図２８）を、図２９に示すように、マーカー座標系で表された座標Ｖ０へと変換することになる。このようにして計算された座標Ｖ０は、左実世界画像に基づいて計算された、外側撮像部（左）２３ａに対するマーカー６１の相対位置（すなわち、外側撮像部(左）座標系で表されるマーカー座標系の原点の
座標）と、右実世界画像に基づいて計算された、外側撮像部（右）２３ｂに対するマーカー６１の相対位置（すなわち、外側撮像部(右）座標系で表されるマーカー座標系の原点
の座標）との差を示している。本実施形態では、このマーカー６１の相対位置の差を、外側撮像部(左）２３ａと外側撮像部(右）２３ｂの取り付け位置の差によって生じるものであると考えて、外側撮像部(左）２３ａと外側撮像部(右）２３ｂの取り付け位置を推定している。
【０１４２】
ステップＳ５１において、ＣＰＵ３１１は、左変換行列７５Ｌに基づいて、外側撮像部（左）座標系で表されたマーカー座標系の原点の座標Ｖ１を計算する。具体的には、（０，０，０）に対して、左変換行列７５Ｌを乗算することで、外側撮像部（左）座標系で表されたマーカー座標系の原点の座標Ｖ１が求まる。なお、ここでは、外側撮像部（左）座標系で表されたマーカー座標系の原点の座標をＶ１としたが、これに替えて、外側撮像部（右）座標系で表されたマーカー座標系の原点の座標をＶ１としてもよい。
【０１４３】
ステップＳ５２において、ＣＰＵ３１１は、ステップＳ５０で求めたＶ０の大きさ（原点からの距離）（図２９参照）を、ｅｗ（図１２参照）に格納し、ステップＳ５１で求めたＶ１のｚ軸値の絶対値（図２７参照）を、ｅｄ（図１２参照）に格納する。ただし、ｅｗの値は、マーカー座標系における長さの単位で計算されており、実世界における長さの単位と一致するものではない。そして、前述の通り、外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間の実距離は既知（例えば３．５ｃｍ）であるので、この実距離とｅｗの値を用いて、実世界における長さの単位と仮想空間における長さの単位とを一致させることができる。なお、マーカー６１のサイズが既知であれば、マーカー画像の認識結果に基づいて求められるマーカー６１のサイズと、実世界におけるマーカー６１のサイズとの対応関係から、実世界における長さの単位と仮想空間における長さの単位とを一致させることもできる。
【０１４４】
なお、ゲーム装置１０に対する外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの取り付け精度の誤差により、外側撮像部（左）２３ａの撮影方向と外側撮像部（右）２３ｂの撮影方向が平行になっていない場合には、このようにして計算される外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間の距離（ｅｗ）は、外側撮像部２３とマーカー６１との間の撮影方向についての距離に応じて変動する。それゆえ、後述するように、外側撮像部２３とマーカー６１との間の撮影方向についての距離が変化したときには、外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間の距離（後述するＥｙｅＷｉｄｔｈ）は、そのときのマーカー・カメラ変換行列を用いて再計算される。
【０１４５】
なお、本実施形態では、ｅｗをＶ０の大きさとしたが、Ｖ０の「左変換行列７５Ｌにより示される外側撮像部（左）２３ａの位置と右変換行列７５Ｒにより示される外側撮像部（右）２３ｂの位置を結ぶ方向」の成分としてもよい。
【０１４６】
このようにして計算されたｅｗは「外側撮像部（左）２３ａと外側撮像部（右）２３ｂ
との間のマーカー座標系における間隔」であるが、これを左仮想カメラ６３Ｒと右仮想カメラ６３Ｒとの間の間隔として用いる（後述のステップＳ６５またはＳ６８）。
【０１４７】
なお、ｅｗを求める方法は、上述した方法以外にもある。例えば、（０，０，０）に左変換行列７５Ｌを乗算することによって、外側撮像部（左）座標系で表されたマーカー座標系の原点の座標Ｖｌ（すなわち、外側撮像部（左）２３ａに対するマーカー６１の相対位置）を求めるとともに、（０，０，０）に右変換行列７５Ｒを乗算することによって、外側撮像部（右）で表されたマーカー座標系の原点の座標Ｖｒ（すなわち、外側撮像部（右）２３ｂに対するマーカー６１の相対位置）を求め、こうして求めた座標Ｖｌと座標Ｖｒの間の距離を計算することによって、ｅｗを求めても構わない。
【０１４８】
ステップＳ５３において、ＣＰＵ３１１は、ＬｏｇＩｎｄｅｘ（図１２参照）の値が１（初期値）より大きいかどうかを判断し、１より大きい場合には処理はステップＳ５７に進み、そうでない場合（すなわち１である場合）には処理はステップＳ５４に進む。ＬｏｇＩｎｄｅｘは、後述する配列（ＬｏｇＷｉｄｔｈ、ＬｏｇＤｅｐｔｈ）の各要素を識別するための変数である。
【０１４９】
ステップＳ５４において、ＣＰＵ３１１は、ステップＳ５２で求めたｅｗの値を配列ＬｏｇＷｉｄｔｈ［ＬｏｇＩｎｄｅｘ］に格納する。さらに、ステップＳ５２で求めたｅｄの値を配列ＬｏｇＤｅｐｔｈ［ＬｏｇＩｎｄｅｘ］に格納する。さらに、ＬｏｇＩｎｄｅｘの値をインクリメントする。ＬｏｇＷｉｄｔｈは、ｅｗの値を複数保持しておくための配列変数である。ＬｏｇＤｅｐｔｈは、ｅｄの値を複数保持しておくための配列変数である。
【０１５０】
ステップＳ５５において、ＣＰＵ３１１は、ＬｏｇＩｎｄｅｘの値がＬｏｇＭａｘの値よりも大きいかどうかを判定し、大きい場合には処理はステップＳ５６に進み、そうでない場合（すなわちＬｏｇＩｎｄｅｘの値がＬｏｇＭａｘの値以下の場合）には、仮想カメラ間隔決定処理を終了する。
【０１５１】
ステップＳ５６において、ＣＰＵ３１１は、ＬｏｇＷｉｄｔｈの各要素の平均値を計算し、当該平均値をＥｙｅＷｉｄｔｈに格納する。さらに、ＬｏｇＤｅｐｔｈの各要素の平均値を計算し、当該平均値をＥｙｅＤｅｐｔｈに格納する。さらに、ＥｙｅＭｅａｓｕｒｅの値をｆａｌｓｅに設定する。さらに、マーカー認識モード７９を、片画像認識モードに設定する。ＥｙｅＤｅｐｔｈとは、左変換行列７５Ｌが示す外側撮像部（左）２３ａのマーカー座標系における位置を示す座標（または右変換行列７５Ｒが示す外側撮像部（右）２３ｂのマーカー座標系における位置を示す座標）から、マーカー座標系の原点までの奥行き距離（深さ：撮影方向についての距離）を示す変数であって、後述する図１７のステップＳ７２における判断の際の基準値として用いられる。ＥｙｅＤｅｐｔｈの初期値は０である。ステップＳ５６の処理が終了すると、仮想カメラ間隔決定処理は終了する。
【０１５２】
ステップＳ５７において、ＣＰＵ３１１は、ステップＳ５２で求めたｅｗの値とＬｏｇＷｉｄｔｈ［１］の値の差の絶対値が、ＬｏｇＷｉｄｔｈ［１］の値の１０％よりも小さく、かつ、ステップＳ５２で求めたｅｄの値とＬｏｇＤｅｐｔｈ［１］の値の差の絶対値が、ＬｏｇＤｅｐｔｈ［１］の値の１０％よりも小さいかどうかを判断する。そして、ステップＳ５７の判断結果が肯定である場合には処理はステップＳ５４に進み、ステップＳ５７の判断結果が否定である場合には処理はステップＳ５８に進む。
【０１５３】
ステップＳ５８において、ＣＰＵ３１１は、ＬｏｇＩｎｄｅｘの値を１（初期値）にリセットして、仮想カメラ間隔決定処理を終了する。
【０１５４】
以上のように、仮想カメラ間隔決定処理では、左実世界画像に含まれるマーカー６１の位置及び姿勢に基づいて計算される外側撮像部（左）２３ａの位置と、右実世界画像に含まれるマーカー６１の位置及び姿勢に基づいて計算される外側撮像部（右）２３ｂの位置とに基づいて、ｅｗとｅｄが計算される。このようにして計算されたｅｗの値とｅｄの値が、ＬｏｇＷｉｄｔｈとＬｏｇＤｅｐｔｈに順次格納される。このとき、新たに計算されたｅｗの値が、ＬｏｇＷｉｄｔｈに最初に格納されたｅｗの値（すなわちＬｏｇＷｉｄｔｈ［１］の値）を基準とした所定範囲（±１０％）から外れた場合や、新たに計算されたｅｄの値が、ＬｏｇＤｅｐｔｈに最初に格納されたｅｄの値（すなわちＬｏｇＤｅｐｔｈ［１］の値）を基準とした所定範囲（±１０％）から外れた場合には、ＬｏｇＷｉｄｔｈとＬｏｇＤｅｐｔｈに再び最初からｅｗの値とｅｄの値を格納し直す。したがって、逐次計算されるｅｗの値とｅｄの値に大きな変動が見られない場合（すなわち、ｅｗの値とｅｄの値が一定期間、ある程度安定している場合）にのみ、それらのｅｗの値の平均値とそれらのｅｄの値の平均値が、ＥｙｅＷｉｄｔｈおよびＥｙｅＤｅｐｔｈに格納される。
【０１５５】
ところで、ユーザがゲーム装置１０を移動させたり回転させたりしているときには、外側撮像部２３によって撮像される左実世界画像および右実世界画像がぼけやすく、マーカー６１の認識精度が著しく低下し、逐次検出されるｅｗの値やｅｄの値が大きく変動しやすい。そこで、このような状況で検出される信頼性の低いｅｗの値およびｅｄの値に基づいてＥｙｅＷｉｄｔｈの値およびＥｙｅＤｅｐｔｈの値を決定することは避けるべきである。よって、本実施形態では、逐次計算されるｅｗの値とｅｄの値に大きな変動が見られない場合にのみ、それらの値に基づいてＥｙｅＷｉｄｔｈの値およびＥｙｅＤｅｐｔｈの値を決定している。また、複数回計算されたｅｗの値およびｅｄの値の平均値をＥｙｅＷｉｄｔｈの値およびＥｙｅＤｅｐｔｈの値として用いることにより、ＥｙｅＷｉｄｔｈの値およびＥｙｅＤｅｐｔｈの値の精度を高めることができる。
【０１５６】
（ビュー行列生成処理）
次に、更新処理（図１５）におけるステップＳ４４のビュー行列生成処理の詳細について、図１７のフローチャートを参照して説明する。
【０１５７】
図１７のステップＳ６０において、ＣＰＵ３１１は、ＥｙｅＷｉｄｔｈが０より大きいかどうかを判断し、０より大きい場合には処理はステップＳ６３に進み、そうでない場合（すなわち、０である場合）には処理はステップＳ６１に進む。
【０１５８】
ステップＳ６１において、ＣＰＵ３１１は、表示モードが同期表示モードであるかどうかを判断する。そして、同期表示モードである場合には、ビュー行列生成処理を終了し、そうでない場合（すなわち非同期表示モードである場合）には、処理はステップＳ６２に進む。
【０１５９】
ステップＳ６２において、ＣＰＵ３１１は、ＡＲＡｃｔｉｖｅの値をｆａｌｓｅに設定する。そして、ビュー行列生成処理を終了する。
【０１６０】
ステップＳ６３において、ＣＰＵ３１１は、左変換行列７５Ｌを参照して、左実世界画像のマーカー認識に成功しているかどうかを判断し、左実世界画像のマーカー認識に成功している場合には処理はステップＳ６４に進み、そうでない場合（すなわち、左変換行列７５Ｌの値がヌル値である場合）には処理はステップＳ６６に進む。
【０１６１】
ステップＳ６４において、ＣＰＵ３１１は、左変換行列７５Ｌの値を、左ビュー行列７６Ｌに格納する。これは、左実世界画像に含まれるマーカー６１の位置及び姿勢に基づいて計算されたマーカー座標系における外側撮像部（左）２３ａの位置及び姿勢を、左目用の仮想空間画像を生成するための左仮想カメラ６３Ｌの位置及び姿勢としてそのまま扱う
ことを意味する。
【０１６２】
ステップＳ６５において、ＣＰＵ３１１は、左ビュー行列７６Ｌの値に対して平行移動行列（−ＥｙｅＷｉｄｔｈ，０，０）を乗算した結果の値を、右ビュー行列７６Ｒに格納する。これは、図３０に示すように、前述のステップＳ６４において設定された仮想空間のワールド座標系における左仮想カメラ６３Ｌの位置から、左仮想カメラ座標系のｘ軸の正方向にＥｙｅＷｉｄｔｈの値だけずらした位置を、右目用の仮想空間画像を生成するための右仮想カメラ６３Ｒの位置として扱うことを意味する。また、右仮想カメラ６３Ｒの姿勢は、左仮想カメラ６３Ｌの姿勢と同じとなる（すなわち、左仮想カメラ座標系のｘ軸，ｙ軸，ｚ軸が、右仮想カメラ座標系のｘ軸，ｙ軸，ｚ軸とそれぞれ平行となる）。これにより、左仮想カメラ６３Ｌの位置及び姿勢と、右仮想カメラ６３Ｒの位置及び姿勢との整合性が保たれるので、上側ＬＣＤ２２において正常に立体視できるように仮想オブジェクト６２を表示することができる。
【０１６３】
ステップＳ６６において、ＣＰＵ３１１は、右変換行列７５Ｒを参照して、右実世界画像のマーカー認識に成功しているかどうかを判断し、右実世界画像のマーカー認識に成功している場合には処理はステップＳ６７に進み、そうでない場合（すなわち、右変換行列７５Ｒの値がヌル値である場合）にはビュー行列生成処理を終了する。
【０１６４】
ステップＳ６７において、ＣＰＵ３１１は、右変換行列７５Ｒの値を、右ビュー行列７６Ｒに格納する。これは、右実世界画像に含まれるマーカー６１の位置及び姿勢に基づいて計算されたマーカー座標系における外側撮像部（右）２３ｂの位置及び姿勢を、右目用の仮想空間画像を生成するための右仮想カメラ６３Ｒの位置及び姿勢としてそのまま扱うことを意味する。
【０１６５】
ステップＳ６８において、ＣＰＵ３１１は、右ビュー行列７６Ｒの値に対して平行移動行列（ＥｙｅＷｉｄｔｈ，０，０）を乗算した結果の値を、左ビュー行列７６Ｌに格納する。これは、図３１に示すように、前述のステップＳ６７において設定された仮想空間のワールド座標系における右仮想カメラ６３Ｒの位置から、右仮想カメラ座標系のｘ軸の負方向にＥｙｅＷｉｄｔｈの値だけずらした位置を、左目用の仮想空間画像を生成するための左仮想カメラ６３Ｌの位置として扱うことを意味する。また、左仮想カメラ６３Ｌの姿勢は、右仮想カメラ６３Ｒの姿勢と同じとなる（すなわち、左仮想カメラ座標系のｘ軸，ｙ軸，ｚ軸が、右仮想カメラ座標系のｘ軸，ｙ軸，ｚ軸とそれぞれ平行となる）。これにより、左仮想カメラ６３Ｌの位置及び姿勢と、右仮想カメラ６３Ｒの位置及び姿勢との整合性が保たれるので、上側ＬＣＤ２２において正常に立体視できるように仮想オブジェクト６２を表示することができる。
【０１６６】
このように、本実施例では、一方の仮想カメラ（例えば、左仮想カメラ６３Ｌ）の位置および姿勢については、一方の外側撮像部（例えば、外側撮像部（左）２３ａ）の撮影画像から算出された「マーカー・カメラ変換行列」を用いて設定するが（より具体的には、そのまま用いる）、他方の仮想カメラ（例えば、右仮想カメラ６３Ｒ）の位置および姿勢については、他方の外側撮像部（例えば、外側撮像部（右）２３ｂ）の撮影画像から算出された「マーカー・カメラ変換行列」を用いずに設定する。
【０１６７】
ステレオカメラでＡＲの立体視表示をおこなう場合においては、仮想カメラは右用と左用の２つを設定する必要があり、また、「マーカー・カメラ変換行列」は外側撮像部（左）２３ａによる変換行列（左変換行列２５Ｌ）と外側撮像部（右）２３ｂによる変換行列（右変換行列２５Ｒ）がある。本実施形態では、各仮想カメラ６３Ｌ，６３Ｒを設定するときに、各変換行列２５Ｌ，２５Ｒを用いるのではなくて、１つの変換行列を設定して（変換行列２５Ｌ，２５Ｒの一方の変換行列をそのまま用いて、または、両方の変換行列２
５Ｌ，２５Ｒから別の新たな１つの変換行列を生成して（平均位置、平均姿勢とするなど））、その１つの変換行列を用いて両方の仮想カメラ６３Ｌ，６３Ｒの位置および姿勢を設定する。これにより、ＡＲ認識における精度の問題を解消することができる。
【０１６８】
ステップＳ６９において、ＣＰＵ３１１は、ＡＲＡｃｔｉｖｅの値をｔｒｕｅに設定する。これにより、実世界画像に対する仮想オブジェクト６２の合成表示が開始または再開される。
【０１６９】
ステップＳ７０において、ＣＰＵ３１１は、ＥｙｅＭｅａｓｕｒｅの値がｔｒｕｅかどうかを判断し、ｔｒｕｅである場合にはビュー行列生成処理を終了し、そうでない場合（すなわちｆａｌｓｅである場合）には処理はステップＳ７１に進む。
【０１７０】
ステップＳ７１において、ＣＰＵ３１１は、ステップＳ６４またはステップＳ６８で決定された左ビュー行列７６Ｌに基づいて、左仮想カメラ座標系で表された仮想空間の原点の座標Ｖを計算する。具体的には、図３２に示すように、（０，０，０）に対して左ビュー行列７６Ｌを乗算することで、左仮想カメラ座標系で表された仮想空間の原点の座標Ｖが求まる。なお、ここでは、左仮想カメラ座標系で表された仮想空間の原点の座標をＶとしたが、これに替えて、ステップＳ６５またはステップＳ６７で決定された右ビュー行列７６Ｒに基づいて計算された、右仮想カメラ座標系で表された仮想空間の原点の座標をＶとしてもよい。このようにして求められたＶは、外側撮像部（左）座標系におけるマーカー６１の位置と実質的に同一である（ただし、このＶの値は、仮想空間またはマーカー座標系における長さの単位で計算されており、実世界における長さの単位と一致するものではない。）。
【０１７１】
ステップＳ７２において、ＣＰＵ３１１は、Ｖのｚ座標値の絶対値（｜Ｖ．ｚ｜）とＥｙｅＤｅｐｔｈの値との差の絶対値が、ＥｙｅＤｅｐｔｈの値の２０％よりも大きいかどうかを判断し、大きい場合には処理はステップＳ７３に進み、そうでない場合にはビュー行列生成処理を終了する。｜Ｖ．ｚ｜は、外側撮像部２３からマーカー６１までの撮影方向についての距離（深さ）と実質的に同一である。すなわち、ステップＳ７２では、仮想カメラ間隔決定処理（図１６）においてＥｙｅＷｉｄｔｈの値を計算したときを基準として、外側撮像部２３からマーカー６１までの奥行き距離（深さ）が、±２０％の範囲を超えて変化したかどうかを判断している。
【０１７２】
ステップＳ７３において、ＣＰＵ３１１は、ＥｙｅＭｅａｓｕｒｅの値をｔｒｕｅに設定し、さらに、ＬｏｇＩｎｄｅｘの値を１にリセットし、さらに、マーカー認識モード７９を両画像認識モードに設定して、ビュー行列生成処理を終了する。この結果、仮想カメラ間隔決定処理によるＥｙｅＷｉｄｔｈの計算処理が再び開始されることになる。
【０１７３】
上記のように、仮想カメラ間隔決定処理において、ＥｙｅＷｉｄｔｈの値を前回計算したときを基準として、外側撮像部２３からマーカー６１までの奥行き距離（深さ）が所定範囲を超えて変化したときに、ＥｙｅＷｉｄｔｈを再計算する理由は、ゲーム装置１０に対する外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの取り付け精度の誤差により、外側撮像部２３からマーカー６１までの奥行き距離（深さ）に応じて最適な仮想カメラ間隔（ＥｙｅＷｉｄｔｈ）が変化するからである。例えば、外側撮像部（左）２３ａの撮影方向と外側撮像部（右）２３ｂの撮影方向が平行になっていない状況において、図３３に示すように外側撮像部２３からマーカー６１までの奥行距離がＤ１であるときに仮想カメラ間隔決定処理において計算されるＥｙｅＷｉｄｔｈの値をＥｙｅＷｉｄｔｈ１とすると、仮想空間において、左仮想カメラ６３Ｌと右仮想カメラ６３Ｒは、図３４に示すようにＥｙｅＷｉｄｔｈ１の間隔を開けて配置されるのが適切である（そうすることによって、例えば仮想空間の原点に配置した仮想オブジェクトが、実世界画像のマーカー６１上
に実在するかのように、適切に立体表示されるようになる。）。そして、図３５に示すように外側撮像部２３からマーカー６１までの奥行距離がＤ１よりも小さいＤ２に変化した場合には、仮想カメラ間隔決定処理において計算されるＥｙｅＷｉｄｔｈの値は、ＥｙｅＷｉｄｔｈ１よりも小さいＥｙｅＷｉｄｔｈ２となり、仮想空間において、左仮想カメラ６３Ｌと右仮想カメラ６３Ｒは、図３６に示すようにＥｙｅＷｉｄｔｈ２の間隔を開けて配置されるのが適切である。
【０１７４】
（メイン実世界画像設定処理）
次に、更新処理（図１５）におけるステップＳ４５のメイン実世界画像設定処理の詳細について、図１８のフローチャートを参照して説明する。
【０１７５】
図１８のステップＳ８０において、ＣＰＵ３１１は、ＡＲＡｃｔｉｖｅの値がｔｒｕｅかどうかを判断し、ｔｒｕｅである場合には、処理はステップＳ８１に進み、そうでない場合（すなわちＡＲＡｃｔｉｖｅの値がｆａｌｓｅである場合）には、メイン実世界画像設定処理を終了する。
【０１７６】
ステップＳ８１において、ＣＰＵ３１１は、左射影行列７７Ｌおよび右射影行列７７Ｒを生成する。左射影行列７７Ｌは、左仮想カメラ６３Ｌから見た仮想空間の描画範囲を規定する行列であって、本実施形態では、図３７に示すように、メイン処理のステップＳ２３で決定した左実世界画像の描画範囲に対応するような左射影行列７７Ｌが生成される。右射影行列７７Ｒは、右仮想カメラ６３Ｒから見た仮想空間の描画範囲を規定する行列であって、本実施形態では、図３８に示すように、メイン処理のステップＳ２７で決定した右実世界画像の描画範囲に対応するような右射影行列７７Ｒが生成される。
【０１７７】
具体的には、左仮想カメラ６３Ｌの射影行列は、外側撮像部（左）２３ａの水平方向の画角と、当該左仮想カメラの水平方向の画角との比が、左実世界画像の横方向の長さにおける描画範囲の横方向の位置および大きさを表す比と、同じになるような画角を持つ視体積を定義する射影行列として設定される。
【０１７８】
ステップＳ８２において、ＣＰＵ３１１は、メイン実世界画像が左実世界画像かどうかを判断し、メイン実世界画像が左実世界画像である場合には処理はステップＳ８３に進み、そうでない場合（すなわち、メイン実世界画像が右実世界画像である場合）には処理はステップＳ８６に進む。
【０１７９】
ステップＳ８３において、ＣＰＵ３１１は、（０，０，０，１）に左ビュー行列７６Ｌおよび左射影行列７７Ｌを乗算することによって、ベクトルＶを求める。
【０１８０】
ステップＳ８４において、ＣＰＵ３１１は、ベクトルＶの第１成分（ｘ）を第４成分（ｗ）で乗算した結果の値（Ｖ．ｘ／Ｖ．ｗ）が０．５より大きいかどうかを判断し、０．５より大きい場合には処理はステップＳ８５に進み、そうでない場合にはメイン実世界画像設定処理を終了する。上記のＶ．ｘ／Ｖ．ｗの値は、左目用の仮想空間画像上で、仮想空間のワールド座標系の原点が、画像の左右方向のどの位置に存在するかを示している（なお、「左目用の仮想空間画像上で、仮想空間のワールド座標系の原点が、画像の左右方向のどの位置に存在するか」は、「外側撮像部（左）２３ａの撮影画像上で、マーカー座標系の原点が、画像の左右方向のどの位置に存在するか」と等価である）。仮想空間のワールド座標系の原点が左目用の仮想空間画像の中央に位置するときは、Ｖ．ｘ／Ｖ．ｗの値が０となり、仮想空間のワールド座標系の原点が左目用の仮想空間画像の左端に近づくほど、Ｖ．ｘ／Ｖ．ｗの値が−１．０に近づき、仮想空間のワールド座標系の原点が左目用の仮想空間画像の右端に近づくほど、Ｖ．ｘ／Ｖ．ｗの値が＋１．０に近づく。Ｖ．ｘ／Ｖ．ｗの値が０．５より大きいということは、仮想空間のワールド座標系の原点が左目
用の仮想空間画像の右端領域（図３９の斜線領域）に位置することを意味する。言い換えれば、外側撮像部（左）２３ａによって撮像された左実世界画像の右端領域にマーカー６１が位置していることを意味する。
【０１８１】
ステップＳ８５において、ＣＰＵ３１１は、メイン実世界画像を左実世界画像から右実世界画像へと変更する。すなわち、左仮想カメラ６３Ｌによる仮想空間画像上で、仮想空間の原点が、画像の中心よりも所定距離だけ（または画像の左右幅の所定割合だけ）右の位置よりも右側に存在するときに、メイン実世界画像を右実世界画像に変更する。または、外側撮像部（左）２３ａによる撮影画像上で、マーカー座標系の原点が、画像の中心よりも所定距離だけ（または画像の左右幅の所定割合だけ）右の位置よりも右側に存在するときに、メイン実世界画像を右実世界画像に変更する。これにより、例えば左実世界画像においてマーカー６１の位置が徐々に右方向へ移動して、最終的に左実世界画像からマーカー６１が消えてしまったとしても、左実世界画像からマーカー６１が消えてしまう前にメイン実世界画像が右実世界画像へと変更されるので、片画像認識モードにおいて継続的にマーカー６１を認識することが可能となる。ステップＳ８５の処理が終わると、メイン実世界画像設定処理を終了する。
【０１８２】
ステップＳ８６において、ＣＰＵ３１１は、（０，０，０，１）に右ビュー行列７６Ｒおよび右射影行列７７Ｒを乗算することによって、ベクトルＶを求める。
【０１８３】
ステップＳ８７において、ＣＰＵ３１１は、ベクトルＶの第１成分（ｘ）を第４成分（ｗ）で乗算した結果の値（Ｖ．ｘ／Ｖ．ｗ）が−０．５より小さいかどうかを判断し、−０．５より小さい場合には処理はステップＳ８７に進み、そうでない場合にはメイン実世界画像設定処理を終了する。上記のＶ．ｘ／Ｖ．ｗの値は、右目用の仮想空間画像上で、仮想空間のワールド座標系の原点が、画像の左右方向のどの位置に存在するかを示している。仮想空間のワールド座標系の原点が右目用の仮想空間画像の中央に位置するときは、Ｖ．ｘ／Ｖ．ｗの値が０となり、仮想空間のワールド座標系の原点が右目用の仮想空間画像の左端に近づくほど、Ｖ．ｘ／Ｖ．ｗの値が−１．０に近づき、仮想空間のワールド座標系の原点が右目用の仮想空間画像の右端に近づくほど、Ｖ．ｘ／Ｖ．ｗの値が＋１．０に近づく。Ｖ．ｘ／Ｖ．ｗの値が−０．５より小さいということは、仮想空間のワールド座標系の原点が右目用の仮想空間画像の左端領域（図４０の斜線領域）に位置することを意味する。言い換えれば、外側撮像部（右）２３ｂによって撮像された右実世界画像の左端領域にマーカー６１が位置していることを意味する。
【０１８４】
ステップＳ８８において、ＣＰＵ３１１は、メイン実世界画像を右実世界画像から左実世界画像へと変更する。これにより、例えば右実世界画像においてマーカー６１の位置が徐々に左方向へ移動して、最終的に右実世界画像からマーカー６１が消えてしまったとしても、右実世界画像からマーカー６１が消えてしまう前にメイン実世界画像が左実世界画像へと変更されるので、片画像認識モードにおいて継続的にマーカー６１を認識することが可能となる。ステップＳ８８の処理が終わると、メイン実世界画像設定処理を終了する。
【０１８５】
（表示モード切替処理）
次に、更新処理（図１５）におけるステップＳ４６の表示モード切替処理の詳細について、図１９のフローチャートを参照して説明する。
【０１８６】
図１９のステップＳ９０において、ＣＰＵ３１１は、表示モードが同期表示モードかどうかを判断し、同期表示モードである場合には処理はステップＳ９１に進み、そうでない場合（すなわち、非同期表示モードである場合）には処理はステップＳ９６に進む。
【０１８７】
ステップＳ９１において、ＣＰＵ３１１は、ＥｙｅＷｉｄｔｈが０より大きく、かつ、左実世界画像および右実世界画像のいずれかの実世界画像のマーカー認識に成功しているかどうかを判断する。そして、判断結果が肯定である場合には、処理はステップＳ９２に進み、判断結果が否定である場合（すなわち、ＥｙｅＷｉｄｔｈが０であるか、もしくは、左実世界画像および右実世界画像の両方の実世界画像のマーカー認識に失敗している場合）には、処理はステップＳ９３に進む。
【０１８８】
ステップＳ９２において、ＣＰＵ３１１は、ＳｙｎｃＣｏｕｎｔ（図１２参照）の値を２０に設定する。ＳｙｎｃＣｏｕｎｔは、表示モードを同期表示モードから非同期表示モードへと切り替えるタイミングを決定するための変数である。ステップＳ９２の処理が終わると、表示モード切替処理を終了する。
【０１８９】
ステップＳ９３において、ＣＰＵ３１１は、ＳｙｎｃＣｏｕｎｔの値をデクリメントする。
【０１９０】
ステップＳ９４において、ＣＰＵ３１１は、ＳｙｎｃＣｏｕｎｔの値が０より大きいかどうかを判断し、０より大きい場合には表示モード切替処理を終了、そうでない場合（すなわち、０である場合）には処理はステップＳ９５に進む。
【０１９１】
ステップＳ９５において、ＣＰＵ３１１は、ＬｏｇＩｎｄｅｘの値を１に設定し、さらにＥｙｅＷｉｄｔｈおよびＥｙｅＤｅｐｔｈの値を０に設定し、さらに表示モード７８を同期表示モードから非同期表示モードへと変更し、さらにマーカー認識モード７９を両画像認識モードに設定する。ステップＳ９５の処理が終わると、表示モード切替処理を終了する。
【０１９２】
ステップＳ９６において、ＣＰＵ３１１は、ＥｙｅＷｉｄｔｈが０より大きく、かつ、左実世界画像および右実世界画像のいずれかの実世界画像のマーカー認識に成功しているかどうかを判断する。そして、判断結果が肯定である場合には、処理はステップＳ９７に進み、判断結果が否定である場合（すなわち、ＥｙｅＷｉｄｔｈが０であるか、もしくは、左実世界画像および右実世界画像の両方の実世界画像のマーカー認識に失敗している場合）には、表示モード切替処理を終了する。
【０１９３】
ステップＳ９７において、ＣＰＵ３１１は、ＳｙｎｃＣｏｕｎｔの値を２０に設定し、さらに表示モードを非同期表示モードから同期表示モードへと変更する。ステップＳ９７の処理が終わると、表示モード切替処理を終了する。
【０１９４】
上記のように、表示モード切替処理によって、同期表示モードと非同期表示モードとの間で表示モードが適宜に切り替えられる。より具体的には、画像表示プログラムの実行が開始された直後は表示モードは非同期表示モードとなり、上側ＬＣＤ２２には常に最新の実世界画像が表示される。その後、マーカー６１が認識されて、上側ＬＣＤ２２に表示される実世界画像に仮想オブジェクト６２を合成表示できる状態になった時点で、表示モードは非同期表示モードから同期表示モードへと変化する。同期表示モードでは、仮想オブジェクト６２を実世界画像内の正しい位置に合成表示するために、最後にマーカー６１を認識することができた実世界画像（必ずしも最新の実世界画像とは限らない）に仮想オブジェクト６２を合成した合成画像が、上側ＬＣＤ２２に表示される。これにより、実世界画像に合成表示される仮想オブジェクト６２の位置ズレを防止することができる。その後、マーカー６１を認識することができない状態が一定時間継続した時点で、表示モードは同期表示モードから非同期表示モードへと変化し、上側ＬＣＤ２２には常に最新の実世界画像が表示されるようになる。これにより、マーカー６１を認識することができない状態が続いたときに、上側ＬＣＤ２２に古い画像が表示され続けてしまうことを防止すること
ができる。
【０１９５】
（本実施形態の効果）
以上のように、本実施形態によれば、左実世界画像および右実世界画像のいずれか一方のマーカー認識結果から計算される一方の外側撮像部（外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂ）のマーカー座標系における位置及び姿勢に基づいて、一方の仮想カメラの位置および姿勢が決定され、さらに、左仮想カメラ６３Ｌの位置及び姿勢と右仮想カメラ６３Ｒの位置及び姿勢が理想的な関係となるように、他方の仮想カメラの位置及び姿勢が決定される。したがって、立体視可能な表示装置において、正常に立体視できるように仮想オブジェクト６２を表示することができる。
【０１９６】
また、左実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（左）２３ａの位置と、右実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（右）２３ｂの位置とに基づいて、両外側撮像部の間隔を算出し、その結果に基づいて仮想カメラ間隔（ＥｙｅＷｉｄｔｈ）を決定し、一方の仮想カメラの位置を当該仮想カメラの座標系の撮影方向に直交する方向に当該間隔だけ移動させることにより他方の仮想カメラの位置を決定する。これにより、両仮想カメラが撮影方向に直行する方向に並ぶように設定することができる。また、仮に、外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間隔が既知でない場合や、ゲーム装置１０に対する外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂの取り付け精度が悪い場合であっても、左仮想カメラ６３Ｌと右仮想カメラ６３Ｒを理想的な間隔で配置することができる。
【０１９７】
また、仮想カメラ間隔決定処理によって仮想カメラ間隔（ＥｙｅＷｉｄｔｈ）が決定された後は、メイン実世界画像に対してのみマーカー認識処理を行えばよいため、常に左実世界画像と右実世界画像の両方に対してマーカー認識処理を行う場合と比較して、処理負担を軽減することができる。
【０１９８】
なお、外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間隔が既知である場合には、仮想カメラ間隔決定処理の結果に基づいて、実世界における外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間隔（例えば３．５ｃｍ）に対応する、マーカー座標系における外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間隔（ＥｙｅＷｉｄｔｈ）が判明する。したがって、例えば、身長が３０ｃｍのキャラクタ（仮想オブジェクト）を実世界画像に合成表示したり、実世界画像に合成表示されるキャラクタ（仮想オブジェクト）を秒速１０ｃｍで移動させたりというように、仮想空間において、実世界のスケールに基づいた処理を行うことが可能となる。
【０１９９】
（変形例）
なお、上記実施形態では、実世界画像に含まれるマーカー６１の位置及び姿勢を認識して、その認識結果に応じて実世界画像に仮想オブジェクト６２を合成しているが、他の実施形態では、マーカー６１に限らず、任意の認識対象の位置及び／又は姿勢を認識して、その認識結果に応じて実世界画像に仮想オブジェクト６２を合成してもよい。認識対象の一例として、人物の顔が挙げられる。
【０２００】
また、上記実施形態では、外側撮像部２３によってリアルタイムに撮像される実世界画像に基づいて上側ＬＣＤ２２に立体画像を表示しているが、他の実施形態では、外側撮像部２３や外部のステレオカメラ等によって過去に撮像された動画像データに基づいて上側ＬＣＤ２２に立体画像を表示するようにしてもよい。
【０２０１】
また、上記実施形態では、外側撮像部２３がゲーム装置１０に予め搭載されているが、他の実施形態では、ゲーム装置１０に着脱可能な外付け型のカメラを利用してもよい。
【０２０２】
また、上記実施形態では、上側ＬＣＤ２２がゲーム装置１０に予め搭載されているが、他の実施形態では、ゲーム装置１０に着脱可能な外付け型の立体視ディスプレイを利用してもよい。
【０２０３】
また、上記実施形態では、マーカー座標系の原点の位置に仮想オブジェクト６２を配置しているが、他の実施形態では、マーカー座標系の原点から離れた位置に仮想オブジェクト６２を配置してもよい。
【０２０４】
また、上記実施形態では、仮想空間に仮想オブジェクトを１つだけ配置しているが、他の実施形態では、仮想空間に複数の仮想オブジェクトを配置してもよい。
【０２０５】
また、上記実施形態では、仮想カメラ間隔決定処理において、マーカー座標系における外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間隔（ＥｙｅＷｉｄｔｈ）を計算した後、当該間隔に基づいて、マーカー認識結果に基づいて計算された左仮想カメラ６３Ｌおよび右仮想カメラ６３Ｒのいずれか一方の仮想カメラの位置及び姿勢から、他方の仮想カメラの位置及び姿勢を決定しているが、他の実施形態では、左実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（左）２３ａの位置及び姿勢と、右実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（右）２３ｂの位置及び姿勢とに基づいて、外側撮像部２３の位置および姿勢（例えば、外側撮像部（右）２３ａの位置と外側撮像部（左）２３ｂの位置の平均位置、外側撮像部（右）２３ａの姿勢と外側撮像部（左）２３ｂの姿勢の平均姿勢）を算出し、それに基づいて、左仮想カメラ６３Ｌおよび右仮想カメラ６３Ｒの位置及び／又は姿勢を決定するようにしてもよい。例えば、左仮想カメラ６３Ｌおよび右仮想カメラ６３Ｒの姿勢が、いずれも、左実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（左）２３ａの姿勢と、右実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（右）２３ｂの姿勢のちょうど中間の姿勢となるように、左仮想カメラ６３Ｌおよび右仮想カメラ６３Ｒの姿勢を決定するようにしてもよい。また例えば、仮想カメラ間隔決定処理において外側撮像部（左）２３ａと外側撮像部（右）２３ｂの間隔（ＥｙｅＷｉｄｔｈ）を計算した後に、左実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（左）２３ａの位置と、右実世界画像に対するマーカー認識結果に基づいて計算された外側撮像部（右）２３ｂの位置の平均位置に対応する仮想空間内の位置から互いに反対方向にＥｙｅＷｉｄｔｈ／２だけ仮想カメラの撮影方向と直交する方向にずらすことによって、左仮想カメラ６３Ｌおよび右仮想カメラ６３Ｒの位置を決定するようにしてもよい。
【０２０６】
また、上記実施形態では、仮想カメラ間隔決定処理によって仮想カメラ間隔（ＥｙｅＷｉｄｔｈ）が決定された後は、メイン実世界画像に対してのみマーカー認識処理を行っているが、他の実施形態では、常に左実世界画像と右実世界画像の両方に対してマーカー認識処理を行うようにしてもよい。
【０２０７】
また、上記実施形態では、上側ＬＣＤ２２がパララックスバリア方式の立体表示装置であるが、他の実施形態では、上側ＬＣＤ２２がレンチキュラー方式等の他の任意の方式の立体表示装置であってもよい。例えば、レンチキュラー方式の立体表示装置を利用する場合には、左目用画像と右目用画像をＣＰＵ３１１または他のプロセッサで合成してから、当該合成画像をレンチキュラー方式の立体表示装置に供給するようにしてもよい。
【０２０８】
また、上記実施形態では、ゲーム装置１０を用いて実世界画像に仮想オブジェクトを合成表示しているが、他の実施形態では、任意の情報処理装置または情報処理システム（例えば、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、携帯電話、パーソナルコンピュータ、カメラ等）を用いて実世界画像に仮想オブジェクトを合成表示
してもよい。
【０２０９】
また、上記実施形態では、一台の情報処理装置（ゲーム装置１０）のみによって画像表示処理を実行しているが、他の実施形態では、互いに通信可能な複数の情報処理装置を有する画像表示システムにおいて、当該複数の情報処理装置が画像表示処理を分担して実行するようにしてもよい。
【符号の説明】
【０２１０】
１０  ゲーム装置
１１  下側ハウジング
１２  下側ＬＣＤ
１３  タッチパネル
１４  操作ボタン
１５  アナログスティック
１６  ＬＥＤ
２１  上側ハウジング
２２  上側ＬＣＤ
２３  外側撮像部
２３ａ  外側撮像部（左）
２３ｂ  外側撮像部（右）
２４  内側撮像部
２５  ３Ｄ調整スイッチ
２６  ３Ｄインジケータ
２８  タッチペン
３１  情報処理部
３１１  ＣＰＵ
３１２  ＧＰＵ
３２  メインメモリ
６０ａ〜６０ｃ  ボール
６１  マーカー
６２  仮想オブジェクト
６３Ｌ  左仮想カメラ
６３Ｒ  右仮想カメラ
【図１】
0005739673.tif 000002
【図２】
0005739673.tif 000003
【図３】
0005739673.tif 000004
【図４】
0005739673.tif 000005
【図５Ａ】
0005739673.tif 000006
【図５Ｂ】
0005739673.tif 000007
【図５Ｃ】
0005739673.tif 000008
【図６】
0005739673.tif 000009
【図７】
0005739673.tif 000010
【図８】
0005739673.tif 000011
【図９】
0005739673.tif 000012
【図１０】
0005739673.tif 000013
【図１１】
0005739673.tif 000014
【図１２】
0005739673.tif 000015
【図１３】
0005739673.tif 000016
【図１４】
0005739673.tif 000017
【図１５】
0005739673.tif 000018
【図１６】
0005739673.tif 000019
【図１７】
0005739673.tif 000020
【図１８】
0005739673.tif 000021
【図１９】
0005739673.tif 000022
【図２０】
0005739673.tif 000023
【図２１】
0005739673.tif 000024
【図２２】
0005739673.tif 000025
【図２３】
0005739673.tif 000026
【図２４】
0005739673.tif 000027
【図２５】
0005739673.tif 000028
【図２６】
0005739673.tif 000029
【図２７】
0005739673.tif 000030
【図２８】
0005739673.tif 000031
【図２９】
0005739673.tif 000032
【図３０】
0005739673.tif 000033
【図３１】
0005739673.tif 000034
【図３２】
0005739673.tif 000035
【図３３】
0005739673.tif 000036
【図３４】
0005739673.tif 000037
【図３５】
0005739673.tif 000038
【図３６】
0005739673.tif 000039
【図３７】
0005739673.tif 000040
【図３８】
0005739673.tif 000041
【図３９】
0005739673.tif 000042
【図４０】
0005739673.tif 000043