(57)【特許請求の範囲】
【請求項１】
２つの撮像装置によって撮像された２つの撮像画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる情報処理装置のコンピュータにおいて実行される立体画像表示プログラムであって、
各撮像画像の表示範囲を表す所定の大きさの領域について、立体表示時の視差を調整するために、基準位置からのずれ量を決定するずれ量決定手段と、
少なくとも一方の領域について、前記ずれ量だけ移動させた領域が撮像画像の外へはみ出す場合、撮像画像の外へ当該領域がはみ出さないように各領域の大きさを変更する領域サイズ変更手段と、
前記ずれ量決定手段および前記領域サイズ変更手段によって決められた領域を表示対象領域として、２つの撮像画像における各表示対象領域内の画像を前記立体視表示装置の画面上の所定領域に表示させる表示制御手段として前記コンピュータを機能させ、
前記立体画像表示プログラムは、撮像画像に含まれる所定の撮像対象を認識する処理を各撮像画像について実行する認識手段として前記コンピュータをさらに機能させ、
前記ずれ量決定手段は、前記撮像装置から前記撮像対象までの距離に応じて前記ずれ量を決定する、立体画像表示プログラム。
【請求項２】
前記ずれ量決定手段は、移動後の領域が、立体視表示における視差ゼロ距離が前記撮像装置から前記撮像対象までの距離に応じた距離となる表示範囲を表すように前記ずれ量を決定する、請求項１に記載の立体画像表示プログラム。
【請求項３】
前記認識手段は、前記所定の撮像対象と各前記撮像装置とのそれぞれの位置関係を撮像画像に基づいて算出し、
前記立体画像表示プログラムは、前記認識手段によって算出される各位置関係のうち少なくとも一方に基づいて前記撮像装置から前記撮像対象までの距離に対応する長さを算出する距離算出手段として前記コンピュータをさらに機能させ、
前記ずれ量決定手段は、前記距離算出手段によって算出された距離によって決められる視差ゼロ距離に基づいて前記ずれ量を決定する、請求項２に記載の立体画像表示プログラム。
【請求項４】
前記表示制御手段は、前記位置関係を用いて生成された仮想オブジェクトの画像を表示対象領域内の撮像画像に対して合成する処理を各撮像画像について実行し、合成によって得られた２つの画像を前記立体視表示装置に表示させる、請求項３に記載の立体画像表示プログラム。
【請求項５】
前記表示制御手段は、
前記仮想オブジェクトが配置される仮想空間における２つの仮想カメラの位置および姿勢を各前記位置関係に基づいてそれぞれ算出するカメラ位置算出手段と、
前記表示対象領域内の現実空間に対応する仮想空間を範囲とするように各前記仮想カメラの視野範囲をそれぞれ算出するカメラ視野算出手段と、
前記各仮想カメラの位置、姿勢、および視野に基づいて、各撮像画像に合成すべき仮想オブジェクトの画像をそれぞれ生成する仮想画像生成手段とを有する、請求項４に記載の立体画像表示プログラム。
【請求項６】
前記カメラ視野算出手段は、撮像画像の全領域に対する前記表示対象領域の位置関係と、前記撮像装置の視野範囲に対応する仮想カメラの視野範囲に対する、算出すべき視野範囲の位置関係とが対応するように、仮想カメラの視野範囲を算出する、請求項５に記載の立体画像表示プログラム。
【請求項７】
前記領域サイズ変更手段は、前記ずれ量だけ移動させた領域が撮像画像の外へはみ出す場合、当該領域のはみ出した頂点が当該撮像画像の周の位置となるように、かつ、中心位置を変化させないように領域を小さくする、請求項１から請求項６のいずれか１項に記載の立体画像表示プログラム。
【請求項８】
前記ずれ量決定手段は、前記２つの撮像装置から逐次取得される撮像画像のうちで前記立体視表示装置に表示される所定の撮像画像についてずれ量を逐次決定し、
前記領域サイズ変更手段は、前記所定の撮像画像についてずれ量が決定される毎に、前記ずれ量だけ移動させた領域が撮像画像の外へはみ出すか否かを判定し、当該領域が撮像画像の外へはみ出す場合には各領域の大きさを変更し、
前記表示制御手段は、前記所定の撮像画像における各表示対象領域内の画像を前記立体視表示装置の画面上の所定領域に逐次表示させる、請求項１から請求項７のいずれか１項に記載の立体画像表示プログラム。
【請求項９】
２つの撮像装置によって撮像された２つの撮像画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる立体画像表示装置であって、
各撮像画像の表示範囲を表す所定の大きさの領域について、立体表示時の視差を調整するために、基準位置からのずれ量を決定するずれ量決定手段と、
少なくとも一方の領域について、前記ずれ量だけ移動させた領域が撮像画像の外へはみ出す場合、撮像画像の外へ当該領域がはみ出さないように各領域の大きさを変更する領域サイズ変更手段と、
前記ずれ量決定手段および前記領域サイズ変更手段によって決められた領域を表示領域として、２つの撮像画像における各表示領域内の画像を前記立体視表示装置の画面上の所定領域に表示させる表示制御手段と、
撮像画像に含まれる所定の撮像対象を認識する処理を各撮像画像について実行する認識手段とを備え、
前記ずれ量決定手段は、前記撮像装置から前記撮像対象までの距離に応じて前記ずれ量を決定する、立体画像表示装置。
【請求項１０】
２つの撮像装置によって撮像された２つの撮像画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる立体画像表示システムであって、
各撮像画像の表示範囲を表す所定の大きさの領域について、立体表示時の視差を調整するために、基準位置からのずれ量を決定するずれ量決定手段と、
少なくとも一方の領域について、前記ずれ量だけ移動させた領域が撮像画像の外へはみ出す場合、撮像画像の外へ当該領域がはみ出さないように各領域の大きさを変更する領域サイズ変更手段と、
前記ずれ量決定手段および前記領域サイズ変更手段によって決められた領域を表示領域として、２つの撮像画像における各表示領域内の画像を前記立体視表示装置の画面上の所定領域に表示させる表示制御手段と、
撮像画像に含まれる所定の撮像対象を認識する処理を各撮像画像について実行する認識手段とを備え、
前記ずれ量決定手段は、前記撮像装置から前記撮像対象までの距離に応じて前記ずれ量を決定する、立体画像表示システム。
【請求項１１】
２つの撮像装置によって撮像された２つの撮像画像を用いた立体視表示が可能な立体視表示装置に画像を表示させるための立体画像表示方法であって、
各撮像画像の表示範囲を表す所定の大きさの領域について、立体表示時の視差を調整するために、基準位置からのずれ量を決定するずれ量決定ステップと、
少なくとも一方の領域について、前記ずれ量だけ移動させた領域が撮像画像の外へはみ出す場合、撮像画像の外へ当該領域がはみ出さないように各領域の大きさを変更する領域サイズ変更ステップと、
前記ずれ量決定手段および前記領域サイズ変更手段によって決められた領域を表示領域として、２つの撮像画像における各表示領域内の画像を前記立体視表示装置の画面上の所定領域に表示させる表示制御ステップとを含み、
撮像画像に含まれる所定の撮像対象を認識する処理を各撮像画像について実行する認識ステップをさらに含み、
前記ずれ量決定ステップにおいては、前記撮像装置から前記撮像対象までの距離に応じて前記ずれ量が決定される、立体画像表示方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像を立体的に表示する立体画像表示プログラム、立体画像表示装置、立体画像表示システム、および、立体画像表示方法に関する。
【背景技術】
【０００２】
従来、複数のカメラによって撮影された複数の画像を立体視ディスプレイに表示することによって、立体的に画像を表示する装置が存在する。例えば特許文献１においては、右目用の画像と左目用の画像という２つの画像を重ねて表示し、パララックスバリア方式あるいはレンチキュラー方式によって、ユーザの右目には右目用の画像が見え、左目には左目用の画像が見えるようにすることが記載されている。これによって、ユーザは画像を立体的に見ることができる。
【０００３】
なお、特許文献１のように２つの画像を重ねて表示することによって立体視表示を行う方法においては、２つの画像の位置関係を変更することによって、立体視表示における視差ゼロ距離（立体視表示時に、表示面上に見える表示対象までの視点からの距離）を変更することができる。図２４は、２つの画像の位置関係と視差ゼロ距離との関係を示す図である。図２４に示す表の上欄のように、左目用の画像９１と右目用の画像９２との位置ずれが相対的に大きい場合、視差ゼロ距離は相対的に遠くなる（遠くにある物に焦点が合って見える）。一方、図２４に示す表の下欄のように、左目用の画像９１と右目用の画像９２との位置ずれが相対的に小さい場合、視差ゼロ距離は相対的に近くなる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−２６４８５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の方法では、左右の２つの画像が重なっている部分（図２４に示す斜線で囲まれる領域）の画像は立体的に見え、重なっていない部分の画像は立体的には見えない。つまり、上記の方法では、視差ゼロ距離を変更すると立体的に見える領域の大きさが変化する。
【０００６】
ここで、２つの画像のうちの一定範囲の領域が画面に表示されるとすれば、視差ゼロ距離によっては、２つの画像の重なっていない部分が表示されてしまう場合がある。例えば、図２４において、点線で囲まれる領域９３が画面に表示される領域であるとする。このとき、図２４に示す表の上欄のように視差ゼロ距離が遠い場合には、２つの画像が重なっている部分のみが領域９３内に含まれるので、画面に表示される画像全体が立体的に見える。しかし、図２４に示す表の下欄のように視差ゼロ距離が近い場合には、２つの画像が重なっていない部分が領域９３内に含まれるので、画面に表示される画像の一部は立体的に見えなくなる。この場合、画面には立体的に見える画像と立体的に見えない画像とが表示されることになるので、見にくい画像となってしまう。なお、２つの画像が重なっていない部分は画像を表示しないようにする（黒を表示する）方法も考えられる。しかし、この方法では、視差ゼロ距離が近い場合には表示される画像の幅が狭くなるためにユーザに違和感を与えてしまうとともに、何も表示されない領域が生じるために表示画面を有効に利用できないという課題がある。
【０００７】
それ故、本発明の目的は、立体視表示を行う場合において画像を見やすく表示することができる立体画像表示プログラム、立体画像表示装置、立体画像表示システム、および、立体画像表示方法を提供することである。
【課題を解決するための手段】
【０００８】
本発明は、上記の課題を解決するために、以下の（１）〜（８）の構成を採用した。
【０００９】
（１）
本発明は、２つの撮像装置によって撮像された２つの撮像画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる情報処理装置のコンピュータにおいて実行される立体画像表示プログラムである。立体画像表示プログラムは、ずれ量決定手段と、領域サイズ変更手段と、表示制御手段としてコンピュータを機能させる。ずれ量決定手段は、各撮像画像の表示範囲を表す所定の大きさの領域について、立体表示時の視差を調整するために、基準位置からのずれ量を決定する。領域サイズ変更手段は、少なくとも一方の領域について、ずれ量だけ移動させた領域が撮像画像の外へはみ出す場合、撮像画像の外へ当該領域がはみ出さないように各領域の大きさを変更する。表示制御手段は、ずれ量決定手段および領域サイズ変更手段によって決められた領域を表示対象領域として、２つの撮像画像における各表示対象領域内の画像を立体視表示装置の画面上の所定領域に表示させる。立体画像表示プログラムは、撮像画像に含まれる所定の撮像対象を認識する処理を各撮像画像について実行する認識手段として前記コンピュータをさらに機能させる。ずれ量決定手段は、撮像装置から撮像対象までの距離に応じてずれ量を決定する。
【００１０】
上記「立体視表示装置」とは、ユーザの左目と右目にそれぞれ別々の画像を視認させることによって立体視表示を行うものであればよい。「立体視表示装置」は、例えば、パララックスバリア方式やレンチキュラー方式等を用いた表示装置でもよいし、左目用のディスプレイと右目用のディスプレイとを有するヘッドマウントディスプレイのような表示装置でもよい。また、「立体視表示装置」は、ユーザが専用の眼鏡を使用することによって左目と右目にそれぞれ別々の画像を視認させる表示装置であってもよい。
上記「情報処理装置」とは、後述する実施形態に記載のゲーム装置の他、コンピュータプログラムを実行することによって情報処理を行う任意のコンピュータを含む概念である。また、上記「情報処理装置」は、携帯型か否かを問わず、立体視表示装置と一体的に構成されてもよいし、別体として構成されてもよい。
上記「立体画像表示プログラム」とは、一例としては、後述する実施形態に記載のゲームプログラムであるが、パーソナルコンピュータや携帯端末において実行されるアプリケーションプログラムを含む概念である。
上記「所定の大きさ」は、どのような大きさであってもよく、撮像画像よりも大きな範囲でもよい。また、上記「基準位置」は、撮像画像上のどの位置でもよい。
上記「画面上の所定領域」は、画面の全領域でもよいし、画面の一部の領域でもよい。
【００１１】
上記（１）の構成によれば、撮像画像の表示範囲を表す領域が撮像画像の外へはみ出さないように領域の大きさが変更されるので、表示領域の全領域に撮像画像が必ず含まれることになる。ここで、表示領域の一部に撮像画像が含まれない場合には、当該一部については立体視表示が行われないので、見にくい表示となってしまったり、ユーザに違和感を与えてしまったりする。これに対して、上記（１）の構成によれば、表示領域の全領域に撮像画像が必ず含まれることになるので、見にくい表示となることを防止することができ、より見やすく立体視表示を行うことができる。
【００１２】
（２）
ずれ量決定手段は、移動後の領域が、立体視表示における視差ゼロ距離が撮像装置から撮像対象までの距離に応じた距離となる表示範囲を表すようにずれ量を決定する。
【００１３】
上記「所定の撮像対象」とは、後述する実施形態におけるマーカ５３の他、認識処理によって認識することが可能な物であれば、どのような物であってもよい。例えば、ユーザ（プレイヤ）の顔等を所定の撮像対象として認識するようにしてもよい。
上記「立体視表示における視差ゼロ距離が撮像装置から撮像対象までの距離に応じた距離となる」とは、撮像装置から撮像対象までの距離によって視差ゼロ距離が決まることを意味するが、「撮像装置から撮像対象までの距離」が算出されることを意味するものではない。つまり、「表示位置決定手段」は、後述する実施形態のように、撮像装置から撮像対象までの距離に対応する距離（仮想マーカ距離）を算出し（ステップＳ１３）、算出された距離に応じて視差ゼロ距離を算出し（ステップＳ１７）、視差ゼロ距離に応じて表示位置を決定する（Ｓ２１）ものであってもよい。また、「表示位置決定手段」は、後述する（視差ゼロ距離を算出しない変形例）に記載するように、２つの撮像画像間で所定の撮像対象についてマッチングを行い、２つの撮像画像で撮像対象の位置が一致するように、表示位置を決定するものであってもよい。
【００１４】
上記（２）の構成によれば、立体視表示装置に表示される２つの画像の表示領域は、立体視表示における視差ゼロ距離が撮像装置から所定の撮像対象までの距離に応じた距離となるように調整される。すなわち、立体視表示される画像の視差ゼロ点は、撮像装置から所定の撮像対象までの距離に合わせて自動的に調整される。これによれば、例えば所定の撮像対象の位置あるいは撮像対象の付近の位置に視差ゼロ点が設定されるように自動的に調整することができるので、撮像対象の付近に表示される仮想オブジェクトに視差ゼロ点が設定された立体視表示を行うこともできる。つまり、撮像装置から撮像対象までの距離が変化しても仮想オブジェクトに視差ゼロ点が設定された立体視表示を行うことができる。したがって、上記（２）の構成によれば、拡張現実感技術を用いて生成される仮想オブジェクトの画像を立体的に表示する場合において、仮想オブジェクトの画像を見やすく表示することができる。
【００１５】
また、上記（２）の構成のように、ユーザの意思とは無関係に自動的に表示領域が変更される場合において、仮に領域サイズ変更手段による領域の大きさの変更が行われないとすれば、ユーザにとっては勝手に表示領域が変更されて表示領域の一部に撮像画像が含まれなくなることになる。そのため、ユーザにとっては急に画像が見にくくなったように感じ、特に違和感を抱くおそれがある。したがって、上記（２）の構成のように、ユーザの意思とは無関係に自動的に表示領域が変更される場合には、本発明によって表示領域の大きさを自動的に調整することが特に有効である。
【００１６】
（３）
認識手段は、所定の撮像対象と各撮像装置とのそれぞれの位置関係を撮像画像に基づいて算出してもよい。このとき、立体画像表示プログラムは、認識手段によって算出される各位置関係のうち少なくとも一方に基づいて撮像装置から撮像対象までの距離に対応する長さを算出する距離算出手段としてコンピュータをさらに機能させる。また、ずれ量決定手段は、距離算出手段によって算出された距離によって決められる視差ゼロ距離に基づいてずれ量を決定する。
【００１７】
上記「位置関係」とは、撮像装置と所定の撮像対象との位置関係を反映する情報であればよく、所定の撮像対象を基準とした撮像装置の位置および姿勢であってもよいし、撮像装置を基準とした所定の撮像対象の位置および姿勢であってもよい。また、上記「位置関係」は、後述する実施形態のステップＳ２で算出される仮想カメラの位置および姿勢（ビュー行列）であってもよい。
【００１８】
上記（３）の構成によれば、撮像装置から撮像対象までの距離に対応する長さを実際に算出し、この長さに基づいて視差ゼロ距離が決められるので、視差ゼロ距離を正確に設定することができる。これによって、例えば、撮像装置から撮像対象までの距離を視差ゼロ距離としたり、撮像装置から撮像対象までの距離から所定距離だけ手前（または奥）を視差ゼロ距離としたりすることが容易になる。
【００１９】
（４）
表示制御手段は、位置関係を用いて生成された仮想オブジェクトの画像を表示対象領域内の撮像画像に対して合成する処理を各撮像画像について実行し、合成によって得られた２つの画像を立体視表示装置に表示させてもよい。
【００２０】
上記（４）の構成によれば、撮像画像と仮想画像とを合成した合成画像を立体的に表示することができる。
【００２１】
（５）
表示制御手段は、カメラ位置算出手段と、カメラ視野算出手段と、仮想画像生成手段とを有していてもよい。カメラ位置算出手段は、仮想オブジェクトが配置される仮想空間における２つの仮想カメラの位置および姿勢を各位置関係に基づいてそれぞれ算出する。カメラ視野算出手段は、表示対象領域内の現実空間に対応する仮想空間を範囲とするように各仮想カメラの視野範囲（視体積、射影行列）をそれぞれ算出する。仮想画像生成手段は、各仮想カメラの位置、姿勢、および視野に基づいて、各撮像画像に合成すべき仮想オブジェクトの画像をそれぞれ生成する。
【００２２】
上記（５）の構成によれば、撮像画像の表示対象領域に対応する仮想空間を視野範囲とするように仮想カメラが設定される。これによれば、本発明のように撮像画像の表示領域の大きさが変更される場合でも、撮像画像の範囲と仮想画像の範囲とを対応させることができ、撮像画像上の適切な位置に仮想オブジェクトの画像を表示させることができる。
【００２３】
（６）
カメラ視野算出手段は、撮像画像の全領域に対する表示対象領域の位置関係と、撮像装置の視野範囲に対応する仮想カメラの視野範囲に対する、算出すべき視野範囲の位置関係とが対応するように、仮想カメラの視野範囲を算出してもよい。
【００２４】
上記「撮像画像の全領域に対する表示対象領域の位置関係」とは、図２２の例では、左撮像画像５５に対する表示領域６３の位置関係である。また、「撮像装置の視野範囲に対応する仮想カメラの視野範囲」とは、図２２の例では、直線Ｌ３およびＬ４によって表される視野範囲である。つまり、「撮像装置の視野範囲に対応する仮想カメラの視野範囲に対する、算出すべき視野範囲の位置関係」とは、図２２の例では、直線Ｌ３およびＬ４によって表される視野範囲に対する、直線Ｌ５およびＬ６によって表される視野範囲の位置関係である。
【００２５】
上記（６）の構成によれば、撮像画像の領域と表示対象領域との位置関係を用いて、仮想カメラの視野範囲を算出するので、表示対象領域に対応する視野範囲を容易に算出することができる。
【００２６】
（７）
領域サイズ変更手段は、ずれ量だけ移動させた領域が撮像画像の外へはみ出す場合、当該領域のはみ出した頂点が当該撮像画像の周の位置となるように、かつ、中心位置を変化させないように領域を小さくしてもよい。
【００２７】
上記（７）の構成によれば、撮像画像の外へはみ出した領域の縮小を最小限に抑えることができる。したがって、画面に表示される範囲が小さくなりすぎる（ズームアップしすぎる）ことを防止することができ、より見やすい画像を表示することができる。
【００２８】
（８）
ずれ量決定手段は、２つの撮像装置から逐次取得される撮像画像のうちで画面に表示される所定の撮像画像についてずれ量を逐次決定してもよい。このとき、領域サイズ変更手段は、所定の撮像画像についてずれ量が決定される毎に、ずれ量だけ移動させた領域が撮像画像の外へはみ出すか否かを判定し、当該領域が撮像画像の外へはみ出す場合には各領域の大きさを変更する。表示制御手段は、所定の撮像画像における各表示対象領域内の画像を立体視表示装置の画面上の所定領域に逐次表示させる。
【００２９】
上記「所定の撮像画像」とは、どのようなものであってよく、例えば、認識処理が成功した撮像画像であってもよいし、撮像装置から逐次取得される全ての撮像画像であってもよい。つまり、撮像装置から逐次取得される各撮像画像は、全ての撮像画像が逐次表示されてもよいし、認識処理が成功した撮像画像のみが表示されてもよい。また、例えばある撮像画像に対する認識処理が完了した時点で最新の撮像画像について次の認識処理が実行される場合には、認識処理の対象となった撮像画像のみが表示されてもよい。
【００３０】
上記（８）の構成によれば、所定の撮像画像について、領域が撮像画像の外へはみ出すか否かが逐次判定され、はみ出す場合には領域の大きさが変更される。その結果、表示領域が逐次適切な大きさに変更されて撮像画像が表示される。これによれば、リアルタイムで取得された撮像画像に対して表示領域の大きさをリアルタイムで調整して立体視表示を行うことができる。
【００３１】
また、本発明は、上記各手段と同等の手段を備える立体画像表示装置の形態で実施されてもよい。この立体画像表示装置においては、立体画像表示プログラムを実行するコンピュータによって上記各手段が実現されてもよいし、専用回路によって上記各手段の一部または全部が実現されてもよい。また、本発明は、上記各手段を備える１以上の情報処理装置からなる立体画像表示システムの形態で実施されてもよい。このとき、１以上の情報処理装置は、有線または無線通信によって直接通信を行ってもよいし、ネットワークを介して通信を行ってもよい。さらに、本発明は、上記各手段によって行われる立体画像表示方法の形態で実施されてもよい。
【発明の効果】
【００３２】
本発明によれば、撮像画像の表示範囲を表す領域が撮像画像の外へはみ出さないように領域の大きさが変更されるので、表示領域の全領域に撮像画像を必ず含めることができる。これによって、見にくい表示となることを防止することができ、より見やすく立体視表示を行うことができる。
【図面の簡単な説明】
【００３３】
【図１】開状態におけるゲーム装置の正面図
【図２】開状態におけるゲーム装置の側面図
【図３】閉状態におけるゲーム装置の左側面図、正面図、右側面図および背面図
【図４】図１に示す上側ハウジングのＡ−Ａ’線断面図
【図５Ａ】３Ｄ調整スイッチのスライダが最下点（第３の位置）に存在する様子を示す図
【図５Ｂ】３Ｄ調整スイッチのスライダが最下点よりも上方位置（第１の位置）に存在する様子を示す図
【図５Ｃ】３Ｄ調整スイッチのスライダが最上点（第２の位置）に存在する様子を示す図
【図６】ゲーム装置の内部構成を示すブロック図
【図７】本実施形態に係るゲーム装置１０を使用する様子を示す図
【図８】ゲーム装置１０と、各ボール５１および５２、ならびに、マーカー５３との位置関係を示す図
【図９】各撮像画像とそれらに設定される表示領域を示す図
【図１０】図９に示す各撮像画像を表示領域が一致するように重ねて示した図
【図１１】各合成画像を示す図
【図１２】左撮像画像と表示領域の基準枠との関係を示す図
【図１３】枠が基準位置からずれた場合の左撮像画像を示す図
【図１４】枠が縮小された左撮像画像を示す図
【図１５】ゲームプログラムによる処理において用いられる各種データを示す図
【図１６】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図１７】図１６に示す視差ゼロ点算出処理（ステップＳ４）の流れを示すフローチャート
【図１８】仮想空間における仮想カメラ間距離を示す図
【図１９】仮想空間における仮想マーカー距離を示す図
【図２０】図１６に示す左画像生成処理（ステップＳ５）の流れを示すフローチャート
【図２１】現実空間と撮像画像の平面との対応を示す図
【図２２】撮像画像の平面と仮想空間との対応を示す図
【図２３】補正処理が行われた撮像画像と表示領域との関係を示す図
【図２４】２つの画像の位置関係と視差ゼロ距離との関係を示す図
【発明を実施するための形態】
【００３４】
［ゲーム装置の構成］
以下、図面を参照して、本発明に係る立体画像表示プログラムおよび立体画像表示装置の一実施形態であるゲームプログラムおよびゲーム装置について説明する。図１〜図３は、ゲーム装置１０の外観を示す平面図である。ゲーム装置１０は携帯型のゲーム装置であり、図１〜図３に示すように折り畳み可能に構成されている。図１および図２は、開いた状態（開状態）におけるゲーム装置１０を示し、図３は、閉じた状態（閉状態）におけるゲーム装置１０を示している。図１は、開状態におけるゲーム装置１０の正面図であり、図２は、開状態におけるゲーム装置１０の側面図である。ゲーム装置１０は、カメラによって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりすることが可能である。また、ゲーム装置１０は、所定のゲームプログラムを実行可能であり、仮想空間に設定された仮想カメラで撮像した画像を画面に表示することができる。
【００３５】
まず、図１〜図３を参照して、ゲーム装置１０の外観構成について説明する。図１〜図３に示されるように、ゲーム装置１０は、下側ハウジング１１および上側ハウジング２１を有する。下側ハウジング１１と上側ハウジング２１とは、開閉可能（折り畳み可能）に接続されている。本実施形態では、各ハウジング１１および２１はともに横長の長方形の板状形状であり、互いの長辺部分で回転可能に接続されている。
【００３６】
図１および図２に示されるように、下側ハウジング１１の上側長辺部分には、下側ハウジング１１の内側面（主面）１１Ｂに対して垂直な方向に突起する突起部１１Ａが設けられる。また、上側ハウジング２１の下側長辺部分には、上側ハウジング２１の下側面から当該下側面に垂直な方向に突起する突起部２１Ａが設けられる。下側ハウジング１１の突起部１１Ａと上側ハウジング２１の突起部２１Ａとが連結されることにより、下側ハウジング１１と上側ハウジング２１とが、折り畳み可能に接続される。
【００３７】
（下側ハウジングの説明）
まず、下側ハウジング１１の構成について説明する。図１〜図３に示すように、下側ハウジング１１には、下側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）１２、タッチパネル１３、各操作ボタン１４Ａ〜１４Ｌ（図１、図３）、アナログスティック１５、ＬＥＤ１６Ａ〜１６Ｂ、挿入口１７、および、マイクロフォン用孔１８が設けられる。以下、これらの詳細について説明する。
【００３８】
図１に示すように、下側ＬＣＤ１２は下側ハウジング１１に収納される。下側ＬＣＤ１２は横長形状であり、長辺方向が下側ハウジング１１の長辺方向に一致するように配置される。下側ＬＣＤ１２は左右方向（図１に示すｘ軸方向）に関して下側ハウジング１１の中央に配置される。下側ＬＣＤ１２は、下側ハウジング１１の内側面（主面）に設けられ、下側ハウジング１１に設けられた開口部から当該下側ＬＣＤ１２の画面が露出される。ゲーム装置１０を使用しない場合には閉状態としておくことによって、下側ＬＣＤ１２の画面が汚れたり傷ついたりすることを防止することができる。下側ＬＣＤ１２の画素数は、例えば、２５６ｄｏｔ×１９２ｄｏｔ（横×縦）であってもよい。下側ＬＣＤ１２は、後述する上側ＬＣＤ２２とは異なり、画像を（立体視可能ではなく）平面的に表示する表示装置である。なお、本実施形態では表示装置としてＬＣＤを用いているが、例えばＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ：電界発光）を利用した表示装置など、他の任意の表示装置を利用してもよい。また、下側ＬＣＤ１２として、任意の解像度の表示装置を利用することができる。
【００３９】
図１に示されるように、ゲーム装置１０は、入力装置として、タッチパネル１３を備えている。タッチパネル１３は、下側ＬＣＤ１２の画面上に装着されている。なお、本実施形態では、タッチパネル１３は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。本実施形態では、タッチパネル１３として、下側ＬＣＤ１２の解像度と同解像度（検出精度）のものを利用する。ただし、必ずしもタッチパネル１３の解像度と下側ＬＣＤ１２の解像度が一致している必要はない。また、下側ハウジング１１の上側面には挿入口１７（図１および図３（ｄ）に示す点線）が設けられている。挿入口１７は、タッチパネル１３に対する操作を行うために用いられるタッチペン２８を収納することができる。なお、タッチパネル１３に対する入力は通常タッチペン２８を用いて行われるが、タッチペン２８に限らずユーザの指でタッチパネル１３に対する入力をすることも可能である。
【００４０】
各操作ボタン１４Ａ〜１４Ｌは、所定の入力を行うための入力装置である。図１に示されるように、下側ハウジング１１の内側面（主面）には、各操作ボタン１４Ａ〜１４Ｌのうち、十字ボタン１４Ａ（方向入力ボタン１４Ａ）、ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅ、電源ボタン１４Ｆ、セレクトボタン１４Ｊ、ＨＯＭＥボタン１４Ｋ、およびスタートボタン１４Ｌが設けられる。十字ボタン１４Ａは、十字の形状を有しており、上下左右の方向を指示するボタンを有している。ボタン１４Ａ〜１４Ｅ、セレクトボタン１４Ｊ、ＨＯＭＥボタン１４Ｋ、およびスタートボタン１４Ｌには、ゲーム装置１０が実行するプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン１４Ａは選択操作等に用いられ、各操作ボタン１４Ｂ〜１４Ｅは決定操作やキャンセル操作等に用いられる。また、電源ボタン１４Ｆは、ゲーム装置１０の電源をオン／オフするために用いられる。
【００４１】
アナログスティック１５は、方向を指示するデバイスであり、下側ハウジング１１の内側面に設けられる。図１に示すように、アナログスティック１５は、十字ボタン１４Ａの上方に設けられる。アナログスティック１５は、指で操作されるスティック部が下側ハウジング１１の内側面に対して任意の方向（上下左右および斜め方向の任意の角度）に傾倒するように構成されている。アナログスティック１５は、ゲーム装置１０が実行するプログラムに応じて機能する。例えば、３次元仮想空間に所定のオブジェクトが登場するゲームがゲーム装置１０によって実行される場合、アナログスティック１５は、当該所定のオブジェクトを３次元仮想空間内で移動させるための入力装置として機能する。この場合において、所定のオブジェクトはアナログスティック１５が傾倒した方向に移動される。なお、アナログスティック１５として、上下左右および斜め方向の任意の方向に所定量だけスライドすることでアナログ入力を可能としたものを用いても良い。
【００４２】
図３（ａ）は閉状態におけるゲーム装置１０の左側面図であり、図３（ｂ）は閉状態におけるゲーム装置１０の正面図であり、図３（ｃ）は閉状態におけるゲーム装置１０の右側面図であり、図３（ｄ）は閉状態におけるゲーム装置１０の背面図である。図３（ｂ）および（ｄ）に示されるように、下側ハウジング１１の上側面には、Ｌボタン１４ＧおよびＲボタン１４Ｈが設けられている。Ｌボタン１４Ｇは、下側ハウジング１１の上面の左端部に設けられ、Ｒボタン１４Ｈは、下側ハウジング１１の上面の右端部に設けられる。Ｌボタン１４ＧおよびＲボタン１４Ｈは、例えば、カメラのシャッターボタン（撮影指示ボタン）として機能することができる。また、図３（ａ）に示されるように、下側ハウジング１１の左側面には、音量ボタン１４Ｉが設けられる。音量ボタン１４Ｉは、ゲーム装置１０が備えるスピーカの音量を調整するために用いられる。
【００４３】
図３（ａ）に示されるように、下側ハウジング１１の左側面には開閉可能なカバー部１１Ｃが設けられる。このカバー部１１Ｃの内側には、ゲーム装置１０とデータ保存用外部メモリ４５とを電気的に接続するためのコネクタ（図示せず）が設けられる。データ保存用外部メモリ４５は、コネクタに着脱自在に装着される。データ保存用外部メモリ４５は、例えば、ゲーム装置１０によって撮像された画像のデータを記憶（保存）するために用いられる。なお、上記コネクタおよびそのカバー部１１Ｃは、下側ハウジング１１の右側面に設けられてもよい。
【００４４】
また、図３（ｄ）に示されるように、下側ハウジング１１の上側面には開閉可能なカバー部１１Ｄが設けられる。このカバー部１１Ｄの内側には、ゲーム装置１０とゲームプログラムを記録した外部メモリ４４とを電気的に着脱自在に接続するためのコネクタ（図示せず）が設けられる。当該外部メモリ４４がゲーム装置１０に接続されることにより、所定のゲームプログラムが実行される。なお、上記コネクタおよびそのカバー部１１Ｄは、下側ハウジング１１の他の側面（例えば、右側面等）に設けられてもよい。
【００４５】
また、図１および図３（ｃ）に示されるように、下側ハウジング１１の下側面にはゲーム装置１０の電源のＯＮ／ＯＦＦ状況をユーザに通知する第１ＬＥＤ１６Ａ、下側ハウジング１１の右側面にはゲーム装置１０の無線通信の確立状況をユーザに通知する第２ＬＥＤ１６Ｂが設けられる。ゲーム装置１０は他の機器との間で無線通信を行うことが可能であり、第１ＬＥＤ１６Ｂは、無線通信が確立している場合に点灯する。ゲーム装置１０は、例えば、ＩＥＥＥ８０２．１１．ｂ／ｇの規格に準拠した方式により、無線ＬＡＮに接続する機能を有する。下側ハウジング１１の右側面には、この無線通信の機能を有効／無効にする無線スイッチ１９が設けられる（図３（ｃ）参照）。
【００４６】
また、下側ハウジング１１の内側面には、マイクロフォン用孔１８が設けられる。マイクロフォン用孔１８の下部には後述する音声入力装置としてのマイク（図６参照）が設けられ、当該マイクがゲーム装置１０の外部の音を検出する。
【００４７】
なお、図示は省略するが、下側ハウジング１１には、ゲーム装置１０の電源となる充電式電池が収納され、下側ハウジング１１の側面（例えば、上側面）に設けられた端子を介して当該電池を充電することができる。
【００４８】
（上側ハウジングの説明）
次に、上側ハウジング２１の構成について説明する。図１〜図３に示すように、上側ハウジング２１には、上側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）２２、外側カメラ２３（左目用カメラ２３ａおよび右目用カメラ２３ｂ）、内側カメラ２４、３Ｄ調整スイッチ２５、および、３Ｄインジケータ２６が設けられる。以下、これらの詳細について説明する。
【００４９】
図１に示すように、上側ＬＣＤ２２は上側ハウジング２１に収納される。上側ＬＣＤ２２は、横長形状であり、長辺方向が上側ハウジング２１の長辺方向に一致するように配置される。上側ＬＣＤ２２は左右方向（図１に示すｘ軸方向）に関して上側ハウジング２１の中央に配置される。上側ＬＣＤ２２の画面の面積は、下側ＬＣＤ１２の画面の面積よりも大きく設定される。具体的には、上側ＬＣＤ２２の画面は、下側ＬＣＤ１２の画面よりも横長に設定される。すなわち、上側ＬＣＤ２２の画面のアスペクト比における横幅の割合は、下側ＬＣＤ１２の画面のアスペクト比における横幅の割合よりも大きく設定される。
【００５０】
上側ＬＣＤ２２の画面は、上側ハウジング２１の内側面（主面）２１Ｂに設けられ、上側ハウジング２１に設けられた開口部から当該上側ＬＣＤ２２の画面が露出される。また、図２に示すように、上側ハウジング２１の内側面は、透明なスクリーンカバー２７によって覆われている。当該スクリーンカバー２７は、上側ＬＣＤ２２の画面を保護するとともに、上側ＬＣＤ２２と上側ハウジング２１の内側面と一体的にさせ、これにより統一感を持たせている。上側ＬＣＤ２２の画素数は、例えば、６４０ｄｏｔ×２００ｄｏｔ（横×縦）であってもよい。なお、本実施形態では上側ＬＣＤ２２は液晶表示装置であるとしたが、例えばＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ：電界発光）を利用した表示装置などが利用されてもよい。また、上側ＬＣＤ２２として、任意の解像度の表示装置を利用することができる。
【００５１】
上側ＬＣＤ２２は、立体視可能な画像を表示することが可能な表示装置である。また、本実施形態では、実質的に同一の表示領域を用いて左目用画像と右目用画像が表示される。具体的には、上側ＬＣＤ２２は、左目用画像と右目用画像が所定単位で（例えば、１列ずつ）横方向に交互に表示される方式の表示装置である。または、上側ＬＣＤ２２は、左目用画像と右目用画像とが時分割で交互に表示される方式の表示装置であってもよい。また、本実施形態では、上側ＬＣＤ２２は裸眼立体視可能な表示装置である。そして、横方向に交互に表示される左目用画像と右目用画像とを左目および右目のそれぞれに分解して見えるように、レンチキュラー方式やパララックスバリア方式（視差バリア方式）の表示装置が用いられる。本実施形態では、上側ＬＣＤ２２はパララックスバリア方式のものとする。上側ＬＣＤ２２は、右目用画像と左目用画像とを用いて、裸眼で立体視可能な画像（立体画像）を表示する。すなわち、上側ＬＣＤ２２は、視差バリアを用いてユーザの左目に左目用画像を、ユーザの右目に右目用画像をそれぞれ視認させることにより、ユーザにとって立体感のある立体画像（立体視可能な画像）を表示することができる。また、上側ＬＣＤ２２は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる（上述した立体視とは反対の意味で平面視の画像を表示することができる）。このように、上側ＬＣＤ２２は、立体視可能な画像を表示する立体表示モードと、画像を平面的に表示する（平面視画像を表示する）平面表示モードとを切り替えることが可能な表示装置である。この表示モードの切り替えは、後述する３Ｄ調整スイッチ２５によって行われる。
【００５２】
外側カメラ２３は、上側ハウジング２１の外側面（上側ＬＣＤ２２が設けられた主面と反対側の背面）２１Ｄに設けられ、当該外側面２１Ｄの法線方向を撮像方向とするステレオカメラである。外側カメラ２３は、左目用カメラ２３ａおよび右目用カメラ２３ｂの２つのカメラで構成される。左目用カメラ２３ａおよび右目用カメラ２３ｂは、それぞれの撮像方向が平行となるように配置される。左目用カメラ２３ａおよび右目用カメラ２３ｂは、それぞれ所定の解像度を有する撮像素子（例えば、ＣＣＤイメージセンサやＣＭＯＳイメージセンサ等）と、レンズとを含む。
【００５３】
図１の破線および図３（ｂ）の実線で示されるように、外側カメラ２３を構成する左目用カメラ２３ａおよび右目用カメラ２３ｂは、上側ＬＣＤ２２の画面の横方向と平行に並べられて配置される。すなわち、２つのカメラを結んだ直線が上側ＬＣＤ２２の画面の横方向と平行になるように、左目用カメラ２３ａおよび右目用カメラ２３ｂが配置される。図１において左目用カメラ２３ａおよび右目用カメラ２３ｂを表す破線は、上側ハウジング２１の内側面とは反対側の外側面に左目用カメラ２３ａおよび右目用カメラ２３ｂが存在することを意味している。図１に示すように、ユーザが上側ＬＣＤ２２の画面を正面から視認した場合に、左目用カメラ２３ａは左側に、右目用カメラ２３ｂは右側に、それぞれ位置している。左目用カメラ２３ａおよび右目用カメラ２３ｂの間隔は、人間の両目の間隔程度に設定され、例えば、３０ｍｍ〜７０ｍｍの範囲で設定されてもよい。なお、左目用カメラ２３ａおよび右目用カメラ２３ｂの間隔は、この範囲に限らない。また、他の実施形態においては、上記２つのカメラ２３ａおよび２３ｂの間隔は可変であってもよい。
【００５４】
また、左目用カメラ２３ａおよび右目用カメラ２３ｂは、上側ＬＣＤ２２（上側ハウジング２１）の左右方向に関して中央から対称となる位置にそれぞれ配置される。すなわち、左目用カメラ２３ａおよび右目用カメラ２３ｂは、上側ＬＣＤ２２を左右に２等分する線に対して対称の位置にそれぞれ配置される。また、左目用カメラ２３ａおよび右目用カメラ２３ｂは、上側ハウジング２１を開いた状態において、上側ハウジング２１の上部であって、上側ＬＣＤ２２の画面の上端よりも上方の位置の裏側に配置される。すなわち、左目用カメラ２３ａおよび右目用カメラ２３ｂは、上側ハウジング２１の外側面であって、上側ＬＣＤ２２を外側面に投影した場合、投影した上側ＬＣＤ２２の画面の上端よりも上方に配置される。
【００５５】
このように、外側カメラ２３の２つのカメラが、上側ＬＣＤ２２の左右方向に関して中央から対称の位置に配置されることにより、ユーザが上側ＬＣＤ２２を正視した場合に、外側カメラ２３の撮像方向をユーザの視線方向と一致させることができる。また、外側カメラ２３は、上側ＬＣＤ２２の画面の上端より上方の裏側の位置に配置されるため、外側カメラ２３と上側ＬＣＤ２２とが上側ハウジング２１の内部で干渉することがない。従って、外側カメラ２３を上側ＬＣＤ２２の画面の裏側に配置する場合と比べて、上側ハウジング２１を薄く構成することが可能となる。
【００５６】
内側カメラ２４は、上側ハウジング２１の内側面（主面）２１Ｂに設けられ、当該内側面の法線方向を撮像方向とするカメラである。内側カメラ２４は、所定の解像度を有する撮像素子（例えば、ＣＣＤイメージセンサやＣＭＯＳイメージセンサ等）と、レンズとを含む。
【００５７】
図１に示すように、内側カメラ２４は、上側ハウジング２１を開いた状態において、上側ハウジング２１の上部であって、上側ＬＣＤ２２の画面の上端よりも上方に配置され、上側ハウジング２１の左右方向に関して中央の位置に配置される。具体的には、図１および図３（ｂ）に示されるように、内側カメラ２４は、上側ハウジング２１の内側面であって、外側カメラ２３の左右のカメラ（左目用カメラ２３ａおよび右目用カメラ２３ｂ）の中間の裏側の位置に配置される。すなわち、上側ハウジング２１の外側面に設けられた左右のカメラを上側ハウジング２１の内側面に投影した場合、当該投影した左右のカメラの中間に、内側カメラ２４が設けられる。図３（ｂ）で示される破線は、上側ハウジング２１の内側面に存在する内側カメラ２４を表している。
【００５８】
このように、内側カメラ２４は、外側カメラ２３とは反対方向を撮像する。内側カメラ２４は、上側ハウジング２１の内側面であって、外側カメラ２３の左右のカメラの中間位置の裏側に設けられる。これにより、ユーザが上側ＬＣＤ２２を正視した際、内側カメラ２４でユーザの顔を正面から撮像することができる。また、外側カメラ２３の左右のカメラと内側カメラ２４とが上側ハウジング２１の内部で干渉することがないため、上側ハウジング２１を薄く構成することが可能となる。
【００５９】
３Ｄ調整スイッチ２５は、スライドスイッチであり、上述のように上側ＬＣＤ２２の表示モードを切り替えるために用いられるスイッチである。３Ｄ調整スイッチ２５は、上側ＬＣＤ２２に表示された立体視可能な画像（立体画像）の立体感を調整するために用いられる。図１〜図３に示されるように、３Ｄ調整スイッチ２５は、上側ハウジング２１の内側面および右側面の端部に設けられ、ユーザが上側ＬＣＤ２２を正視した場合に、当該３Ｄ調整スイッチ２５を視認できる位置に設けられる。
【００６０】
図４は、図１に示す上側ハウジング２１のＡ−Ａ’線断面図である。図４に示すように、上側ハウジング２１の内側面の右端部には、凹部２１Ｃが形成され、当該凹部２１Ｃに３Ｄ調整スイッチ２５が設けられる。３Ｄ調整スイッチ２５は、図１および図２に示されるように、上側ハウジング２１の正面および右側面から視認可能に配置される。３Ｄ調整スイッチ２５のスライダ２５ａは、所定方向（上下方向）の任意の位置にスライド可能であり、当該スライダ２５ａの位置に応じて上側ＬＣＤ２２の表示モードが設定される。
【００６１】
図５Ａから図５Ｃは、３Ｄ調整スイッチ２５のスライダ２５ａがスライドする様子を示す図である。図５Ａは、３Ｄ調整スイッチ２５のスライダ２５ａが最下点（第３の位置）に存在する様子を示す図である。図５Ｂは、３Ｄ調整スイッチ２５のスライダ２５ａが最下点よりも上方位置（第１の位置）に存在する様子を示す図である。図５Ｃは、３Ｄ調整スイッチ２５のスライダ２５ａが最上点（第２の位置）に存在する様子を示す図である。
【００６２】
図５Ａに示すように、３Ｄ調整スイッチ２５のスライダ２５ａが最下点位置（第３の位置）に存在する場合、上側ＬＣＤ２２は平面表示モードに設定され、上側ＬＣＤ２２の画面には平面画像が表示される。一方、図５Ｂに示す位置（最下点より上側の位置（第１の位置））から図５Ｃに示す位置（最上点の位置（第２の位置））までの間にスライダ２５ａが存在する場合、上側ＬＣＤ２２は立体表示モードに設定される。この場合、上側ＬＣＤ２２の画面には立体視可能な画像が表示される。スライダ２５ａが第１の位置から第２の位置の間に存在する場合、スライダ２５ａの位置に応じて、立体画像の見え方が調整される。３Ｄ調整スイッチ２５のスライダ２５ａは、第３の位置で固定されるように構成されており、第１の位置と第２の位置との間では上下方向に任意の位置にスライド可能に構成されている。例えば、スライダ２５ａは、第３の位置において、３Ｄ調整スイッチ２５を形成する側面から図５Ａに示す横方向に突出した凸部（図示せず）によって固定されて、所定以上の力が上方に加わらないと第３の位置よりも上方にスライドしないように構成されている。
【００６３】
３Ｄインジケータ２６は、上側ＬＣＤ２２が立体表示モードか否かを示す。３Ｄインジケータ２６は、ＬＥＤであり、上側ＬＣＤ２２の立体表示モードが有効の場合に点灯する。図１に示されるように、３Ｄインジケータ２６は、上側ハウジング２１の内側面に設けられ、上側ＬＣＤ２２の画面近傍に設けられる。このため、ユーザが上側ＬＣＤ２２の画面を正視した場合、ユーザは３Ｄインジケータ２６を視認しやすい。従って、ユーザは上側ＬＣＤ２２の画面を視認している状態で、上側ＬＣＤ２２の表示モードを容易に認識することができる。
【００６４】
また、上側ハウジング２１の内側面には、スピーカ孔２１Ｅが設けられる。後述するスピーカ４３からの音声がこのスピーカ孔２１Ｅから出力される。
【００６５】
［ゲーム装置１０の内部構成］
次に、図６を参照して、ゲーム装置１０の内部の電気的構成について説明する。図６は、ゲーム装置１０の内部構成を示すブロック図である。図６に示すように、ゲーム装置１０は、上述した各部に加えて、情報処理部３１、メインメモリ３２、外部メモリインターフェイス（外部メモリＩ／Ｆ）３３、データ保存用外部メモリＩ／Ｆ３４、データ保存用内部メモリ３５、無線通信モジュール３６、ローカル通信モジュール３７、リアルタイムクロック（ＲＴＣ）３８、加速度センサ３９、電源回路４０、およびインターフェイス回路（Ｉ／Ｆ回路）４１等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて下側ハウジング１１（または上側ハウジング２１でもよい）内に収納される。
【００６６】
情報処理部３１は、所定のプログラムを実行するためのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１１、画像処理を行うＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１２等を含む情報処理手段である。本実施形態では、所定の処理を実行するためのプログラムがゲーム装置１０内のメモリ（例えば外部メモリＩ／Ｆ３３に接続された外部メモリ４４やデータ保存用内部メモリ３５）に記憶されている。情報処理部３１のＣＰＵ３１１は、当該プログラムを実行することによって、当該プログラムに応じた処理（例えば、撮影処理や、後述する画像表示処理など）を実行する。なお、情報処理部３１のＣＰＵ３１１によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。また、情報処理部３１は、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３１３を含む。情報処理部３１のＧＰＵ３１２は、情報処理部３１のＣＰＵ３１１からの命令に応じて画像を生成し、ＶＲＡＭ３１３に描画する。そして、情報処理部３１のＧＰＵ３１２は、ＶＲＡＭ３１３に描画された画像を上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に出力し、上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に当該画像が表示される。
【００６７】
情報処理部３１には、メインメモリ３２、外部メモリＩ／Ｆ３３、データ保存用外部メモリＩ／Ｆ３４、および、データ保存用内部メモリ３５が接続される。外部メモリＩ／Ｆ３３は、外部メモリ４４を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリＩ／Ｆ３４は、データ保存用外部メモリ４５を着脱自在に接続するためのインターフェイスである。
【００６８】
メインメモリ３２は、情報処理部３１（のＣＰＵ３１１）のワーク領域やバッファ領域として用いられる揮発性の記憶手段である。すなわち、メインメモリ３２は、上記プログラムに基づく処理に用いられる各種データを一時的に記憶したり、外部（外部メモリ４４や他の機器等）から取得されるプログラムを一時的に記憶したりする。本実施形態では、メインメモリ３２として例えばＰＳＲＡＭ（Ｐｓｅｕｄｏ−ＳＲＡＭ）を用いる。
【００６９】
外部メモリ４４は、情報処理部３１によって実行されるプログラムを記憶するための不揮発性の記憶手段である。外部メモリ４４は、例えば読み取り専用の半導体メモリで構成される。外部メモリ４４が外部メモリＩ／Ｆ３３に接続されると、情報処理部３１は外部メモリ４４に記憶されたプログラムを読み込むことができる。情報処理部３１が読み込んだプログラムを実行することにより、所定の処理が行われる。データ保存用外部メモリ４５は、不揮発性の読み書き可能なメモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、所定のデータを格納するために用いられる。例えば、データ保存用外部メモリ４５には、外側カメラ２３で撮像された画像や他の機器で撮像された画像が記憶される。データ保存用外部メモリ４５がデータ保存用外部メモリＩ／Ｆ３４に接続されると、情報処理部３１はデータ保存用外部メモリ４５に記憶された画像を読み込み、上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に当該画像を表示することができる。
【００７０】
データ保存用内部メモリ３５は、読み書き可能な不揮発性メモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、所定のデータを格納するために用いられる。例えば、データ保存用内部メモリ３５には、無線通信モジュール３６を介した無線通信によってダウンロードされたデータやプログラムが格納される。
【００７１】
無線通信モジュール３６は、例えばＩＥＥＥ８０２．１１．ｂ／ｇの規格に準拠した方式により、無線ＬＡＮに接続する機能を有する。また、ローカル通信モジュール３７は、所定の通信方式（例えば独自プロトコルによる通信や、赤外線通信）により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール３６およびローカル通信モジュール３７は情報処理部３１に接続される。情報処理部３１は、無線通信モジュール３６を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール３７を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
【００７２】
また、情報処理部３１には、加速度センサ３９が接続される。加速度センサ３９は、３軸（ｘｙｚ軸）方向に沿った直線方向の加速度（直線加速度）の大きさを検出する。加速度センサ３９は、下側ハウジング１１の内部に設けられる。加速度センサ３９は、図１に示すように、下側ハウジング１１の長辺方向をｘ軸、下側ハウジング１１の短辺方向をｙ軸、下側ハウジング１１の内側面（主面）に対して垂直な方向をｚ軸として、各軸の直線加速度の大きさを検出する。例えば、加速度センサ３９は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）又はＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能である種類のものでもよい。なお、加速度センサ３９は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ３９は１軸または２軸方向を検出する加速度センサであってもよい。情報処理部３１は、加速度センサ３９が検出した加速度を示すデータ（加速度データ）を受信して、ゲーム装置１０の姿勢や動きを検出することができる。
【００７３】
また、情報処理部３１には、ＲＴＣ３８および電源回路４０が接続される。ＲＴＣ３８は、時間をカウントして情報処理部３１に出力する。情報処理部３１は、ＲＴＣ３８によって計時された時間に基づき現在時刻（日付）を計算する。電源回路４０は、ゲーム装置１０が有する電源（下側ハウジング１１に収納される上記充電式電池）からの電力を制御し、ゲーム装置１０の各部品に電力を供給する。
【００７４】
また、情報処理部３１には、Ｉ／Ｆ回路４１が接続される。Ｉ／Ｆ回路４１には、マイク４２およびスピーカ４３が接続される。具体的には、Ｉ／Ｆ回路４１には、図示しないアンプを介してスピーカ４３が接続される。マイク４２は、ユーザの音声を検知して音声信号をＩ／Ｆ回路４１に出力する。アンプは、Ｉ／Ｆ回路４１からの音声信号を増幅し、音声をスピーカ４３から出力させる。また、タッチパネル１３はＩ／Ｆ回路４１に接続される。Ｉ／Ｆ回路４１は、マイク４２およびスピーカ４３（アンプ）の制御を行う音声制御回路と、タッチパネルの制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するＡ／Ｄ変換およびＤ／Ａ変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル１３からの信号に基づいて所定の形式のタッチ位置データを生成して情報処理部３１に出力する。タッチ位置データは、タッチパネル１３の入力面において入力が行われた位置の座標を示す。なお、タッチパネル制御回路は、タッチパネル１３からの信号の読み込み、および、タッチ位置データの生成を所定時間に１回の割合で行う。情報処理部３１は、タッチ位置データを取得することにより、タッチパネル１３に対して入力が行われた位置を知ることができる。
【００７５】
操作ボタン１４は、上記各操作ボタン１４Ａ〜１４Ｌからなり、情報処理部３１に接続される。操作ボタン１４から情報処理部３１へは、各操作ボタン１４Ａ〜１４Ｉに対する入力状況（押下されたか否か）を示す操作データが出力される。情報処理部３１は、操作ボタン１４から操作データを取得することによって、操作ボタン１４に対する入力に従った処理を実行する。
【００７６】
下側ＬＣＤ１２および上側ＬＣＤ２２は情報処理部３１に接続される。下側ＬＣＤ１２および上側ＬＣＤ２２は、情報処理部３１（のＧＰＵ３１２）の指示に従って画像を表示する。本実施形態では、情報処理部３１は、上側ＬＣＤ２２に右目用画像と左目用画像とを用いた立体画像（立体視可能な画像）を表示させる。
【００７７】
具体的には、情報処理部３１は、上側ＬＣＤ２２のＬＣＤコントローラ（図示せず）と接続され、当該ＬＣＤコントローラに対して視差バリアのオン／オフを制御する。上側ＬＣＤ２２の視差バリアがオンになっている場合、情報処理部３１のＶＲＡＭ３１３に格納された右目用画像と左目用画像とが、上側ＬＣＤ２２に出力される。より具体的には、ＬＣＤコントローラは、右目用画像について縦方向に１ライン分の画素データを読み出す処理と、左目用画像について縦方向に１ライン分の画素データを読み出す処理とを交互に繰り返すことによって、ＶＲＡＭ３１３から右目用画像と左目用画像とを読み出す。これにより、右目用画像および左目用画像が、画素を縦に１ライン毎に並んだ短冊状画像に分割され、分割された右目用画像の短冊状画像と左目用画像の短冊状画像とが交互に配置された画像が、上側ＬＣＤ２２の画面に表示される。そして、上側ＬＣＤ２２の視差バリアを介して当該画像がユーザに視認されることによって、ユーザの右目に右目用画像が、ユーザの左目に左目用画像が視認される。以上により、上側ＬＣＤ２２の画面には立体視可能な画像が表示される。
【００７８】
外側カメラ２３および内側カメラ２４は、情報処理部３１に接続される。外側カメラ２３および内側カメラ２４は、情報処理部３１の指示に従って画像を撮像し、撮像した画像データを情報処理部３１に出力する。
【００７９】
３Ｄ調整スイッチ２５は、情報処理部３１に接続される。３Ｄ調整スイッチ２５は、スライダ２５ａの位置に応じた電気信号を情報処理部３１に送信する。
【００８０】
また、３Ｄインジケータ２６は、情報処理部３１に接続される。情報処理部３１は、３Ｄインジケータ２６の点灯を制御する。例えば、情報処理部３１は、上側ＬＣＤ２２が立体表示モードである場合、３Ｄインジケータ２６を点灯させる。以上がゲーム装置１０の内部構成の説明である。
【００８１】
［ゲーム装置１０における立体画像表示処理の概要］
以下、ゲーム装置１０において実行される立体画像表示処理の概要について説明する。本実施形態では、ゲーム装置１０は、拡張現実感技術を用いて生成した画像を立体的に表示する。すなわち、ゲーム装置１０は、外側カメラ２３によって撮像される画像（撮像画像）と、仮想的に生成される仮想オブジェクトの画像（仮想画像）とを合成した画像（合成画像）を、立体視表示が可能な上側ＬＣＤ２２に表示する。
【００８２】
図７は、本実施形態に係るゲーム装置１０を使用する様子を示す図である。図７では、現実の物体であるボール５１および５２と、マーカー５３とが外側カメラ２３（左目用カメラ２３ａおよび右目用カメラ２３ｂ）によって撮像されている。また、図８は、ゲーム装置１０と、各ボール５１および５２、ならびに、マーカー５３との位置関係を示す図である。図８に示すように、ボール５１がゲーム装置１０に最も近く、マーカー５３がゲーム装置１０に２番目に近く、ボール５２がゲーム装置１０から最も遠くに配置されている。マーカー５３は、拡張現実感技術に用いられる撮像対象である。つまり、ゲーム装置１０は、このマーカー５３と外側カメラ２３との位置関係を算出し、算出された位置関係に基づいて生成された仮想オブジェクト５４の画像を撮像画像に合成することによって合成画像を生成する。
【００８３】
また、図７に示すように、上側ＬＣＤ２２には、拡張現実感技術による合成画像が立体的に表示される。すなわち、図７に示すように、左目用の合成画像（図７に示す実線）と右目用の合成画像（図７に示す点線）との両方が上側ＬＣＤ２２の画面に表示される。なお、図７では、左目用と右目用との両方合成画像が上側ＬＣＤ２２の画面に表示される様子を表している。ただし、実際には、上側ＬＣＤ２２の正面付近に位置するユーザに関しては、上述の視差バリアによって、左目用画像はユーザの左目のみで視認され、右目用画像はユーザの右目のみで視認される。その結果、ユーザは画像を立体的に視認することができる。以下、図９〜図１３を参照して、拡張現実感技術による合成画像が立体的に表示されるまでの処理の概要を説明する。
【００８４】
なお、以下では、左目用カメラ２３ａによって撮像される画像を「左撮像画像」と呼び、右目用カメラ２３ｂによって撮像される画像を「右撮像画像」と呼ぶ。また、左撮像画像と合成される仮想オブジェクトの画像を「左仮想画像」と呼び、右撮像画像と合成される仮想オブジェクトの画像を「右仮想画像」と呼ぶ。また、左撮像画像と左仮想画像とを合成した画像を「左合成画像」と呼び、右撮像画像と右仮想画像とを合成した画像を「右合成画像」と呼ぶ。
【００８５】
（表示領域の決定）
本実施形態においては、ゲーム装置１０は、立体視表示における視差ゼロ距離を調整するために、各撮像画像のうちで画面に表示される領域（表示領域）をそれぞれ適切な位置に決定する。なお、立体視表示される表示対象は、立体視表示時の奥行位置に応じた視差で表示されることになるが、このうち、視差がゼロで表示される表示対象は、表示面上に見える（焦点が合って見える）ことになる。つまり、立体視表示における視差が小さい物体については、奥行き方向に関して表示面の位置に存在するように見え（焦点が合って見え）、視差が大きい物体については、表示面の位置よりも手前または奥に存在するように見える。
【００８６】
本明細書では、上記のような、立体視表示時に、表示面上に見える表示対象までの視点からの深さ（視線方向についての距離）のことを「視差ゼロ距離」と呼ぶ。なお、視差ゼロ距離は実空間においても仮想空間においても設定可能である。つまり、視差ゼロ距離とは、「仮想空間における仮想カメラから、立体視表示において表示面の位置に存在するように見える点までの（仮想カメラの撮像方向についての）距離」または、現実空間における外側カメラ２３から、立体視表示において表示面上に存在するように見える点までの（外側カメラ２３の撮像方向についての）距離」である。また、特に、視差ゼロ距離上の点のうち２つのカメラ位置（２つの外側カメラ２３ａおよび２３ｂの位置、または、２つの仮想カメラの位置）の中線上の点を、「視差ゼロ点」と呼ぶ。ゲーム装置１０では、各撮像画像の表示領域を調整することで、撮像画像に含まれる物体の表示上の視差を調整することができ、それによって立体視表示における視差ゼロ距離を調整することができる。なお、本明細書において「視差」とは、右目用画像に含まれる物体の位置と、左目用画像に含まれる当該物体の位置との差を意味する。
【００８７】
ここで、本実施形態においては、ゲーム装置１０は、視差ゼロ距離が外側カメラ２３からマーカー５３までの距離（図８に示す距離Ｄ）に応じた距離となるように、立体視表示を行う。つまり、ゲーム装置１０は、視差ゼロ距離が上記距離Ｄに応じた距離となるように各撮像画像の表示領域を決定する。例えば、ゲーム装置１０は、視差ゼロ距離が距離Ｄとなるように表示領域を決定することによって、マーカー５３の視差がゼロで表示されるようにし、マーカー５３が画面上の奥行き位置に見える（マーカー５３に焦点が合う）ように立体視表示を行うことも可能である。なお、実際にはマーカー５３は大きさを持っているのでマーカー５３の全域について視差がゼロになるわけではない。しかしながら、本実施形態は、視差ゼロ距離に存在するオブジェクトは視差ゼロとなるような表示を目的とする処理を行うものであり、また、そのオブジェクトの全域について視差ゼロとなるものではないとしても、そのオブジェクトは全体としては視差ゼロで表示されると言える。それゆえ、本明細書では、「視差ゼロ距離に存在するオブジェクトは視差ゼロで表示される」と表現する。マーカーなお、本実施形態では、表示領域を決定する際において、ゲーム装置１０は、上記距離Ｄに対応する仮想空間における距離（後述する仮想マーカー距離ｄ）を実際に算出し、算出した距離に基づいて視差ゼロ距離を決定する。そして、決定された視差ゼロ距離となるように表示領域を調整する（視差を調整する）。仮想マーカー距離ｄの算出方法や、視差ゼロ距離から表示領域を決定する方法の詳細については後述する。
【００８８】
図９は、各撮像画像とそれらに設定される表示領域を示す図である。また、図１０は、図９に示す各撮像画像を表示領域が一致するように重ねて示した図である。なお、図９および図１０では、図面を見やすくする目的で、左撮像画像５５を実線で表し、右撮像画像５６を点線で表している。
【００８９】
例えば外側カメラ２３からマーカー５３までの距離Ｄを視差ゼロ距離とする場合、ゲーム装置１０は、マーカー５３が画面上で左目用画像と右目用画像が（ほぼ）同じ位置に表示されるように（画面上でマーカー５３が視差ゼロとなるように）、左撮像画像５５の表示領域５７、および、右撮像画像５６の表示領域５８を決定する。すなわち、図９および図１０に示すように、各表示領域５７および５８内においてマーカー５３が画面上における左目用画像と右目用画像で（ほぼ）同じ位置となるように（マーカー５３の視差がゼロになるように）、各表示領域５７および５８を決定する。これによって、マーカー５３までの距離を視差ゼロ距離とする立体視表示が行われる。すなわち、立体視表示をした際にマーカー５３が画面上（付近）の奥行き位置にあるように見える。
【００９０】
なお、左撮像画像および右撮像画像を用いて立体視表示する際における視差ゼロ距離は、各表示領域５７および５８の位置に応じて変化する。具体的には、左撮像画像５５においては、表示領域５７が左撮像画像５５の中央から右にずれる量（ずれ量）が大きくなるほど、立体視表示における視差ゼロ点は近づくことになり、このずれ量が小さいほど視差ゼロ点が遠ざかることになる。また、右撮像画像５６においては、表示領域５８が右撮像画像５６の中央から左にずれる量が大きくなるほど視差ゼロ点は近づき、このずれ量が小さいほど視差ゼロ点が遠ざかることになる。また、各表示領域５７および５８が各撮像画像５５および５６の中央にそれぞれ位置する場合、視差ゼロ点は無限遠となる。
【００９１】
以上のように、ゲーム装置１０は、立体視表示における視差ゼロ距離が、外側カメラ２３からマーカー５３までの距離Ｄに応じた距離となるように、各撮像画像５５および５６における各表示領域５７および５８の位置を決定する。したがって、本実施形態によれば、ゲーム装置１０がマーカー５３に近づくと、それに応じて視差ゼロ点が近くなり、ゲーム装置１０がマーカー５３から遠ざかると、それに応じて視差ゼロ点が遠くなる。なお、図９および図１０ではマーカー５３の位置を視差ゼロ点とする場合を例として説明したが、ゲーム装置１０は、マーカー５３の位置だけなく、マーカー５３より所定距離だけ手前（または奥）の位置に視差ゼロ点を合わせることも可能である。また、視差ゼロ距離は現実空間の距離としても仮想空間の距離としても算出することが可能であるので、上記所定距離は、現実空間の距離としても仮想空間の距離としても設定することが可能である。
【００９２】
（合成画像の生成）
上記のようにして表示領域５７および５８が決定されると、ゲーム装置１０は、表示領域内の各撮像画像５５および５６に対して仮想オブジェクト５４の画像（仮想画像）を合成して、合成画像を生成する。合成画像を生成する処理は、マーカー５３を用いた拡張現実感技術によって行われる。すなわち、ゲーム装置１０は、マーカー５３と外側カメラ２３との位置関係を算出し、算出された位置関係に基づいて生成された仮想オブジェクト５４の画像を撮像画像に合成することによって合成画像を生成する。具体的には、仮想空間における仮想カメラの位置および姿勢が上記位置関係に基づいて決定され、仮想カメラから見た仮想オブジェクト５４の画像が撮像画像に合成される。
【００９３】
なお、本実施形態においては、仮想画像を合成する処理は撮像画像５５および５６毎に行われ、各撮像画像５５および５６に合成される各仮想画像は異なっている。つまり、各仮想画像を生成するために２つの仮想カメラが設定される。左撮像画像５５に合成する仮想オブジェクトの画像（左仮想画像）は、左仮想カメラに基づいて生成され、右撮像画像５６に合成する仮想オブジェクトの画像（右仮想画像）は、右仮想カメラに基づいて生成される。なお、左仮想カメラの位置および姿勢は、左目用カメラ２３ａとマーカー５３との位置関係に基づいて算出され、右仮想カメラの位置および姿勢は、右目用カメラ２３ｂとマーカー５３との位置関係に基づいて算出される。以上のようにして２つの仮想画像が生成される結果、図１１に示すように、左撮像画像５５に対して左仮想画像が合成された左合成画像５９が生成される。また、右撮像画像５６に対して右仮想画像が合成された右合成画像６０が生成される。なお、図１１においては、仮想オブジェクト５４がマーカー５３の位置に表示される場合を示しているが、仮想オブジェクト５４の表示位置はマーカー５３の位置でなくてもよい。ゲーム装置１０は、マーカー５３の付近の位置に仮想オブジェクト５４を表示することも可能であるし、マーカー５３から離れた位置に仮想オブジェクト５４を表示することも可能である。
【００９４】
（立体視表示）
上記のように生成された各合成画像５９および６０を用いて、ゲーム装置１０は立体視表示を行う。具体的には、ゲーム装置１０は、上側ＬＣＤ２２の縦１ライン毎に左合成画像５９と右合成画像６０を交互に配置して表示する。なお、図７および図１１では、左目用画像（実線）と右目用画像（点線）との両方が上側ＬＣＤ２２の画面に表示される様子を表している。ただし、実際には、（上側ＬＣＤ２２の視差バリアがオンになっている場合、）上側ＬＣＤ２２の正面付近に位置するユーザに関しては、上述の視差バリアによって、左合成画像５９はユーザの左目のみで視認され、右合成画像６０はユーザの右目のみで視認される。その結果、ユーザは合成画像を立体的に視認することができる。すなわち、ユーザにとっては、視差が小さい仮想オブジェクト５４が表示画面付近にあるように見え、また、ボール５１が仮想オブジェクト５４よりも飛び出して見え、ボール５２が仮想オブジェクト５４よりも奥に見える。
【００９５】
以上のように、本実施形態によれば、ゲーム装置１０は、拡張現実感技術を用いることによって、仮想オブジェクト５４があたかも現実世界に存在しているかのような画像をユーザに提示することができる。また、ゲーム装置１０は、立体視表示を行うことによって、拡張現実感技術による合成画像を立体的に表示することができる。
【００９６】
また、本実施形態では、ゲーム装置１０は、外側カメラ２３からマーカー５３までの距離Ｄに応じて視差ゼロ距離を決めるので、立体視表示される画像の視差ゼロ点は、当該距離Ｄに合わせて自動的に調整される。したがって、例えばマーカー５３の位置あるいはマーカー５３の付近の位置に視差ゼロ点が位置するように自動的に調整することもできる。これによれば、マーカー５３の付近に表示される仮想オブジェクト５４に自動的に視差ゼロ点を合わせることも可能となるので、ユーザにとって仮想オブジェクト５４を見やすく表示することができる。また、本実施形態のように拡張現実感技術を用いる場合には、ユーザは仮想オブジェクト５４を注視する機会が多いと考えられるので、本実施形態によれば、ユーザにとって見やすい立体視表示を可能とすることができる。
【００９７】
（ズーム処理）
また、本実施形態では、自動的に視差ゼロ距離（表示領域）が調整される際に、必要に応じて表示領域が縮小し、画像の拡大（ズームアップ）が行われることがある。以下、図１２〜図１４を参照して、表示領域が縮小される処理の概要について説明する。
【００９８】
図１２は、左撮像画像と表示領域の基準枠との関係を示す図である。図１２に示すように、本実施形態においては、左撮像画像５５の中央に基準枠６１が設定される。基準枠６１は、表示領域を決定する枠（図１３に示す枠６２）の基準位置を表す。なお、本実施形態では、左撮像画像５５は３８４×５１２ドット（縦×横）の大きさであり、基準枠６１は２４０×４００ドット（縦×横）の大きさであるとする。なお、撮像画像および基準枠の大きさ、および、基準枠の位置については、右撮像画像５６も左撮像画像５５と同じである。
【００９９】
図１３は、枠が基準位置からずれた場合の左撮像画像を示す図である。視差ゼロ距離に応じて表示領域が決定される場合、上述のように、左撮像画像５５については枠６２は中央（基準枠６１の位置）から右にずれる。また、枠６２のずれ量ｄｘ（左撮像画像５５の中心点Ｃから枠６２の中心点Ｃ’までの距離）は、上述のように視差ゼロ距離に応じて決まり、視差ゼロ距離が小さいほどずれ量ｄｘが大きくなる。なお、右撮像画像５６については、ずれ量ｄｘの大きさは左撮像画像５５と同じであり、ずれる方向は左撮像画像５５と逆の左方向となる。
【０１００】
ここで、枠６２のずれ量ｄｘが所定値（図１３の例では、５６ドット）を超えると、図１３に示すように、枠６２が左撮像画像５５からはみ出してしまう。枠６２が左撮像画像５５からはみ出す場合において、枠６２の領域をそのまま表示領域とすると、左撮像画像５５からはみ出した部分（図１３に示す斜線部分）については、左撮像画像５５が無いことになる。また、この場合、右撮像画像５６についても枠が右撮像画像５６からはみ出し、枠の左側の部分において右撮像画像５６が無いことになる。したがって、枠６２の領域をそのまま表示領域とすると、画面に表示される画像の両端部分は立体的に見えなくなるので、見にくい画像となってしまう。また、上記両端の部分については撮像画像を表示しないようにする（黒を表示する）方法では、撮像画像の幅が狭くなるので、ユーザに違和感を与えてしまうとともに、上側ＬＣＤ２２の画面を有効に利用することができない。
【０１０１】
そこで、本実施形態では、枠６２が撮像画像からはみ出す場合、ゲーム装置１０は、撮像画像の内側に収まるように枠６２の大きさを変更（縮小）する。図１４は、枠が縮小された左撮像画像を示す図である。図１４においては、枠６２は変更前の枠であり、枠６３は変更後の枠である。上記の場合、ゲーム装置１０は、はみ出した枠６２の頂点が左撮像画像５５の周の位置となるように枠を縮小する。このとき、ゲーム装置１０は、変更前後で枠の中心位置（Ｃ’）が変化しないように枠を縮小する。なお、右撮像画像５６についても、左撮像画像５５と同様に、はみ出した枠６２の頂点が右撮像画像５６の周の位置となり、かつ、変更前後で枠の中心位置が変化しないように、枠が縮小される。以上によって、上側ＬＣＤ２２に表示される画像は拡大されることとなる。
【０１０２】
以上のように、本実施形態では、上記ずれ量ｄｘが大きいために枠が撮像画像からはみ出す場合、枠の大きさが変更される。これによって、各撮像画像５５および５６の表示領域の全体に画像が含まれることになる。したがって、画面の両端の部分が立体的に見えなかったり、表示される画像の幅が狭くなったりすることがなく、立体視表示において見やすい画像を表示することができる。
【０１０３】
なお、上述のように、枠が縮小される場合には、上側ＬＣＤ２２に表示される画像はズームアップ（拡大）されることとなる。ここで、枠が縮小されるのは、ずれ量ｄｘが大きい場合であり、視差ゼロ距離が短い場合である。つまり、本実施形態によれば、近くの物を見る場合に画像がズームアップされるので、自動的にズームアップされてもユーザが違和感を受けることはほとんどなく、見やすい画像を表示することができる。
【０１０４】
また、本実施形態のように自動で視差ゼロ距離が変化する場合において、仮に枠が縮小されないとすれば、ユーザが何ら操作を行っていない場合にも視差ゼロ距離が自動的に変化する結果、画面の両端の部分が立体的に見えなくなる等の問題が生じ、ユーザは非常に大きな違和感を抱くおそれがある。そのため、本実施形態のように自動で視差ゼロ距離が変化する場合においては、枠が自動的に縮小されることによって上記の問題を防止することは、特に有効である。
【０１０５】
［ゲーム装置１０における処理の詳細］
次に、図１５〜図２２を参照して、ゲームプログラムによって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図１５は、ゲームプログラムによる処理において用いられる各種データを示す図である。図１５において、ゲーム装置１０のメインメモリ３２には、ゲームプログラム７１、撮像画像データ７２、および処理用データ７５等が記憶される。
【０１０６】
ゲームプログラム７１は、後述するゲーム処理（図１６）をゲーム装置１０の情報処理部３１に実行させるプログラムである。ゲームプログラム７１は、その一部または全部が適宜のタイミングで外部メモリ４４やデータ保存用内部メモリ３５等から読み込まれることによってメインメモリ３２に記憶される。ゲームプログラム７１には、所定のゲームを進行させるためのプログラムや、立体画像表示処理を実行するためのプログラムが含まれる。
【０１０７】
撮像画像データ７２は、外側カメラ２３によって撮像された画像（撮像画像）を示すデータである。撮像画像データ７２には、左撮像画像データ７３および右撮像画像データ７４が含まれる。左撮像画像データ７３は、左目用カメラ２３ａによって撮像された画像（左撮像画像）を示すデータである。右撮像画像データ７４は、右目用カメラ２３ｂによって撮像された画像（右撮像画像）を示すデータである。なお、各撮像画像データ７３および７４としては、それぞれの最新のデータのみが記憶されてもよいし、新しいものから順にそれぞれ所定個数のデータが記憶されてもよい。
【０１０８】
処理用データ７５は、ゲーム処理において用いられる各種のデータである。処理用データ７５には、認識結果データ７６、仮想カメラ間隔データ７７、仮想マーカー距離データ７８、仮想カメラデータ７９、スケールデータ８０、仮想視差ゼロ距離データ８１、実視差ゼロ距離データ８２、ずれ量データ８３、表示サイズデータ８４、および、視野範囲データ８５が含まれる。なお、処理用データ７５には、上記の他、ゲームに登場する各種オブジェクト（図７に示す仮想オブジェクト５４等）に関するデータや、ＢＧＭ等の音声データ等、ゲームに必要な各種データが記憶される。
【０１０９】
認識結果データ７６は、撮像画像に含まれるマーカー５３を認識する処理（認識処理）の結果を示すデータである。具体的には、本実施形態の認識処理においては、仮想カメラの位置および姿勢を表す情報（例えば、仮想カメラのビュー行列）が認識結果として算出される。なお、ビュー行列は、仮想カメラの位置および姿勢を反映した行列であり、具体的には、仮想空間におけるマーカー座標系で表される座標を、仮想カメラの位置および姿勢を基準とした仮想カメラ座標系で表される座標へと変換する座標変換行列である。上記マーカー座標系は、現実空間におけるマーカー５３の位置に対応する仮想空間内の位置（「仮想マーカー位置」と呼ぶ）を原点とした座標系である。
【０１１０】
また、上記認識処理は、左撮像画像および右撮像画像についてそれぞれ実行されるので、認識処理結果も左撮像画像および右撮像画像についてそれぞれ算出される。つまり、認識結果データ７６は、左目用カメラ２３ａに対応する左仮想カメラに関する認識結果を示すデータと、右目用カメラ２３ｂに対応する右仮想カメラに関する認識結果を示すデータとを含む。
【０１１１】
仮想カメラ間隔データ７７は、仮想空間における左仮想カメラと右仮想カメラとの距離（仮想カメラ間距離ｅ）を示すデータである。詳細は後述するが、この仮想カメラ間距離ｅは、上記認識結果データ７６（各仮想カメラのビュー行列）から算出される。
【０１１２】
仮想マーカー距離データ７８は、仮想空間における２つの仮想カメラから上記仮想マーカー位置までの距離（仮想マーカー距離ｄ）である。ここでは、仮想マーカー距離ｄは、仮想カメラからマーカー対応位置までの距離のうち、仮想カメラの視線方向の成分の長さである。詳細は後述するが、仮想マーカー距離ｄは、上記認識結果データ７６（各仮想カメラのビュー行列）から算出される。
【０１１３】
仮想カメラデータ７９は、仮想画像の生成に用いられる仮想カメラの位置および姿勢を示すデータである。ここで、上記認識結果データ７６も仮想カメラデータ７９と同様、仮想カメラの位置および姿勢（例えば、仮想カメラのビュー行列）を示すが、仮想カメラデータ７９は、認識結果データ７６に対して必要に応じて所定の補正処理（後述するステップＳ１４）を行った結果得られるデータである。また、仮想カメラデータ７９も認識結果データ７６と同様、左仮想カメラの位置および姿勢を示すデータと、右仮想カメラの位置および姿勢を示すデータとを含む。なお、本実施形態においては、認識結果データ７６に対して所定の補正処理を行ったものを仮想カメラのビュー行列（仮想カメラデータ７９）として用いるが、他の実施形態においては、例えば、認識結果データ７６がそのままビュー行列として利用されてもよい。また、例えば、左撮像画像に対する認識結果のみを利用して、左右両方の仮想カメラのビュー行列が設定されてもよい。
【０１１４】
スケールデータ８０は、仮想空間における長さと現実空間における長さとの比率（スケール）ｓを示すデータである。なお、本実施形態では、左目用カメラ２３ａと右目用カメラ２３ｂとの間の長さ（実カメラ間距離Ｅ）は既知であり、上記の比率は、実カメラ間距離Ｅに対する上記仮想カメラ間距離ｅの比（Ｅ／ｅ）として算出される。
【０１１５】
仮想視差ゼロ距離データ８１は、現実空間における視差ゼロ距離Ｆに対応する仮想空間における視差ゼロ距離（仮想視差ゼロ距離）ｆを示すデータである。詳細は後述するが、本実施形態では、仮想視差ゼロ距離ｆは上記仮想マーカー距離ｄに応じて決定される。
【０１１６】
実視差ゼロ距離データ８２は、現実空間におけるにおける視差ゼロ距離（実視差ゼロ距離）Ｆを示すデータである。本実施形態では、実視差ゼロ距離Ｆは上記仮想視差ゼロ距離ｆおよび上記スケールｓに基づいて算出される。
【０１１７】
ずれ量データ８３は、撮像画像内における上述の枠のずれ量ｄｘを示すデータである。具体的には、ずれ量ｄｘは、図１３に示すように、撮像画像の中心点から枠の中心点までの長さである。詳細は後述するが、ずれ量ｄｘは上記実視差ゼロ距離Ｆから算出される。なお、本実施形態では、左撮像画像と右撮像画像とにおける枠のずれ量は等しくなるので、ずれ量データ８３は、ずれ量ｄｘとして１種類の値のみを示せばよい。ただし、他の実施形態においては、ずれ量データ８３は、左撮像画像における枠のずれ量を示すデータと、右撮像画像における枠のずれ量を示すデータとを別個に含んでいてもよい。
【０１１８】
表示サイズデータ８４は、上記枠の大きさを示すデータである。具体的には、表示サイズデータ８４は、枠の縦および横の長さ（ドット数）を示す。なお、上述のように、枠の大きさは、上記ずれ量ｄｘが所定値以下である場合は、予め定められた大きさ（２４０×４００（縦×横））であり、ずれ量ｄｘが所定値を超える場合は、ずれ量ｄｘに応じて縮小される。
【０１１９】
視野範囲データ８５は、仮想カメラの視野範囲を示すデータである。仮想カメラの視野範囲は、例えば仮想カメラの視体積として表すことができ、仮想カメラの射影行列として表すことができる。なお、射影行列は、仮想カメラから見た仮想オブジェクトを描画する際に用いられる行列であり、仮想カメラ座標系で表された座標をスクリーン座標系で表された座標へと変換する座標変換行列である。なお、視野範囲データ８５は、左仮想カメラの視野範囲（射影行列）を示すデータと、右仮想カメラの視野範囲を示すデータとを含む。
【０１２０】
次に、ゲーム装置１０において行われるゲーム処理の詳細を、図１６〜図２２を用いて説明する。図１６は、ゲーム装置１０において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置１０の電源が投入されると、ゲーム装置１０の情報処理部３１（ＣＰＵ３１１）は、図示しないＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ３２等の各ユニットが初期化される。次に、データ保存用内部メモリ３５に記憶されたゲームプログラムがメインメモリ３２に読み込まれ、情報処理部３１のＣＰＵ３１１によってゲームプログラムの実行が開始される。これによって、図１６に示す処理が開始される。
【０１２１】
なお、図１６、図１７、および図１９に示す処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判断ステップで利用される閾値も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、本実施形態では、図１６、図１７、および図２０に示すフローチャートの各ステップの処理をＣＰＵ３１１が実行するものとして説明するが、図１６、図１７、および図２０に示すフローチャートの一部のステップの処理を、ＣＰＵ３１１以外のプロセッサや専用回路が実行するようにしてもよい。
【０１２２】
ステップＳ１において、ＣＰＵ３１１は、撮像画像が取得されたか否かを判定する。すなわち、外側カメラ２３から撮像画像のデータが送られてきたか否かを判定する。なお、本実施形態においては、ステップＳ１〜Ｓ８の処理ループは、１フレーム時間（１／６０秒）に１回の割合で実行されるのに対して、外側カメラ２３はこの割合で撮像画像を送るものでもよいし、この割合よりも少ない頻度（数フレーム時間に１回程度）で撮像画像を送るものでもよい。ステップＳ１の判定結果が肯定である場合、ステップＳ２の処理が実行される。一方、ステップＳ１の判定結果が否定である場合、ステップＳ２の処理がスキップされてステップＳ３の処理が実行される。
【０１２３】
ステップＳ２において、ＣＰＵ３１１は、撮像画像内のマーカー５３を認識する処理を実行する。具体的には、ＣＰＵ３１１は、パターンマッチング等の手法によって撮像画像にマーカー５３が含まれているか否かを判断する。そして、撮像画像にマーカー５３が含まれている場合には、撮像画像内のマーカー５３の位置および向き（例えばマーカー５３の４つの頂点の位置）に基づいて、マーカー５３とカメラ２３ａまたは２３ｂとの位置関係を算出する。そして、この位置関係に対して、仮想空間においてマーカー５３の位置に対応する所定位置と仮想カメラとの位置関係を対応させることで、仮想カメラの位置および姿勢（ビュー行列）を算出する。この場合、仮想カメラの位置および姿勢を示すデータが認識結果データ７６としてメインメモリ３２に記憶される。一方、撮像画像にマーカー５３が含まれていない（マーカー５３が認識できない）場合には、認識失敗を表すデータ（例えばヌル値）が認識結果データ７６としてメインメモリ３２に記憶される。なお、ステップＳ２においては、左撮像画像および右撮像画像の両方について認識処理が実行され、処理結果を示すデータが取得される。ステップＳ２の次にステップＳ３の処理が実行される。
【０１２４】
なお、本実施形態では、ステップＳ２の認識処理が１フレーム時間内に実行され、ステップＳ１〜Ｓ８の処理ループ内で実行されるものとした。ここで、認識処理は、１回の認識処理が１フレーム時間で完了することが困難な場合も考えられる。そのため、他の実施形態においては、認識処理は、１フレーム時間を周期として実行される表示処理とは必ずしも同じ周期で実行されなくてもよい。このとき、１回のステップＳ２の処理では、認識処理全体のうちの一部の処理だけが実行されてもよい。この場合、１回のステップＳ２で実行される処理は、ステップＳ１〜Ｓ８の一連の処理が１フレーム時間内に完了することができるような処理量に調整される。つまり、認識処理は、ステップＳ１〜Ｓ８（Ｓ２を除く）の処理ループとは別に並列的に実行され、ＣＰＵ３１１がアイドル状態のときに実行されてもよい。
【０１２５】
ステップＳ３において、ＣＰＵ３１１は、ゲーム制御処理を実行する。ゲーム制御処理は、ユーザ（プレイヤ）の入力等に応じて仮想空間内のオブジェクトを動作させること等によってゲームを進行させる処理である。具体的には、ゲーム制御処理には、ユーザの入力に従ってプレイヤキャラクタの動作を制御したり、ゲームプログラム７１において定められた制御ルールに従ってオブジェクト（図７に示す仮想オブジェクト５４）の動作を制御したりする処理が含まれる。本実施形態においては、オブジェクトは、仮想空間における仮想マーカー位置を基準として動作が制御される。すなわち、ＣＰＵ３１１は、仮想マーカー位置にオブジェクトを配置したり、仮想マーカー位置の周囲を移動したりする制御を行う。なお、図７では、仮想空間に仮想オブジェクトを１つだけ配置しているが、複数の仮想オブジェクトが配置され、ＣＰＵ３１１は、複数の仮想オブジェクトの動作を制御するようにしてもよい。また、本実施形態においては、ＣＰＵ３１１は、タッチパネル１３、各操作ボタン１４Ａ〜１４Ｌ、およびアナログスティック１５に対する操作結果の他、上記認識結果データ７６をゲーム入力として用いてもよい。ステップＳ３の次にステップＳ４の処理が実行される。
【０１２６】
ステップＳ４において、ＣＰＵ３１１は視差ゼロ点算出処理を実行する。視差ゼロ点算出処理は、撮像画像に基づいて外側カメラからマーカー５３までの距離を算出し、当該距離に応じた視差ゼロ距離（実視差ゼロ距離）を算出する処理である。以下、図１７を参照して、視差ゼロ点算出処理の詳細を説明する。
【０１２７】
図１７は、図１６に示す視差ゼロ点算出処理（ステップＳ４）の流れを示すフローチャートである。視差ゼロ点算出処理においては、まずステップＳ１１において、ＣＰＵ３１１はステップＳ２の認識処理が成功したか否かを判定する。ステップＳ１１の判定は、メインメモリ３２から読み出される認識結果データ７６が仮想カメラの位置および姿勢を示すデータであるか、それとも、認識失敗を示すデータであるかによって行うことができる。ステップＳ１１の判定結果が肯定である場合、ステップＳ１２〜Ｓ１７の処理が実行される。一方、ステップＳ１１の判定結果が否定である場合、ステップＳ１２〜Ｓ１７の処理がスキップされ、ＣＰＵ３１１は視差ゼロ点算出処理を終了する。なお、他の実施形態において、認識処理が１フレーム時間を周期として実行されない場合には、ステップＳ１１においてはＣＰＵ３１１は認識処理が完了したか否かを判定し、認識処理が完了した場合のみステップＳ１２〜Ｓ１７の処理を実行するようにしてもよい。
【０１２８】
ステップＳ１２において、ＣＰＵ３１１は、左仮想カメラと右仮想カメラの間隔（仮想カメラ間距離ｅ）を算出する。仮想カメラ間距離ｅは、認識処理の結果である認識結果データ７６に基づいて算出される。以下、図１８を参照して、仮想カメラ間距離ｅの算出方法について説明する。
【０１２９】
図１８は、仮想空間における仮想カメラ間距離を示す図である。図１８において、点Ｐｃ１が左仮想カメラの位置であり、点Ｐｃ２が右仮想カメラの位置であり、点Ｐｍが仮想マーカー位置（現実空間におけるマーカー５３の位置に対応する仮想空間内の位置）である。ここで、仮想マーカー位置（点Ｐｍ）を原点（０，０，０）として、当該原点に対して左仮想カメラのビュー行列（左ビュー行列）の逆行列を乗算すると、マーカー座標系における左仮想カメラの位置（点Ｐｃ１）を得ることができる。同様にして、仮想マーカー位置（点Ｐｍ）を原点（０，０，０）として、当該原点に対して右仮想カメラのビュー行列（右ビュー行列）の逆行列を乗算すると、マーカー座標系における右仮想カメラの位置（点Ｐｃ２）を得ることができる。これによって、マーカー座標系での左仮想カメラの位置および右仮想カメラの位置が分かることになるため、この間の距離を求めることによって仮想カメラ間距離ｅを求めることができる（図１８）。なお、仮想カメラ間距離を求める方法としては、上記の方法に限らず、例えば、右目用カメラによって撮像されたマーカーの位置と左目用カメラによって撮像されたマーカーの位置との差を、カメラ位置の差と考えることによって仮想カメラ間距離を算出してもよい。
【０１３０】
ステップＳ１２における具体的な処理としては、ＣＰＵ３１１は、認識結果データ７６をメインメモリ３２から読み出し、認識結果データ７６により示される左ビュー行列の逆行列を（０，０，０）に対して乗算した結果と、右ビュー行列の逆行列を（０，０，０）に対して乗算した結果の差を算出する演算を行う。そして、この演算によって得られた座標と原点との間の距離を示すデータを、仮想カメラ間隔データ７７としてメインメモリ３２に記憶する。ステップＳ１２の次にステップＳ１３の処理が実行される。
【０１３１】
ステップＳ１３において、ＣＰＵ３１１は、仮想カメラから仮想マーカー位置までの距離（仮想マーカー距離ｄ）を算出する。図１９は、仮想空間における仮想マーカー距離を示す図である。図１９に示すように、仮想マーカー距離ｄは、仮想カメラからマーカー対応位置までの距離のうち、仮想カメラの視線方向の成分の長さである。したがって、左仮想カメラの視線方向が左仮想カメラのカメラ座標系（図１９に示すＸＹＺ座標系）におけるＺ軸方向であるとすると、仮想マーカー距離ｄは、左仮想カメラの位置（点Ｐｃ１）を始点とし仮想マーカー位置（点Ｐｍ）を終点とするベクトルＶ１のＺ軸成分の値となる。上記ベクトルＶ１は、原点（０，０，０）に左ビュー行列を乗算することで算出される。
【０１３２】
ステップＳ１３における具体的な処理としては、ＣＰＵ３１１は、認識結果データ７６をメインメモリ３２から読み出し、認識結果データ７６により示される左ビュー行列を（０，０，０）に対して乗算して得られる座標（左仮想カメラの座標系における仮想マーカー位置を示す座標）のＺ軸成分の絶対値を算出する。そして、算出された絶対値を示すデータを、仮想マーカー距離データ７８としてメインメモリ３２に記憶する。なお、本実施形態では、左仮想カメラのビュー行列を用いて仮想マーカー距離ｄを算出する場合を例として説明したが、他の実施形態においては、ＣＰＵ３１１は、右仮想カメラのビュー行列を用いて仮想マーカー距離ｄを算出してもよい。ステップＳ１３の次にステップＳ１４の処理が実行される。
【０１３３】
ステップＳ１４において、ＣＰＵ３１１は、仮想カメラの位置および姿勢を補正する。ここで、上記認識処理の精度や、各カメラ２３ａおよび２３ｂの取り付け精度には誤差がある。そのため、認識処理の処理結果として得られる各仮想カメラの位置および姿勢（ビュー行列）をそのまま用いて仮想画像を生成すると、各仮想カメラの位置関係が実際の各カメラ２３ａおよび２３ｂの位置関係とは異なる結果、仮想画像の立体視表示を正常に行うことができないおそれがある。例えば、各仮想カメラが全く異なる方向を向いてしまうと、仮想画像の立体視表示を正常に行うことができなくなる。以上より、ステップＳ１４においては、ＣＰＵ３１１は、認識処理の処理結果として得られるビュー行列に所定の補正を行う。
【０１３４】
ステップＳ１４の補正処理においては、右仮想カメラが、左仮想カメラから所定方向に上記仮想カメラ間距離ｅだけ離れた位置で、かつ、左仮想カメラの姿勢と同じ姿勢となるように補正される。なお、上記所定方向は、現実空間における左目用カメラ２３ａから右目用カメラ２３ｂへの方向に対応する方向であり、例えば仮想カメラ座標系におけるＸ軸方向である。具体的には、ＣＰＵ３１１は、認識結果データ７６および仮想カメラ間隔データ７７をメインメモリ３２から読み出し、認識結果データ７６が示す左ビュー行列に対して平行移動行列（−ｅ，０，０）を乗算した行列を右ビュー行列とする（左仮想カメラの座標系の原点にある左仮想カメラを（−ｅ，０，０）に平行移動したものを右仮想カメラとする行列を算出する）。そして、乗算によって得られた右ビュー行列を示すデータと、認識結果データ７６が示す左ビュー行列のデータとが、仮想カメラデータ７９としてメインメモリ３２に記憶される。ステップＳ１４の次にステップＳ１５の処理が実行される。
【０１３５】
上記ステップＳ１４の処理によれば、２つの仮想カメラは、所定方向に並んで配置され、かつ、視線方向が同じに設定される。これによれば、２つの仮想カメラの位置および姿勢の関係が理想的なものとなるので、正常な立体視表示を行うことができる。なお、上記ステップＳ１４では、ＣＰＵ３１１は、左仮想カメラを基準として右仮想カメラの位置および姿勢を補正することとしたが、他の実施形態においては、右仮想カメラを基準として左仮想カメラの位置および姿勢を補正するようにしてもよい。また、他の実施形態では、ＣＰＵ３１１は、ステップＳ１４の処理を省略し、認識処理の結果として得られた各仮想カメラの位置および姿勢をそのまま用いて仮想画像を生成してもよい。
【０１３６】
ステップＳ１５において、ＣＰＵ３１１は、現実空間に対する仮想空間の比率（スケール）ｓを算出する。上述のように、スケールｓは、実カメラ間距離Ｅに対する仮想カメラ間距離ｅの比（Ｅ／ｅ）として算出される。なお、実カメラ間距離Ｅは、既知であり、メインメモリ３２等に記憶されているものとする。ＣＰＵ３１１は、実カメラ間距離Ｅを示すデータと仮想カメラ間隔データ７７とをメインメモリ３２から読み出し、実カメラ間距離Ｅに対する仮想カメラ間距離ｅの比を算出する。算出された比率ｓを示すデータは、スケールデータ８０としてメインメモリ３２に記憶される。ステップＳ１５の次にステップＳ１６の処理が実行される。
【０１３７】
ステップＳ１６において、ＣＰＵ３１１は、上記仮想マーカー距離ｄに基づいて仮想空間における視差ゼロ距離（仮想視差ゼロ距離）を決定する。仮想視差ゼロ距離は、仮想マーカー距離ｄに応じて決められればよく、例えば、仮想マーカー距離ｄから所定値を加算または減算した距離であってもよいし、仮想マーカー距離ｄに所定値を積算した距離であってもよいし、仮想マーカー距離ｄと等しい距離であってもよい。また、例えば、ＣＰＵ３１１は、所定の仮想オブジェクトの位置が視差ゼロ点の位置となるように、仮想視差ゼロ距離を算出するようにしてもよい。すなわち、所定の仮想オブジェクトが仮想マーカー位置から（仮想カメラの奥行き方向に関して）距離Ｌだけ離れた位置に配置される場合、仮想マーカー距離に当該距離Ｌを加算した距離を仮想視差ゼロ距離としてもよい。ステップＳ１６において決定された仮想視差ゼロ距離を示すデータは、仮想視差ゼロ距離データ８１としてメインメモリ３２に記憶される。ステップＳ１６の次にステップＳ１７の処理が実行される。
【０１３８】
ステップＳ１７において、ＣＰＵ３１１は、現実空間における視差ゼロ距離（実視差ゼロ距離）Ｆを算出する。実視差ゼロ距離Ｆは、上記仮想視差ゼロ距離ｆにスケールｓを乗算することによって得ることができる。すなわち、ＣＰＵ３１１は、スケールデータ８０と仮想視差ゼロ距離データ８１とをメインメモリ３２から読み出し、仮想視差ゼロ距離ｆにスケールｓを乗算した値を算出する。そして、算出された値を示すデータを実視差ゼロ距離データ８２としてメインメモリ３２に記憶する。これによって、立体視表示における視差ゼロ距離が算出されたこととなる。ステップＳ１７の後、ＣＰＵ３１１は視差ゼロ点算出処理を終了する。
【０１３９】
上記視差ゼロ点算出処理によれば、ＣＰＵ３１１は、外側カメラ２３からマーカー５３までの距離に対応する仮想マーカー距離ｄを算出し（ステップＳ１３）、仮想マーカー距離ｄに応じた値となるように実視差ゼロ距離Ｆを算出する（ステップＳ１６，Ｓ１７）。したがって、本実施形態によれば、外側カメラ２３からマーカー５３までの距離Ｄに応じて実視差ゼロ距離Ｆが決まるので、立体視表示される画像の視差ゼロ点は、当該距離Ｄに合わせて自動的に調整される。これによれば、マーカー５３の付近に表示される仮想オブジェクトの位置に自動的に視差ゼロ点を合わせることも可能となるので、ユーザにとって仮想オブジェクトを見やすく表示することができる。
【０１４０】
なお、上記視差ゼロ点算出処理においては、ＣＰＵ３１１は、仮想マーカー距離ｄから仮想視差ゼロ距離ｆを決定した後、実視差ゼロ距離Ｆを算出した。ここで、他の実施形態においては、ＣＰＵ３１１は、現実空間における外側カメラ２３からマーカー５３までの距離Ｄを仮想マーカー距離ｄから算出した後、距離Ｄから実視差ゼロ距離Ｆを算出してもよい。例えば、仮想空間におけるオブジェクトの位置が視差ゼロ点の位置となるように視差ゼロ距離を調整したい場合には、本実施形態のように、仮想マーカー距離ｄから仮想視差ゼロ距離ｆを決定する方法が好ましい。一方、マーカー５３よりも１０ｃｍ手前の位置に視差ゼロ点を合わせたい場合のように、現実空間における長さを基準として視差ゼロ距離を決定したい場合には、上記距離Ｄから実視差ゼロ距離Ｆを決定する方法が好ましい。すなわち、ＣＰＵ３１１は、上記仮想マーカー距離ｄに上記スケールｓを乗算することによって距離Ｄを算出し、距離Ｄに所望の調整量（例えば１０ｃｍ）を減算（または加算）した距離を視差ゼロ距離Ｆとしてもよい。これによって、マーカー５３から現実空間における実際の距離だけ離れた位置を視差ゼロ点とすることができる。いずれの方法によっても、外側カメラ２３からマーカー５３までの距離に応じて視差ゼロ距離Ｆ自動的に調整することができる。
【０１４１】
また、上記視差ゼロ点算出処理においては、ＣＰＵ３１１は、マーカー５３の大きさを用いずに実視差ゼロ距離Ｆを算出したが、他の実施形態においては、マーカー５３の大きさを用いる方法によって実視差ゼロ距離Ｆを算出してもよい。すなわち、マーカー５３の大きさが既知である場合には、ＣＰＵ３１１は、認識処理において撮像画像内のマーカー５３の大きさを特定することによって、カメラ２３ａまたは２３ｂからマーカー５３までの距離Ｄを算出することができる（ステップＳ２において、マーカーを認識して仮想カメラの位置および姿勢（ビュー行列）を算出する際に、マーカーの大きさを考慮しておけば、仮想マーカー距離ｄの値を距離Ｄの値と一致させることができる）。ＣＰＵ３１１は、算出された距離Ｄに応じて実視差ゼロ距離Ｆを決定するようにしてもよい。なお、本実施形態では、マーカー５３の大きさを用いずに実視差ゼロ距離Ｆを算出するので、マーカー５３として自由なサイズのものを使用することができ、ゲーム装置１０における拡張現実感技術の汎用性が高くなるという利点がある。
【０１４２】
図１６の説明に戻り、ステップＳ４の視差ゼロ点算出処理の次に、ステップＳ５の処理が実行される。ステップＳ５においては、ＣＰＵ３１１は左画像生成処理を実行する。左画像生成処理は、立体視表示に用いられる左目用画像（左合成画像）を生成する処理である。以下、図２０を参照して、左画像生成処理の詳細を説明する。
【０１４３】
図２０は、図１６に示す左画像生成処理（ステップＳ５）の流れを示すフローチャートである。左画像生成処理においては、まずステップＳ２０において、ＣＰＵ３１１はステップＳ２の認識処理が成功したか否かを判定する。ステップＳ２０の処理は上述のステップＳ１１の処理と同じである。ステップＳ２０の判定結果が肯定である場合、ステップＳ２１の処理が実行される。一方、ステップＳ２０の判定結果が否定である場合、ステップＳ２１〜Ｓ２４の処理がスキップされ、ステップＳ２５の処理が実行される。なお、他の実施形態において、認識処理が１フレーム時間を周期として実行されない場合には、ステップＳ２０においてはＣＰＵ３１１は認識処理が完了したか否かを判定し、認識処理が完了した場合のみステップＳ２１〜Ｓ２４の処理を実行するようにしてもよい。
【０１４４】
ステップＳ２１において、ＣＰＵ３１１は、撮像画像内における表示領域（枠）のずれ量ｄｘを実視差ゼロ距離Ｆに基づいて算出する。すなわち、立体視表示における視差ゼロ点の位置が上記実視差ゼロ距離Ｆの位置となるように、上記ずれ量ｄｘを算出する。以下、図２１を参照して、ずれ量ｄｘの算出方法について説明する。
【０１４５】
図２１は、現実空間と撮像画像の平面との対応を示す図である。図２１において、点Ｐ１〜点Ｐ８は現実空間における位置を表し、点Ｐ９および点Ｐ１０は撮像画像の平面における位置を表す。点Ｐ１は左目用カメラ２３ａの位置を表し、点Ｐ２は右目用カメラ２３ｂの位置を表す。点Ｐ３は２つの左目用カメラ２３ａおよび２３ｂの中点である。したがって、線分Ｐ１−Ｐ３の長さは、実カメラ間距離（Ｅ）の１／２（Ｅ／２）となる。また、点Ｐ４は立体視表示における視差ゼロ点の位置であり、左目用カメラ２３ａの撮像方向に点Ｐ３から上記実視差ゼロ距離Ｆだけ離れた位置である。直線Ｌ１およびＬ２は、左目用カメラ２３ａの撮像範囲（視野範囲）を表している。
【０１４６】
また、図２１において、左目用カメラ２３ａから撮像方向に任意の距離αだけ離れた位置に平面Ｑ１を設定する。点Ｐ５は、点Ｐ１から撮像方向へ延ばした直線と平面Ｑ１との交点である。点Ｐ６は上記直線Ｌ１と平面Ｑ１との交点であり、点Ｐ７は上記直線Ｌ２と平面Ｑ１との交点である。上記のように平面Ｑ１を設定する場合、平面Ｑ１における線分Ｐ６−Ｐ７の範囲が、左撮像画像５５における横幅（５１２ドット）に対応する。また、平面Ｑ１上における点Ｐ５の位置が、左撮像画像５５の中心位置に対応する。
【０１４７】
ここで、立体視表示における視差ゼロ点の位置が距離Ｆの位置となるように枠６２を設定するには、「視差ゼロ距離の位置にある点が（左目用画像と右目用画像とで）同じ位置に表示される」という条件を満たすように、左右の表示領域を設定すればよい。なお、視差ゼロ距離の位置にある点とは、例えば点Ｐ４である。つまり、上記条件を満たすためには、点Ｐ４が同じ位置に表示されるように各表示領域を設定すればよい。このためには、図２１に示すように、枠６２の中心位置（点Ｐ１０）が平面Ｑ１上における点Ｐ８に対応すればよい。ここで、点Ｐ８は、左目用カメラ２３ａ（点Ｐ１）から視差ゼロ点の位置（点Ｐ４）への直線と平面Ｑ１との交点である。以上より、図２１に示す対応関係を満たすようなずれ量ｄｘを算出すれば、上記条件を満たし、立体視表示における視差ゼロ点の位置が距離Ｆの位置とすることができる。
【０１４８】
図２１において、左撮像画像５５の横幅の半分の長さ“２５６”に対するずれ量ｄｘの比（ｄｘ：２５６）と、平面Ｑ１における線分Ｐ５−Ｐ６の長さβに対する線分Ｐ５−Ｐ７の長さγの比（γ：β）とは、等しくなる。したがって、ずれ量ｄｘは式（１）として表すことができる。
ｄｘ＝γ×２５６／β  …（１）
また、図２１において、線分Ｐ１−Ｐ５の長さαに対する線分Ｐ５−Ｐ７の長さγの比（γ：α）は、線分Ｐ３−Ｐ４の長さＦに対する線分Ｐ１−Ｐ３の長さ“Ｅ／２”の比（Ｅ／２：Ｆ）に等しくなる。したがって、長さγは式（２）として表すことができる。
γ＝α×（Ｅ／２）／Ｆ  …（２）
上式（１）、（２）より、ｄｘは、式（３）として表すことができる。
ｄｘ＝（α／β）×（Ｅ／２）×（１／Ｆ）×２５６  …（３）
上式（３）において、上述のように実カメラ間距離Ｅの値は既知であり、メインメモリ３２等に記憶されている。また、“α／β”の値は、左目用カメラ２３ａの画角から求めることができ、既知である。この値もメインメモリ３２等に記憶されているものとする。また、変数Ｆは、上記視差ゼロ点算出処理において実視差ゼロ距離Ｆとして算出されている。したがって、上式（３）を用いて、ずれ量ｄｘを算出することができる。
【０１４９】
ステップＳ２１における具体的な処理としては、ＣＰＵ３１１は、実視差ゼロ距離データ８２をメインメモリ３２から読み出すとともに、上記実カメラ間距離Ｅおよび“α／β”を示すデータをメインメモリ３２から読み出す。そして、読み出した値を上式（３）に代入することによってずれ量ｄｘを算出する。算出されたずれ量ｄｘを示すデータは、ずれ量データ８３としてメインメモリ３２に記憶される。ステップＳ２１の次にステップＳ２２の処理が実行される。
【０１５０】
なお、本実施形態においては、実視差ゼロ距離Ｆからずれ量ｄｘを算出するようにしたが、仮想視差ゼロ距離ｆからずれ量ｄｘを算出することも可能である。具体的には、上式（３）において、実カメラ間距離Ｅに代えて仮想カメラ間距離ｅを用い、実視差ゼロ距離Ｆに代えて仮想視差ゼロ距離ｆを用いることで、ずれ量ｄｘを算出することができる。したがって、他の実施形態においては、ＣＰＵ３１１は、実視差距離Ｆを算出せずに、仮想視差ゼロ距離ｆのみを算出してずれ量ｄｘを算出するようにしてもよい。
【０１５１】
ステップＳ２２において、ＣＰＵ３１１は、ずれ量データ８３をメインメモリ３２から読み出し、ずれ量ｄｘが所定値Ａよりも大きいか否かを判定する。ここで、ステップＳ２２の判定処理は、枠６２が左撮像画像５５からはみ出しているか否かを判定するための処理である。したがって、上記所定値Ａは、左撮像画像５５の横の長さの１／２（＝２５６）から基準枠６１の横の長さの１／２（＝２００）を減算した値（＝５６）となる。ステップＳ２２の判定結果が肯定である場合、ステップＳ２３の処理が実行される。一方、ステップＳ２２の判定結果が否定である場合、ステップＳ２４の処理が実行される。
【０１５２】
ステップＳ２３において、ＣＰＵ３１１は左右の各撮像画像について枠の大きさを縮小する。このとき、枠は、撮像画像の外へはみ出さないように大きさが縮小される。さらに、本実施形態では、撮像画像の外へはみ出さない範囲で枠をできるだけ大きくするべく、ＣＰＵ３１１は次のように枠を縮小する。すなわち、ＣＰＵ３１１は、枠のはみ出した頂点が撮像画像の周の位置となるように、かつ、中心位置を変化させずに枠を小さくする。より具体的には、枠の左右方向の大きさは、ずれ量ｄｘから上記所定値Ａを減算した値の２倍“２×（ｄｘ−Ａ）”だけ小さくなる。また、枠の上下方向の大きさは、枠のアスペクト比が維持されるように小さくなる。ＣＰＵ３１１は、縮小後の枠の大きさを示すデータを表示サイズデータ８４としてメインメモリ３２に記憶する。ステップＳ２３の次にステップＳ２５の処理が実行される。
【０１５３】
一方、ステップＳ２４において、ＣＰＵ３１１は、枠の大きさを予め定められた基準値に設定する。基準値とは、上述の基準枠６１（図１２参照）の大きさであり、本実施形態では、２４０×４００ドット（縦×横）の大きさである。つまり、ステップＳ２４では、枠の大きさは変化しない。ＣＰＵ３１１は、上記基準値の大きさを示すデータを表示サイズデータ８４としてメインメモリ３２に記憶する。ステップＳ２４の次にステップＳ２５の処理が実行される。
【０１５４】
上記ステップＳ２１〜Ｓ２４の一連の処理によって、撮像画像における表示領域が決定される。すなわち、立体視表示における視差ゼロ点の位置が実視差ゼロ距離Ｆとなるように枠の位置（ずれ量ｄｘ）が決定され（ステップＳ２１）、枠が撮像画像からはみ出る場合（ステップＳ２２でＹｅｓとなる場合）には、枠が縮小される（ステップＳ２３）。また、枠が撮像画像からはみ出ない場合には、枠は基準値の大きさに維持される（ステップＳ２４）。以上の一連の処理によって、枠の位置および大きさが決定されるので、表示領域が決定されたこととなる。
【０１５５】
ステップＳ２５において、ＣＰＵ３１１は、上記ステップＳ２１〜Ｓ２４の処理によって決定された表示領域内の撮像画像を、ＶＲＡＭ３１３内の所定の記憶領域である左フレームバッファに描画する。ステップＳ２５の次にステップＳ２６の処理が実行される。
【０１５６】
ステップＳ２６において、ＣＰＵ３１１は、ステップＳ２の認識処理が成功したか否かを判定する。ステップＳ２６の処理は上述のステップＳ１１の処理と同じである。ステップＳ２６の判定結果が肯定である場合、ステップＳ２７およびＳ２８の処理が実行される。一方、ステップＳ２６の判定結果が否定である場合、ステップＳ２７およびＳ２８の処理がスキップされ、ＣＰＵ３１１は左画像生成処理を終了する。なお、他の実施形態において、認識処理が１フレーム時間を周期として実行されない場合には、ステップＳ２６においてはＣＰＵ３１１は認識処理が完了したか否かを判定し、認識処理が完了した場合のみステップＳ２７およびＳ２８の処理を実行するようにしてもよい。あるいは、認識処理が完了した場合には、前回の処理ループで用いられた仮想カメラの設定（位置、姿勢、視野範囲）を用いてステップＳ２７およびＳ２８の処理が実行されてもよい。
【０１５７】
ステップＳ２７において、ＣＰＵ３１１は、撮像画像の表示領域に応じて左仮想カメラの視野範囲（射影行列）を算出する。視野範囲は、表示領域内の撮像画像が表す現実空間に対応する仮想空間を範囲とするように算出される。これによって、撮像画像の表示範囲に対応する仮想画像を生成することができ、撮像画像上における適切な位置に仮想オブジェクトが表示された合成画像を得ることができる。以下、図２２を参照して仮想カメラの視野範囲の算出方法について説明する。
【０１５８】
図２２は、撮像画像の平面と仮想空間との対応を示す図である。図２２において、点Ｒ１〜点Ｒ９は仮想空間における位置を表し、点Ｒ１１〜点Ｒ１４は撮像画像の平面における位置を表す。点Ｒ１は仮想空間における左仮想カメラの位置を表し、直線Ｌ３およびＬ４は、左仮想カメラに対応する左目用カメラ２３ａの撮像範囲（視野範囲）を表している。ここでは、直線Ｌ３およびＬ４が表す左仮想カメラの視野範囲を、「全視野範囲」と呼ぶ。また、平面Ｓ１は左仮想カメラのニアクリップ面であり、平面Ｓ２は左仮想カメラのファークリップ面である。左仮想カメラの位置（点Ｒ１）からニアクリップ面までの距離、および、左仮想カメラの位置からファークリップ面までの距離は、予め定められている。
【０１５９】
また、撮像画像の平面とニアクリップ面との対応を考えると、図２２に示すように、左撮像画像５５の左端の点Ｒ１１が、ニアクリップ面Ｓ１と直線Ｌ４との交点Ｒ２に対応する。また、左撮像画像５５の右端の点Ｒ１４が、ニアクリップ面Ｓ１と直線Ｌ３との交点Ｒ５に対応する。
【０１６０】
ここで、表示領域に対応する仮想空間を範囲とするように視野範囲を設定するには、左撮像画像５５の領域全体に対する表示領域６３の（左右方向に関する）位置関係と、上記全範囲に対する左仮想カメラの視野範囲の位置関係とを対応させればよい。すなわち、ニアクリップ面においては、図２２に示すように、点Ｒ２〜点Ｒ５の位置関係を、撮像画像における点Ｒ１１〜点Ｒ１４の位置関係と対応させればよい。より具体的には、線分Ｒ２−Ｒ３の長さｂ１と、線分Ｒ３−Ｒ４の長さｂ２と、線分Ｒ４−Ｒ５の長さｂ３との比（ｂ１：ｂ２：ｂ３）が、線分Ｒ１１−Ｒ１２の長さａ１と、線分Ｒ１２−Ｒ１３の長さａ２と、線分Ｒ１３−Ｒ１４の長さａ３との比（ａ１：ａ２：ａ３）と等しくなるように、点Ｒ３および点Ｒ４を設定すればよい。ここで、“ａ１：ａ２：ａ３”は、上記ステップＳ２１〜Ｓ２４で表示領域６３が決定されているので、既知である。また、点Ｒ２および点Ｒ５の位置は、左仮想カメラの位置および姿勢（ビュー行列）と、左目用カメラ２３ａの画角（既知である）とから算出することができる。したがって、ＣＰＵ３１１は、ａ１：ａ２：ａ３＝ｂ１：ｂ２：ｂ３となる点Ｒ３および点Ｒ４を算出することができる。
【０１６１】
また、ファークリップ面においてもニアクリップ面と同様にして点Ｒ７および点Ｒ８の位置を算出することができる。すなわち、ＣＰＵ３１１は、線分Ｒ６−Ｒ７の長さｃ１と、線分Ｒ７−Ｒ８の長さｃ２と、線分Ｒ８−Ｒ９の長さｃ３との比（ｃ１：ｃ２：ｃ３）が、“ａ１：ａ２：ａ３”と等しくなるような点Ｒ７および点Ｒ８を算出することができる。
【０１６２】
以上のように決定される点Ｒ３、点Ｒ４、点Ｒ７および点Ｒ８によって、仮想カメラの左右方向に関する視野範囲を決めることができる。すなわち、ＣＰＵ３１１は、ニアクリップ面における点Ｒ３から点Ｒ４の範囲、および、ファークリップ面における点Ｒ７から点Ｒ８の範囲を左右方向に関する視野範囲とするように左仮想カメラの射影行列を算出する。換言すれば、仮想カメラの左右方向に関する視野範囲は、点Ｒ１、点Ｒ４、および点Ｒ８を通る直線Ｌ５と、点Ｒ１、点Ｒ３、および点Ｒ７を通る直線Ｌ６とによって表される範囲となる。なお、上下方向に関する視野範囲は、左仮想カメラの視野範囲のアスペクト比が表示領域６３のアスペクト比と一致するように決定される。
【０１６３】
ステップＳ２７における具体的な処理としては、ＣＰＵ３１１は、まず、ずれ量データ８３と表示サイズデータ８４をメインメモリ３２から読み出して、表示領域のずれ量ｄｘと枠の大きさとを用いて、左撮像画像内における表示領域の右端と左端の位置を算出する。そして、右端と左端の位置から上記長さａ１、ａ２、およびａ３を算出する。次に、ＣＰＵ３１１は、仮想カメラデータ７９をメインメモリ３２から読み出して、左仮想カメラの位置および姿勢と、既知の左目用カメラ２３ａの画角とを用いて、ニアクリップ面における点Ｒ２および点Ｒ５の位置を算出する。さらに、線分Ｒ２−Ｒ５を、“ａ１：ａ２：ａ３”に分ける点Ｒ３および点Ｒ４を算出し、点Ｒ３および点Ｒ４を左右方向の視野範囲とする射影行列を算出する。以上によって、表示領域６３に対応する左仮想カメラの射影行列を算出することができる。最後に、ＣＰＵ３１１は、算出された射影行列を示すデータを視野範囲データ８５としてメインメモリ３２に記憶する。以上のステップＳ２７の次にステップＳ２８の処理が実行される。
【０１６４】
なお、上記ステップＳ２７の処理においては、仮想カメラの視野範囲を算出するために、ＣＰＵ３１１は当該視野範囲の左右端の位置（点Ｒ３および点Ｒ４）を、点Ｒ２〜点Ｒ５の位置関係（比）に基づいて算出した。ここで、仮想カメラの視野範囲の具体的な算出方法は上記に限らず、点Ｒ３および点Ｒ４の位置を算出できればどのような方法であってもよい。例えば、他の実施形態においては、ＣＰＵ３１１は視野範囲の基準位置からのずれ量を算出するようにしてもよい。具体的にはまず、ＣＰＵ３１１はニアクリップ面における基準の視野範囲を設定する。基準の視野範囲は、左仮想カメラの位置からその撮影方向に向かって、正面向きの（撮影方向に均等に画角が設定された）視野範囲であり、上述の基準枠６１に対応する仮想カメラの視野範囲である。また、ニアクリップ面における上述の全範囲視野に対する基準の視野範囲の大きさの比は、撮像画像５５の領域全体に対する表示領域６３の比と等しいので、この関係から基準の視野範囲の大きさを算出することができる。
【０１６５】
ここで、基準の視野範囲から算出すべき視野範囲までのずれ量をΔｘとした場合、ずれ量Δｘは、表示領域のずれ量ｄｘに比例する。また、ニアクリップ面における全範囲視野の幅（点Ｒ２−点Ｒ５の長さ）に対する視野範囲のずれ量Δｘの比は、撮像画像５５の幅（点Ｒ１１−点Ｒ１４の長さ）に対する表示領域のずれ量ｄｘの比に等しくなる。したがって、ＣＰＵ３１１は、上記比の関係から視野範囲のずれ量Δｘを算出する。そして、基準の視野範囲の左辺および右辺を、算出されたずれ量Δｘだけ移動させることで、算出すべき視野範囲が得られる。なお、基準の視野範囲の上辺および下辺の位置はそのままである。これによって、視体積のニアクリップ面における４辺が求まり、周知の方法により視体積のファークリップ面の４辺も求めることができる。以上より、ＣＰＵ３１１は、上記視野範囲のずれ量Δｘを算出することによって、視野範囲（点Ｒ３および点Ｒ４）を特定するようにしてもよい。
【０１６６】
ステップＳ２８において、ＣＰＵ３１１は、上記ステップＳ１４およびＳ２７で設定された左仮想カメラの位置、姿勢、および視野範囲に基づいて、左仮想カメラから見た仮想オブジェクトの画像を生成する。すなわち、ＣＰＵ３１１は、仮想カメラデータ７９および視野範囲データ８５をメインメモリ３２から読み出し、左仮想カメラのビュー行列と射影行列を用いて仮想オブジェクトの画像データを生成する。なお、仮想空間には背景となるオブジェクトが配置されず、仮想画像は背景が透明である。さらに、ＣＰＵ３１１は、生成された仮想オブジェクトの画像をＶＲＡＭ３１３内の上記左フレームバッファに描画する。これによって、ステップＳ２５で左フレームバッファに描画された左撮像画像に左仮想画像が合成される。なお、仮想画像は背景が透明であるので、合成画像は、左撮像画像に仮想オブジェクトの画像が重ねられたものとなる。また、上記ステップＳ３で述べたように、仮想オブジェクトは、仮想マーカー位置を基準として配置されるので、合成画像においては、マーカー５３の位置やその周辺に仮想オブジェクトが表示されることとなる。ステップＳ２８の後、ＣＰＵ３１１は左画像生成処理を終了する。
【０１６７】
図１６の説明に戻り、ステップＳ５の左画像生成処理の次に、ステップＳ６の処理が実行される。ステップＳ６においては、ＣＰＵ３１１は右画像生成処理を実行する。右画像生成処理は、立体視表示に用いられる右目用画像（右合成画像）を生成する処理である。
【０１６８】
右画像生成処理においても基本的には左画像生成処理と同様に合成画像が生成される。ただし、本実施形態においては、左撮像画像と右撮像画像とで枠のずれ量は同じであり、枠の大きさも同じに設定される。したがって、上記ステップＳ２１〜Ｓ２４の一連の処理は、右画像生成処理においては実行されなくてもよい。すなわち、右画像生成処理においては、上記ステップＳ２１で算出されたずれ量ｄｘに代えてずれ量を“−ｄｘ”（ずれる方向がｄｘとは逆になる）とし、枠の大きさはステップＳ２３またはＳ２４で設定される大きさを用いて、表示領域を決定するようにしてもよい。このとき、右撮像画像の表示領域は、右撮像画像の中心からずれ量ｄｘだけ左側の位置で、左撮像画像の表示領域と同じ大きさとなる。なお、右撮像画像についても左撮像画像と同様、実視差ゼロ距離Ｆの位置にある点が表示領域の中心に位置することになる。
【０１６９】
表示領域が決定されると、右画像生成処理においても左画像生成処理と同様、ＣＰＵ３１１は、表示領域内の右撮像画像を、ＶＲＡＭ３１３内の所定の記憶領域である右フレームバッファに描画する。
【０１７０】
さらに、右画像生成処理においても左画像生成処理のステップＳ２６〜Ｓ２８と同様の処理が実行される。すなわち、ＣＰＵ３１１は、表示領域に対応する右仮想カメラの視野範囲を算出する処理を実行する。なお、右撮像画像についても図２２に示す方法と同様の方法で右仮想カメラの視野範囲を算出することができる。さらに、ＣＰＵ３１１は、設定された右仮想カメラの位置、姿勢、および視野範囲に基づいて、右仮想カメラから見た仮想オブジェクトの画像を生成し、仮想オブジェクトの画像をＶＲＡＭ３１３内の上記右フレームバッファに描画する。これによって、右フレームバッファに描画された左撮像画像に左仮想画像が合成される。以上のステップＳ６の次にステップＳ７の処理が実行される。
【０１７１】
ステップＳ７において、ＣＰＵ３１１は、左右の合成画像を上側ＬＣＤ２２に表示させる。すなわち、ＶＲＡＭ３１３内の左フレームバッファに描画された左合成画像と、右フレームバッファに描画された右合成画像とが上側ＬＣＤ２２の縦１ライン毎に交互に配置されて表示される。これによって、左右の合成画像を用いた立体視表示が行われる。ステップＳ７の次にステップＳ８の処理が実行される。
【０１７２】
ステップＳ８において、ＣＰＵ３１１は、上側ＬＣＤ２２からの割り込み信号（垂直同期割り込み）を待機し、当該割り込み信号が発生した場合には、ステップＳ１の処理が再度実行される。これにより、ステップＳ１〜Ｓ８の処理が一定の周期（１フレーム時間（１／６０秒）の周期）で繰り返される。なお、ステップＳ１〜Ｓ８の一連のゲーム処理は、例えば、ゲームがクリアされた場合や、ゲームオーバーとなった場合や、プレイヤがゲームを中止する指示を行った場合等に終了される。
【０１７３】
以上のように、上記ゲーム処理によれば、外側カメラ２３からマーカー５３までの距離Ｄに対応する仮想マーカー距離ｄが算出され（ステップＳ１３）、仮想マーカー距離ｄに応じて視差ゼロ距離Ｆが決定される（ステップＳ１６，Ｓ１７）。そして、立体視表示における視差ゼロ点の位置がこの視差ゼロ距離Ｆとなるように視差が調整される（ステップＳ２１）。したがって、上記ゲーム処理によれば、マーカー５３までの距離Ｄに応じた視差ゼロ距離となるように自動的に視差が調整される。これによれば、ゲーム装置１０は、例えばマーカー５３の位置に視差ゼロ点が自動的に設定されるようにしたり、マーカー５３の周囲に表示される仮想オブジェクト５４の位置に視差ゼロ点が自動的に設定されるようにすることができる。そのため、本実施形態によれば、拡張現実感技術を用いて生成される合成画像について立体視表示を行う場合において、仮想オブジェクトの画像を見やすく表示することができる。
【０１７４】
［変形例］
（仮想画像を合成しない変形例）
上記実施形態では、ゲーム装置１０は、撮像画像に対して仮想画像を合成した合成画像を上側ＬＣＤ２２に表示した。ここで、他の実施形態においては、撮像画像のみが上側ＬＣＤ２２に表示されてもよい。つまり、本発明は、拡張現実感技術を用いずに撮像画像のみについて立体視表示を行う場合にも適用することができる。
【０１７５】
（手動でズームを行う変形例）
上記実施形態では、ゲーム装置１０は、外側カメラ２３からマーカー５３までの距離に応じて自動的に表示領域が変更される（視差が調整される）場合を例として説明した。ここで、表示領域の変更は、自動的に行われる他、ユーザによる手動で（すなわち、ユーザの指示に従って）行われてもよい。例えば、ゲーム装置１０は、表示領域を左右に移動する指示（焦点距離の遠近を調整する指示）をユーザから受け付けて、その指示に従って撮像画像上において枠（表示領域）を移動させる。その結果、枠が撮像画像からはみ出した場合、ゲーム装置１０は枠を縮小するようにしてもよい。
【０１７６】
また、表示領域が自動的に変更される場合であっても、本発明は上記実施形態に限定されない。つまり、本発明は、外側カメラ２３からマーカー５３までの距離に応じて表示領域が変更される場合に限らず、任意の条件に応じて表示領域が自動的に変更される場合に適用可能である。
【０１７７】
（視差ゼロ距離を算出しない変形例）
上記実施形態においては、ゲーム装置１０は、外側カメラ２３からマーカー５３までの距離Ｄに応じた視差ゼロ距離Ｆを実際に算出し（ステップＳ１７）、立体視表示における視差ゼロ点の位置が視差ゼロ距離Ｆとなるように、視差を調整（表示領域を決定）した。ここで、他の実施形態においては、視差ゼロ距離Ｆを算出しない方法で、上記距離Ｄに応じた視差ゼロ距離となるように自動的に視差が調整されるようにしてもよい。具体的には、ゲーム装置１０は、各撮像画像に含まれるマーカー５３を認識した場合、左右の撮像画像に含まれるマーカー５３の画像についてマッチングを行い、左右の撮像画像でマーカー５３の位置が一致するように、表示領域を決定してもよい。あるいは、左右の撮像画像でマーカー５３の位置が一致する位置から所定量だけ表示領域をずらすことで、マーカー５３までの距離から視差ゼロ距離をずらすようにしてもよい。以上の方法によって、マーカー５３の視差がゼロになるように調整することができるので、上記実施形態と同様、立体視表示における視差ゼロ距離を上記距離Ｄに応じた距離とすることができる。ただし、上記の方法では、上記距離Ｄおよび視差ゼロ距離Ｆを実際には算出しないので、例えば「マーカー５３までの距離Ｄから所定距離だけ手前の位置を視差ゼロ点にする」というように、視差ゼロ距離を精度良く設定することは難しい。例えば、マーカー５３から所定距離だけ離れた位置に表示される仮想オブジェクトに視差ゼロ点が設定されるように視差を調整することは、上記の方法では難しい。これに対して、上記実施形態では、距離Ｄに対応する距離（仮想マーカー距離ｄ）を実際に算出して視差ゼロ距離Ｆを実際に算出するので、視差ゼロ距離を精度良く調整することが可能である。したがって、例えば仮想オブジェクトの位置に視差ゼロ点を設定する場合には、上記実施形態のように視差ゼロ距離を算出する方法が有効である。
【０１７８】
なお、上記のように視差ゼロ距離Ｆを算出しない方法であっても、ゲーム装置１０は、上述のズーム処理を実行することが可能である。すなわち、上記の方法によって左右の撮像画像でマーカー５３の位置が一致する位置から所定量だけ表示領域（枠）がずらされた場合、ゲーム装置１０は、枠が撮像画像からはみ出したか否かを判定する。そして、枠が撮像画像からはみ出した場合には、ゲーム装置１０は枠を縮小するようにすればよい。
【０１７９】
（表示領域の決定処理と合成画像の生成処理の順序に関する変形例）
上記実施形態では、ゲーム装置１０は、撮像画像の表示領域を決定した（ステップＳ２１〜Ｓ２４）後、表示領域内の撮像画像に対応する仮想画像を生成して撮像画像と仮想画像とを合成した（ステップＳ２８）。ここで、他の実施形態では、表示領域の決定処理と合成画像の生成処理との順序が上記実施形態とは逆になる手順で、上側ＬＣＤ２２に表示すべき画像が生成されてもよい。具体的には、ゲーム装置１０は、まず、撮像画像の全領域に対応する仮想画像を各撮像画像について生成し、生成した仮想画像と撮像画像の全領域とを合成して、撮像画像の全領域に対応する合成画像を生成する。次に、ゲーム装置１０は、上記ステップＳ２１〜Ｓ２４と同様の方法で合成画像について表示領域を決定する。これによっても、上記実施形態と同様、立体視表示における視差ゼロ距離を、外側カメラ２３からマーカー５３までの距離Ｄに応じた距離とすることができる。なお、上記の手順によれば、仮想画像を生成するための仮想カメラの視野範囲を、外側カメラ２３の視野範囲に対応する範囲とすればよいので、仮想カメラの視野範囲を容易に算出することができる。ただし、仮想画像および合成画像を生成する領域が広くなり、実際には表示されない部分にまで合成画像を生成する必要がある。
【０１８０】
なお、上記の手順を採用する場合においても、ゲーム装置１０は、視差ゼロ距離を算出しない方法を用いることができる。すなわち、ゲーム装置１０は、撮像画像の全領域に対応する合成画像を生成した後、左右の合成画像についてマッチングを行い、合成画像に含まれる仮想オブジェクトの位置が左右の合成画像で一致するように、表示領域を決定してもよい。
【０１８１】
また、上記実施形態においては、ゲーム装置１０は、視差ゼロ距離が短くなった場合により見やすい立体視表示を行うべく、表示領域を縮小する処理（ステップＳ２３）を実行した。ここで、他の実施形態においては、表示領域を縮小する処理は必ずしも実行されなくてもよい。
【０１８２】
（ズーム処理に関する変形例）
なお、他の実施形態においては、ゲーム装置１０は、外側カメラ２３で撮像された撮像画像に対して、キャリブレーションによる補正処理を行うようにしてもよい。ここで、外側カメラ２３の各カメラ２３ａおよび２３ｂには取り付け誤差が生じる場合があり、この場合、取り付け誤差によって撮像画像は理想的な画像（理想的な位置および姿勢で取り付けられた各カメラ２３ａおよび２３ｂによって撮像される画像）からずれてしまう。そのため、ゲーム装置１０（またはゲームプログラム）の作成者は、理想的な画像に対する撮像画像のずれを予め測定しておき、撮像画像のずれを相殺する補正をゲーム装置１０に行わせるようにしてもよい。
【０１８３】
ここで、上記の補正処理が行われる場合には、表示領域を縮小する処理（ステップＳ２３）を実行するか否かの判定処理は、次のように行われることが好ましい。図２３は、補正処理が行われた撮像画像と表示領域との関係を示す図である。図２３においては、補正処理によって左撮像画像５５は所定角度だけ回転され、かつ、所定長さ（撮像画像の中心点Ｃから表示領域の中心点Ｃ’までの長さ）だけ平行移動されているものとする。また、基準枠６１の右側の２つの頂点から左撮像画像５５の右辺までの距離をＡ２，Ａ３とする。上記補正処理が行われる場合には、上記所定値Ａ、距離Ａ２、および距離Ａ３のうちの最も短いもの（図２３ではＡ３）よりもずれ量ｄｘが大きくなると、枠（表示領域）が左撮像画像５５からはみ出す。そのため、上記の場合、ステップＳ２２の判定処理では、ＣＰＵ３１１は、上述の所定値Ａ、距離Ａ２、および距離Ａ３の中で最も短くなる値を用いて判定を行うことが好ましい。これによれば、ゲーム装置１０は、枠が撮像画像からはみ出したか否かの判定をより正確に行うことができる。
【０１８４】
（その他の変形例）
また、上記実施形態では、ゲーム装置１０は、外側カメラ２３によってリアルタイムに取得される撮像画像を用いて上側ＬＣＤ２２に立体画像を表示した。ここで、他の実施形態においては、ゲーム装置１０は、外側カメラ２３や外部のステレオカメラ等によって過去に撮像された画像データを用いて上側ＬＣＤ２２に立体画像を表示するようにしてもよい。また、上記実施形態では、外側カメラ２３がゲーム装置１０に予め搭載されているが、他の実施形態では、ゲーム装置１０に着脱可能な外付け型のカメラが外側カメラ２３に代えて利用されてもよい。
【０１８５】
また、上記実施形態では、上側ＬＣＤ２２がゲーム装置１０に予め搭載されているが、他の実施形態では、ゲーム装置１０に着脱可能な外付け型の立体視ディスプレイが上側ＬＣＤ２２に代えて利用されてもよい。
【０１８６】
また、上記実施形態では、上側ＬＣＤ２２がパララックスバリア方式の立体表示装置であるが、他の実施形態では、上側ＬＣＤ２２がレンチキュラー方式等の他の任意の方式の立体表示装置であってもよい。例えば、レンチキュラー方式の立体表示装置を利用する場合には、左目用画像と右目用画像をＣＰＵ３１１または他のプロセッサで合成してから、合成された画像をレンチキュラー方式の立体表示装置に供給するようにしてもよい。
【０１８７】
また、上記実施形態では、ゲーム装置１０を用いたゲーム処理中において立体画像表示処理を実行しているが、他の実施形態では、任意の情報処理装置または情報処理システム（例えば、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、携帯電話、パーソナルコンピュータ、カメラ等）によって立体画像表示処理を実行してもよい。
【０１８８】
また、上記実施形態では、一台の情報処理装置（ゲーム装置１０）のみによってゲーム処理（立体画像表示処理）を実行しているが、他の実施形態では、互いに通信可能な複数の情報処理装置を有する立体画像表示システムにおいて、当該複数の情報処理装置が立体画像表示処理を分担して実行するようにしてもよい。
【産業上の利用可能性】
【０１８９】
以上のように、本発明は、拡張現実感技術を用いて生成される画像を立体的に表示する場合において、仮想画像を見やすく表示すること等を目的として、例えばゲームプログラムやゲーム装置として利用することが可能である。
【符号の説明】
【０１９０】
１０  ゲーム装置
１１  下側ハウジング
１２  下側ＬＣＤ
１３  タッチパネル
１４  操作ボタン
１５  アナログスティック
１６  ＬＥＤ
２１  上側ハウジング
２２  上側ＬＣＤ
２３  外側カメラ
２３ａ  左目用カメラ
２３ｂ  右目用カメラ
２４  内側カメラ
２５  ３Ｄ調整スイッチ
２６  ３Ｄインジケータ
２８  タッチペン
３１  情報処理部
３１１  ＣＰＵ
３１２  ＧＰＵ
３２  メインメモリ
５３  マーカ
５４  仮想オブジェクト
５５  左撮像画像
５６  右撮像画像
５７，５８  表示領域
５９  左合成画像
６０  右合成画像
６１  基準枠
６２，６３  枠
７１  ゲームプログラム
７２  撮像画像データ
【図１】
0005546960.tif 000002
【図２】
0005546960.tif 000003
【図３】
0005546960.tif 000004
【図４】
0005546960.tif 000005
【図５Ａ】
0005546960.tif 000006
【図５Ｂ】
0005546960.tif 000007
【図５Ｃ】
0005546960.tif 000008
【図６】
0005546960.tif 000009
【図７】
0005546960.tif 000010
【図８】
0005546960.tif 000011
【図９】
0005546960.tif 000012
【図１０】
0005546960.tif 000013
【図１１】
0005546960.tif 000014
【図１２】
0005546960.tif 000015
【図１３】
0005546960.tif 000016
【図１４】
0005546960.tif 000017
【図１５】
0005546960.tif 000018
【図１６】
0005546960.tif 000019
【図１７】
0005546960.tif 000020
【図１８】
0005546960.tif 000021
【図１９】
0005546960.tif 000022
【図２０】
0005546960.tif 000023
【図２１】
0005546960.tif 000024
【図２２】
0005546960.tif 000025
【図２３】
0005546960.tif 000026
【図２４】
0005546960.tif 000027