説明

立体画像表示プログラム、立体画像表示装置、立体画像表示システム、および、立体画像表示方法

【課題】拡張現実感技術を用いて生成される画像を立体的に表示する場合において、仮想画像を見やすく表示する。
【解決手段】ゲーム装置10は、2つの画像を用いた立体視表示が可能な上側LCD22に画像を表示させる。ゲーム装置10は、所定の撮像対象を2つの撮像装置によってそれぞれ撮像した2つの撮像画像に基づいて、所定の撮像対象と、各撮像装置とのそれぞれの位置関係を算出する。次に、ゲーム装置10は、撮像装置から撮像対象までの距離に応じた距離となるように、位置関係の少なくとも一方を用いて視差ゼロ距離を決定し、上側LCD22に表示すべき2つの撮像画像の表示位置を視差ゼロ距離に応じて決定する。さらに、ゲーム装置10は、各位置関係を用いて設定された2つの仮想カメラに基づいて2つの仮想画像を生成し、撮像画像に対して仮想画像を合成した合成画像を生成して上側LCD22に表示させる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、拡張現実感技術を用いて生成される画像を立体的に表示する立体画像表示プログラム、立体画像表示装置、立体画像表示システム、および、立体画像表示方法に関する。
【背景技術】
【0002】
従来、現実空間の画像(カメラによる撮像画像)に仮想空間の画像(仮想画像)を合成して表示する拡張現実感技術がある。また、複数のカメラによって撮影された複数の画像を用いて、画像を立体的に表示する技術がある。
【0003】
例えば、特許文献1には、拡張現実感技術を用いて生成される画像を立体的に表示する装置が記載されている。すなわち、この装置は、現実空間に配置されるマーカー周辺をカメラで撮像し、撮像された画像を用いてカメラとマーカーとの位置関係を算出する。そして、この位置関係を用いて仮想空間内の物体の画像(仮想画像)を生成して、その画像を撮像画像に合成する。これによって、現実空間の撮像画像に仮想の物体が合成された画像を表示することができる。また、上記の装置では、左右2つのカメラによって撮影された2つの画像をヘッドマウントディスプレイの左右の画面にそれぞれ表示することによって、ユーザに対して画像を立体的に見せることを可能としている。したがって、特許文献1に記載の装置によれば、撮像画像と仮想画像とを合成した画像を立体的に表示することができる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2008−146109号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記特許文献1では、拡張現実感技術を用いて生成される画像を立体的に表示する場合の立体視の視認性について考慮されていなかった。
【0006】
それ故、本発明の目的は、拡張現実感技術を用いて生成される画像を立体的に表示する場合において、立体視画像を見やすく表示することができる立体画像表示プログラム、立体画像表示装置、立体画像表示システム、および、立体画像表示方法を提供することである。
【課題を解決するための手段】
【0007】
本発明は、上記の課題を解決するために、以下の(1)〜(15)の構成を採用した。
【0008】
(1)
本発明は、2つの画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる情報処理装置のコンピュータにおいて実行される立体画像表示プログラムである。立体画像表示プログラムは、画像取得手段と、位置関係算出手段と、距離決定手段と、表示位置決定手段と、画像生成手段と、表示制御手段としてコンピュータを機能させる。画像取得手段は、所定の撮像対象を2つの撮像装置によってそれぞれ撮像した2つの撮像画像を取得する。位置関係算出手段は、2つの撮像画像に基づいて、所定の撮像対象と、各撮像装置とのそれぞれの位置関係を算出する。距離決定手段は、立体視表示において立体視表示装置の画面の位置に存在するように見える、仮想空間における点の仮想カメラから撮像方向への距離、または、現実空間における点の撮像装置から撮像方向への距離である視差ゼロ距離を、撮像装置から撮像対象までの距離に応じた距離となるように、位置関係の少なくとも一方を用いて決定する。表示位置決定手段は、視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面の位置に存在するように見えるように、立体視表示装置に表示すべき2つの撮像画像の表示位置を決定する。画像生成手段は、仮想空間内のオブジェクトを表す仮想画像を生成するための仮想カメラを、仮想画像が表す仮想空間の範囲と撮像画像が表す現実空間の範囲とが一致するように各位置関係を用いて2つ設定し、設定された2つ仮想カメラに基づいて2つの仮想画像を生成する。表示制御手段は、撮像画像に対して仮想画像を合成した合成画像を生成する処理を各撮像画像について実行し、当該合成画像を立体視表示装置に表示させる。
【0009】
上記「立体視表示装置」とは、ユーザの左目と右目にそれぞれ別々の画像を視認させることによって立体視表示を行うものであればよい。「立体視表示装置」は、例えば、パララックスバリア方式やレンチキュラー方式等を用いた表示装置でもよいし、左目用のディスプレイと右目用のディスプレイとを有するヘッドマウントディスプレイのような表示装置でもよい。また、「立体視表示装置」は、ユーザが専用の眼鏡を使用することによって左目と右目にそれぞれ別々の画像を視認させる表示装置であってもよい。
上記「情報処理装置」とは、後述する実施形態に記載のゲーム装置の他、コンピュータプログラムを実行することによって情報処理を行う任意のコンピュータを含む概念である。また、上記「情報処理装置」は、携帯型か否かを問わず、立体視表示装置と一体的に構成されてもよいし、別体として構成されてもよい。
上記「立体画像表示プログラム」とは、一例としては、後述する実施形態に記載のゲームプログラムであるが、パーソナルコンピュータや携帯端末において実行されるアプリケーションプログラムを含む概念である。
上記「所定の撮像対象」とは、後述する実施形態におけるマーカー53の他、認識処理によって認識することが可能な物であれば、どのような物であってもよい。例えば、ユーザ(プレイヤ)の顔等を所定の撮像対象として認識するようにしてもよい。
上記「位置関係」とは、撮像装置と所定の撮像対象との位置関係を反映する情報であればよく、所定の撮像対象を基準とした撮像装置の位置および姿勢であってもよいし、撮像装置を基準とした所定の撮像対象の位置および姿勢であってもよい。また、上記「位置関係」は、後述する実施形態のステップS2で算出される仮想カメラの位置および姿勢(ビュー行列)であってもよい。
上記「表示位置」とは、画面に対する(表示される)画像の位置である。例えば後述する実施形態では、画像平面において表示領域を決定することによって表示位置が決定されるが、「表示位置」は、画面と画像との位置関係を特定する情報であればどのような形式で表現されるものであってもよい。
上記「画像生成手段」は、「仮想画像が表す仮想空間の範囲と撮像画像が表す現実空間の範囲とが一致するように」仮想カメラを設定して仮想画像を生成すればよい。例えば、後述する実施形態のように、撮像画像内の表示領域に対応する仮想画像を生成してもよいし、後述する(表示領域の決定処理と合成画像の生成処理の順序に関する変形例)に記載のように、撮像画像全体に対応する仮想画像を生成してもよい。
【0010】
上記(1)の構成によれば、位置関係算出手段によって算出された位置関係を用いて2つの仮想画像が生成され、仮想画像が立体視表示装置によって立体的に表示される。ここで、上記(1)の構成によれば、立体視表示装置に表示される2つの画像の表示位置は、立体視表示における視差ゼロ距離が撮像装置から撮像対象までの距離に応じた距離となるように調整される。すなわち、画面上で視差ゼロ(表示ずれゼロ)となる対象物が存在する位置は、撮像装置から撮像対象までの距離に合わせて自動的に調整される。より具体的には、例えば、視差ゼロ距離は『撮像装置から撮像対象までの距離』または『撮像装置から「撮像対象から所定距離だけ撮像方向に近づいたまたは遠ざかった点」までの距離』とされる。これによれば、例えば撮像対象の位置あるいは撮像対象の付近の位置に存在する対象物が画面上で視差ゼロ(表示ずれ量ゼロ)で表示されるので、撮像対象の付近に表示される仮想オブジェクトが見やすく立体視表示される。また、視差ゼロ距離を『撮像装置から撮像対象までの距離』または『撮像装置から「撮像対象から所定距離だけ撮像方向に近づいたまたは遠ざかった点」までの距離』としない場合であっても、例えば、『撮像装置から撮像対象までの距離』が大きいときには、視差ゼロ距離を大きくし、『撮像装置から撮像対象までの距離』が小さいときには、視差ゼロ距離を小さくするようにすれば、撮像装置から撮像対象までの距離が変化しても、撮像対象またはその付近の対象物の立体視の見やすさの変化を防止することができる。つまり、撮像装置から撮像対象までの距離が変化しても仮想オブジェクトや現実世界画像が見やすい立体視表示を行うことができる。したがって、上記(1)の構成によれば、拡張現実感技術を用いて生成される仮想オブジェクトの画像を立体的に表示する場合において、仮想オブジェクトや現実世界の画像を見やすく表示することができる。
【0011】
(2)
距離決定手段は、撮像装置から所定の撮像対象までの距離、または、当該距離から所定距離だけ離れた点までの距離を、視差ゼロ距離として決定してもよい。
【0012】
上記(2)の構成によれば、所定の撮像対象、または、それから所定距離離れた位置にある物が、立体視表示において奥行き方向に関して表示面の位置に見えるように自動的に調整することができる。これによって、仮想オブジェクトや現実世界の画像を見やすく表示することができる。
【0013】
(3)
距離決定手段は、撮像装置から所定の撮像対象までの距離が増加した場合に視差ゼロ距離を増加させ、撮像装置から所定の撮像対象までの距離が減少した場合に視差ゼロ距離を減少させてもよい。
【0014】
上記(3)の構成によれば、撮像装置から所定の撮像対象までの距離の増減に応じて、視差ゼロ距離を自動的に変更することができ、仮想オブジェクトや現実世界の画像を見やすく表示することができる。
【0015】
(4)
表示位置決定手段は、2つの撮像画像のうちで表示すべき表示領域をそれぞれ決定することによって、2つの撮像画像の表示位置を決定してもよい。このとき、画像生成手段は、仮想画像が表す仮想空間の範囲と表示領域内の撮像画像が表す現実空間の範囲とが一致するように2つの仮想カメラを設定する。表示制御手段は、表示領域内の撮像画像に対して仮想画像を合成する。
【0016】
上記(4)の構成によれば、表示位置決定手段は撮像画像に表示領域を設定し、設定された表示領域内の撮像画像が表示される。したがって、適切な視点ゼロ距離となる表示位置を、表示領域を用いて容易に設定することができる。
【0017】
(5)
画像生成手段は、カメラ位置算出手段と、カメラ視野算出手段と、仮想画像生成手段とを有していてもよい。カメラ位置算出手段は、仮想空間内のオブジェクトが配置される仮想空間における2つの仮想カメラの位置および姿勢(ビュー行列)を各位置関係に基づいてそれぞれ算出する。カメラ視野算出手段は、表示領域内の現実空間に対応する仮想空間を範囲とするように各仮想カメラの視野範囲(視体積、射影行列)をそれぞれ算出する。仮想画像生成手段は、各仮想カメラの位置、姿勢、および視野に基づいて、各撮像画像に合成すべき仮想画像をそれぞれ生成する。
【0018】
上記(5)の構成によれば、撮像画像の表示領域に対応する仮想空間を視野範囲とするように仮想カメラが設定される。これによれば、撮像画像の範囲と仮想画像の範囲とを対応させることができ、撮像画像上の適切な位置に仮想オブジェクトの画像を表示させることができる。
【0019】
(6)
カメラ視野算出手段は、撮像画像の領域に対する表示領域の位置関係と、撮像装置の視野範囲に対応する仮想カメラの視野範囲に対する、算出すべき視野範囲の位置関係とが対応するように、仮想カメラの視野範囲を算出してもよい。
【0020】
上記「撮像画像の領域に対する表示領域の位置関係」とは、図22の例では、左撮像画像55に対する表示領域63の位置関係である。また、「撮像装置の視野範囲に対応する仮想カメラの視野範囲」とは、図22の例では、直線L3およびL4によって表される視野範囲である。つまり、「撮像装置の視野範囲に対応する仮想カメラの視野範囲に対する、算出すべき視野範囲の位置関係」とは、図22の例では、直線L3およびL4によって表される視野範囲に対する、直線L5およびL6によって表される視野範囲の位置関係である。
【0021】
上記(6)の構成によれば、撮像画像の領域と表示領域との位置関係を用いて、仮想カメラの視野範囲を算出するので、表示領域に対応する視野範囲を容易に算出することができる。
【0022】
(7)
表示位置決定手段は、ずれ量算出手段と、領域サイズ変更手段とを有していてもよい。ずれ量算出手段は、各撮像画像の表示領域について、立体視表示における視差ゼロ距離が撮像装置から撮像対象までの距離に応じた距離となるように、基準位置からのずれ量を算出する。領域サイズ変更手段は、少なくとも一方の表示領域について、ずれ量だけ移動させた表示領域が撮像画像の外へはみ出す場合、撮像画像の外へ表示領域がはみ出さないように各表示領域の大きさを変更する。このとき、画像生成手段は、2つの撮像画像における各表示領域内の画像に対して仮想画像を合成する。
【0023】
上記(7)の構成によれば、表示領域が撮像画像の外へはみ出さないように表示領域の大きさが変更されるので、表示領域の全領域に撮像画像が必ず含まれることになる。ここで、表示領域の一部に撮像画像が含まれない場合には、当該一部については立体視表示が行われないので、見にくい表示となってしまったり、ユーザに違和感を与えてしまったりする。これに対して、上記(7)の構成によれば、表示領域の全領域に撮像画像が必ず含まれることになるので、見にくい表示となることを防止することができ、より見やすく立体視表示を行うことができる。
【0024】
(8)
表示位置決定手段は、視差ゼロ距離の位置にあり、かつ、2つの撮像装置から等距離にある点が各表示領域内の左右方向に関して中心となるように、2つの撮像画像の表示領域を決定してもよい。
【0025】
上記(8)の構成によれば、2つの撮像装置の正面方向にあり、かつ、視差ゼロ距離の位置にある点が表示領域の中心に表示され、この点に視差ゼロ点が設定された立体視表示が行われる。したがって、表示領域の中心が正面方向に対応し、視差ゼロ点が設定された物体が表示領域の中心に表示されるので、見やすい立体視表示を行うことができる。
【0026】
(9)
画像取得手段は、2つの撮像装置から撮像画像を逐次取得してもよい。このとき、位置関係算出手段は、逐次取得される撮像画像のうちの所定の撮像画像について、位置関係を逐次算出する。距離決定手段は、位置関係が算出される度に視差ゼロ距離を逐次決定する。表示位置決定手段は、視差ゼロ距離が決定される度に表示位置を逐次決定する。画像生成手段は、所定の撮像画像に対して仮想画像を合成する処理を逐次実行する。表示制御手段は、画像生成手段によって生成された合成画像を立体視表示装置に逐次表示させる。
【0027】
上記「所定の撮像画像」とは、どのようなものであってよく、例えば、認識処理が成功した撮像画像であってもよいし、撮像装置から逐次取得される全ての撮像画像であってもよい。
【0028】
上記(9)の構成によれば、所定の撮像画像について、表示位置が逐次決定され、仮想画像が逐次合成されて合成画像が逐次表示される。これによれば、取得された撮像画像に対してリアルタイムで視差(視差ゼロ距離)が調整されて立体視表示が行われる。したがって、リアルタイムで撮像された撮像画像について、リアルタイムで視差(視差ゼロ距離)を調整して立体視表示を行うことができる。
【0029】
(10)
距離決定手段は、位置関係算出手段によって算出される各位置関係のうち少なくとも一方に基づいて撮像装置から撮像対象までの距離に対応する長さを算出してもよい。このとき、表示位置決定手段は、距離決定手段によって算出された長さによって決められる視差ゼロ距離に基づいて2つの画像の表示位置を決定する。
【0030】
上記「撮像装置から撮像対象までの距離に対応する長さ」とは、撮像装置から撮像対象までの距離を反映した値であればよい。この「長さ」は、例えば、現実空間における撮像装置から撮像対象までの長さであってもよいし、後述する実施形態のように、仮想空間における仮想カメラから撮像対象の位置までの長さ(仮想マーカー距離)であってもよい。
【0031】
上記(10)の構成によれば、撮像装置から撮像対象までの距離に対応する長さを実際に算出し、この長さに基づいて視差ゼロ距離が決められるので、視差ゼロ距離を正確に設定することができる。これによって、例えば、撮像装置から撮像対象までの距離を視差ゼロ距離としたり、撮像装置から撮像対象までの距離から所定距離だけ手前(または奥)を視差ゼロ距離としたりすることが容易になる。
【0032】
(11)
表示位置決定手段は、視差ゼロ距離の位置にある点が同じ位置に表示されるように2つの画像の表示位置を決定してもよい。
【0033】
上記(11)の構成によれば、視差ゼロ距離の位置にある点が(画面上において)同じ位置に表示されるので、この点に視差ゼロ点が設定された立体視表示が行われることとなり、視差ゼロ距離を正確に設定することができる。
【0034】
(12)
表示位置決定手段は、視差ゼロ距離の位置にあり、かつ、2つの撮像装置から等距離にある点が表示領域内の中心となるように、各撮像画像上において表示領域を決定してもよい。このとき、画像生成手段は、表示領域内の撮像画像に対して仮想画像を合成した合成画像を生成する処理を各撮像画像について実行する。
【0035】
上記(12)の構成によれば、2つの撮像装置の正面方向にあり、かつ、視差ゼロ距離の位置にある点が、表示領域の中心に表示され、この点に視差ゼロ点が設定された立体視表示が行われる。したがって、表示領域の中心が正面方向に対応し、視差ゼロ点が設定された物体が表示領域の中心に表示されるので、見やすい立体視表示を行うことができる。
【0036】
(13)
表示位置決定手段は、撮像画像の横幅の半分の長さに対する、撮像画像の中心からの表示領域のずれ量の割合が所定の割合となるようにずれ量を算出することによって、表示領域を決定してもよい。ここで、視差ゼロ距離の位置にあり、かつ、2つの撮像装置から等距離にある点を視差ゼロ点とし、撮像装置の視線方向と垂直に交わる所定の平面を設定した場合、所定の割合は、次のように表される。すなわち、所定の割合は、撮像装置の撮像範囲の境界線と所定の平面との交点から、撮像装置の位置を所定の平面に投影した投影点までの長さに対する、撮像装置の位置と視差ゼロ点とを結ぶ線分と所定の平面との交点から投影点まで長さの割合である。
【0037】
上記「ずれ量」とは、図21の例では、点P9から点P10の長さdxである。また、図21の例では、上記「視差ゼロ点」は点P4であり、上記「所定の平面」は平面Q1である。また、図21の例では、「撮像装置の撮像範囲の境界線と所定の平面との交点から、撮像装置の位置を所定の平面に投影した投影点までの長さ」とは、長さβであり、「撮像装置の位置と視差ゼロ点とを結ぶ線分と所定の平面との交点から投影点まで長さ」とは、長さγである。
【0038】
上記(13)の構成によれば、上記所定の割合を用いて表示領域のずれ量を容易に算出することができる。
【0039】
(14)
画像取得手段、位置関係算出手段、視差ゼロ距離決定手段、表示位置決定手段、画像生成手段、および表示制御手段は、上記に代えて、次のように構成されてもよい。すなわち、画像取得手段は、所定の撮像対象(マーカ)を2つの撮像装置によってそれぞれ撮像した撮像画像(72)を取得する。位置関係算出手段は、2つの撮像画像に基づいて、所定の撮像対象(マーカ)と、各撮像装置とのそれぞれの位置関係(76,ビュー行列)を算出する。視差ゼロ距離決定手段は、立体視表示において表示装置の画面上に存在するように見える、仮想世界における点の仮想カメラから撮像方向への距離、または、現実世界における点の撮像装置から撮像方向への距離である視差ゼロ距離を、撮像装置から撮像対象までの距離に応じた距離となるように、位置関係を用いて決定する。表示位置決定手段は、視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面上の奥行位置に存在するように見えるように、立体視表示装置に表示すべき2つの撮像画像の表示位置を決定する。画像生成手段は、各位置関係を用いて、視差ゼロ距離に応じた位置にある仮想オブジェクトが立体視表示において表示装置の画面上の奥行位置に存在するように見えるように設定された2つの仮想カメラで仮想空間をそれぞれ撮影することによって、2つの仮想画像を生成する。表示制御手段は、撮像画像に対して仮想画像を合成した合成画像を生成する処理を各撮像画像について実行し、当該合成画像を立体視表示装置に表示させる。
【0040】
(15)
画像取得手段、位置関係算出手段、視差ゼロ距離決定手段、表示位置決定手段、画像生成手段、および表示制御手段は、上記に代えて、次のように構成されてもよい。画像取得手段は、所定の撮像対象(マーカ)を2つの撮像装置によってそれぞれ撮像した撮像画像(72)を取得する。位置関係算出手段は、2つの撮像画像に基づいて、所定の撮像対象(マーカ)と、各撮像装置とのそれぞれの位置関係(76,ビュー行列)を算出する。視差ゼロ距離決定手段は、立体視表示において表示装置の画面上に存在するように見える、仮想世界における点の仮想カメラから撮像方向への距離、または、現実世界における点の撮像装置から撮像方向への距離である視差ゼロ距離を、撮像装置から撮像対象までの距離に応じた距離となるように、位置関係を用いて決定する。表示位置決定手段は、視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面上の奥行位置に存在するように見えるように、立体視表示装置に表示すべき2つの撮像画像の表示位置を決定する。表示制御手段は、各位置関係を用いて設定された2つの仮想カメラで撮影した仮想空間内の視差ゼロ距離に応じた位置にある仮想オブジェクトが、立体視表示において表示装置の画面上に存在するように見えるように、当該仮想空間を撮像画像に重畳させた合成画像を生成する処理を各撮像画像について実行し、当該合成画像を立体視表示装置に表示させる。
【0041】
上記(14)または(15)の構成によっても、上記(1)の構成と同様の効果を得ることができる。
【0042】
また、本発明は、上記各手段と同等の手段を備える立体画像表示装置の形態で実施されてもよい。この立体画像表示装置においては、立体画像表示プログラムを実行するコンピュータによって上記各手段が実現されてもよいし、専用回路によって上記各手段の一部または全部が実現されてもよい。また、本発明は、上記各手段を備える1以上の情報処理装置からなる立体画像表示システムの形態で実施されてもよい。このとき、1以上の情報処理装置は、有線または無線通信によって直接通信を行ってもよいし、ネットワークを介して通信を行ってもよい。さらに、本発明は、上記各手段によって行われる立体画像表示方法の形態で実施されてもよい。
【発明の効果】
【0043】
本発明によれば、立体視表示される画像の視差ゼロ点を、撮像装置から撮像対象までの距離に合わせて自動的に調整することによって、撮像装置から撮像対象までの距離が変化しても仮想オブジェクトに焦点があった立体視表示を行うことが可能である。これによって、拡張現実感技術を用いて生成される仮想オブジェクトの画像を立体的に表示する場合において、仮想オブジェクトの画像を見やすく表示することができる。
【図面の簡単な説明】
【0044】
【図1】開状態におけるゲーム装置の正面図
【図2】開状態におけるゲーム装置の側面図
【図3】閉状態におけるゲーム装置の左側面図、正面図、右側面図および背面図
【図4】図1に示す上側ハウジングのA−A’線断面図
【図5A】3D調整スイッチのスライダが最下点(第3の位置)に存在する様子を示す図
【図5B】3D調整スイッチのスライダが最下点よりも上方位置(第1の位置)に存在する様子を示す図
【図5C】3D調整スイッチのスライダが最上点(第2の位置)に存在する様子を示す図
【図6】ゲーム装置の内部構成を示すブロック図
【図7】本実施形態に係るゲーム装置10を使用する様子を示す図
【図8】ゲーム装置10と、各ボール51および52、ならびに、マーカー53との位置関係を示す図
【図9】各撮像画像とそれらに設定される表示領域を示す図
【図10】図9に示す各撮像画像を表示領域が一致するように重ねて示した図
【図11】各合成画像を示す図
【図12】左撮像画像と表示領域の基準枠との関係を示す図
【図13】枠が基準位置からずれた場合の左撮像画像を示す図
【図14】枠が縮小された左撮像画像を示す図
【図15】ゲームプログラムによる処理において用いられる各種データを示す図
【図16】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図17】図16に示す視差ゼロ点算出処理(ステップS4)の流れを示すフローチャート
【図18】仮想空間における仮想カメラ間距離を示す図
【図19】仮想空間における仮想マーカー距離を示す図
【図20】図16に示す左画像生成処理(ステップS5)の流れを示すフローチャート
【図21】現実空間と撮像画像の平面との対応を示す図
【図22】撮像画像の平面と仮想空間との対応を示す図
【図23】補正処理が行われた撮像画像と表示領域との関係を示す図
【発明を実施するための形態】
【0045】
[ゲーム装置の構成]
以下、図面を参照して、本発明に係る立体画像表示プログラムおよび立体画像表示装置の一実施形態であるゲームプログラムおよびゲーム装置について説明する。図1〜図3は、ゲーム装置10の外観を示す平面図である。ゲーム装置10は携帯型のゲーム装置であり、図1〜図3に示すように折り畳み可能に構成されている。図1および図2は、開いた状態(開状態)におけるゲーム装置10を示し、図3は、閉じた状態(閉状態)におけるゲーム装置10を示している。図1は、開状態におけるゲーム装置10の正面図であり、図2は、開状態におけるゲーム装置10の側面図である。ゲーム装置10は、カメラによって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりすることが可能である。また、ゲーム装置10は、所定のゲームプログラムを実行可能であり、仮想空間に設定された仮想カメラで撮像した画像を画面に表示することができる。
【0046】
まず、図1〜図3を参照して、ゲーム装置10の外観構成について説明する。図1〜図3に示されるように、ゲーム装置10は、下側ハウジング11および上側ハウジング21を有する。下側ハウジング11と上側ハウジング21とは、開閉可能(折り畳み可能)に接続されている。本実施形態では、各ハウジング11および21はともに横長の長方形の板状形状であり、互いの長辺部分で回転可能に接続されている。
【0047】
図1および図2に示されるように、下側ハウジング11の上側長辺部分には、下側ハウジング11の内側面(主面)11Bに対して垂直な方向に突起する突起部11Aが設けられる。また、上側ハウジング21の下側長辺部分には、上側ハウジング21の下側面から当該下側面に垂直な方向に突起する突起部21Aが設けられる。下側ハウジング11の突起部11Aと上側ハウジング21の突起部21Aとが連結されることにより、下側ハウジング11と上側ハウジング21とが、折り畳み可能に接続される。
【0048】
(下側ハウジングの説明)
まず、下側ハウジング11の構成について説明する。図1〜図3に示すように、下側ハウジング11には、下側LCD(Liquid Crystal Display:液晶表示装置)12、タッチパネル13、各操作ボタン14A〜14L(図1、図3)、アナログスティック15、LED16A〜16B、挿入口17、および、マイクロフォン用孔18が設けられる。以下、これらの詳細について説明する。
【0049】
図1に示すように、下側LCD12は下側ハウジング11に収納される。下側LCD12は横長形状であり、長辺方向が下側ハウジング11の長辺方向に一致するように配置される。下側LCD12は左右方向(図1に示すx軸方向)に関して下側ハウジング11の中央に配置される。下側LCD12は、下側ハウジング11の内側面(主面)に設けられ、下側ハウジング11に設けられた開口部から当該下側LCD12の画面が露出される。ゲーム装置10を使用しない場合には閉状態としておくことによって、下側LCD12の画面が汚れたり傷ついたりすることを防止することができる。下側LCD12の画素数は、例えば、256dot×192dot(横×縦)であってもよい。下側LCD12は、後述する上側LCD22とは異なり、画像を(立体視可能ではなく)平面的に表示する表示装置である。なお、本実施形態では表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置など、他の任意の表示装置を利用してもよい。また、下側LCD12として、任意の解像度の表示装置を利用することができる。
【0050】
図1に示されるように、ゲーム装置10は、入力装置として、タッチパネル13を備えている。タッチパネル13は、下側LCD12の画面上に装着されている。なお、本実施形態では、タッチパネル13は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。本実施形態では、タッチパネル13として、下側LCD12の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル13の解像度と下側LCD12の解像度が一致している必要はない。また、下側ハウジング11の上側面には挿入口17(図1および図3(d)に示す点線)が設けられている。挿入口17は、タッチパネル13に対する操作を行うために用いられるタッチペン28を収納することができる。なお、タッチパネル13に対する入力は通常タッチペン28を用いて行われるが、タッチペン28に限らずユーザの指でタッチパネル13に対する入力をすることも可能である。
【0051】
各操作ボタン14A〜14Lは、所定の入力を行うための入力装置である。図1に示されるように、下側ハウジング11の内側面(主面)には、各操作ボタン14A〜14Lのうち、十字ボタン14A(方向入力ボタン14A)、ボタン14B、ボタン14C、ボタン14D、ボタン14E、電源ボタン14F、セレクトボタン14J、HOMEボタン14K、およびスタートボタン14Lが設けられる。十字ボタン14Aは、十字の形状を有しており、上下左右の方向を指示するボタンを有している。ボタン14A〜14E、セレクトボタン14J、HOMEボタン14K、およびスタートボタン14Lには、ゲーム装置10が実行するプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン14Aは選択操作等に用いられ、各操作ボタン14B〜14Eは決定操作やキャンセル操作等に用いられる。また、電源ボタン14Fは、ゲーム装置10の電源をオン/オフするために用いられる。
【0052】
アナログスティック15は、方向を指示するデバイスであり、下側ハウジング11の内側面に設けられる。図1に示すように、アナログスティック15は、十字ボタン14Aの上方に設けられる。アナログスティック15は、指で操作されるスティック部が下側ハウジング11の内側面に対して任意の方向(上下左右および斜め方向の任意の角度)に傾倒するように構成されている。アナログスティック15は、ゲーム装置10が実行するプログラムに応じて機能する。例えば、3次元仮想空間に所定のオブジェクトが登場するゲームがゲーム装置10によって実行される場合、アナログスティック15は、当該所定のオブジェクトを3次元仮想空間内で移動させるための入力装置として機能する。この場合において、所定のオブジェクトはアナログスティック15が傾倒した方向に移動される。なお、アナログスティック15として、上下左右および斜め方向の任意の方向に所定量だけスライドすることでアナログ入力を可能としたものを用いても良い。
【0053】
図3(a)は閉状態におけるゲーム装置10の左側面図であり、図3(b)は閉状態におけるゲーム装置10の正面図であり、図3(c)は閉状態におけるゲーム装置10の右側面図であり、図3(d)は閉状態におけるゲーム装置10の背面図である。図3(b)および(d)に示されるように、下側ハウジング11の上側面には、Lボタン14GおよびRボタン14Hが設けられている。Lボタン14Gは、下側ハウジング11の上面の左端部に設けられ、Rボタン14Hは、下側ハウジング11の上面の右端部に設けられる。Lボタン14GおよびRボタン14Hは、例えば、カメラのシャッターボタン(撮影指示ボタン)として機能することができる。また、図3(a)に示されるように、下側ハウジング11の左側面には、音量ボタン14Iが設けられる。音量ボタン14Iは、ゲーム装置10が備えるスピーカの音量を調整するために用いられる。
【0054】
図3(a)に示されるように、下側ハウジング11の左側面には開閉可能なカバー部11Cが設けられる。このカバー部11Cの内側には、ゲーム装置10とデータ保存用外部メモリ45とを電気的に接続するためのコネクタ(図示せず)が設けられる。データ保存用外部メモリ45は、コネクタに着脱自在に装着される。データ保存用外部メモリ45は、例えば、ゲーム装置10によって撮像された画像のデータを記憶(保存)するために用いられる。なお、上記コネクタおよびそのカバー部11Cは、下側ハウジング11の右側面に設けられてもよい。
【0055】
また、図3(d)に示されるように、下側ハウジング11の上側面には開閉可能なカバー部11Dが設けられる。このカバー部11Dの内側には、ゲーム装置10とゲームプログラムを記録した外部メモリ44とを電気的に着脱自在に接続するためのコネクタ(図示せず)が設けられる。当該外部メモリ44がゲーム装置10に接続されることにより、所定のゲームプログラムが実行される。なお、上記コネクタおよびそのカバー部11Dは、下側ハウジング11の他の側面(例えば、右側面等)に設けられてもよい。
【0056】
また、図1および図3(c)に示されるように、下側ハウジング11の下側面にはゲーム装置10の電源のON/OFF状況をユーザに通知する第1LED16A、下側ハウジング11の右側面にはゲーム装置10の無線通信の確立状況をユーザに通知する第2LED16Bが設けられる。ゲーム装置10は他の機器との間で無線通信を行うことが可能であり、第1LED16Bは、無線通信が確立している場合に点灯する。ゲーム装置10は、例えば、IEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。下側ハウジング11の右側面には、この無線通信の機能を有効/無効にする無線スイッチ19が設けられる(図3(c)参照)。
【0057】
また、下側ハウジング11の内側面には、マイクロフォン用孔18が設けられる。マイクロフォン用孔18の下部には後述する音声入力装置としてのマイク(図6参照)が設けられ、当該マイクがゲーム装置10の外部の音を検出する。
【0058】
なお、図示は省略するが、下側ハウジング11には、ゲーム装置10の電源となる充電式電池が収納され、下側ハウジング11の側面(例えば、上側面)に設けられた端子を介して当該電池を充電することができる。
【0059】
(上側ハウジングの説明)
次に、上側ハウジング21の構成について説明する。図1〜図3に示すように、上側ハウジング21には、上側LCD(Liquid Crystal Display:液晶表示装置)22、外側カメラ23(左目用カメラ23aおよび右目用カメラ23b)、内側カメラ24、3D調整スイッチ25、および、3Dインジケータ26が設けられる。以下、これらの詳細について説明する。
【0060】
図1に示すように、上側LCD22は上側ハウジング21に収納される。上側LCD22は、横長形状であり、長辺方向が上側ハウジング21の長辺方向に一致するように配置される。上側LCD22は左右方向(図1に示すx軸方向)に関して上側ハウジング21の中央に配置される。上側LCD22の画面の面積は、下側LCD12の画面の面積よりも大きく設定される。具体的には、上側LCD22の画面は、下側LCD12の画面よりも横長に設定される。すなわち、上側LCD22の画面のアスペクト比における横幅の割合は、下側LCD12の画面のアスペクト比における横幅の割合よりも大きく設定される。
【0061】
上側LCD22の画面は、上側ハウジング21の内側面(主面)21Bに設けられ、上側ハウジング21に設けられた開口部から当該上側LCD22の画面が露出される。また、図2に示すように、上側ハウジング21の内側面は、透明なスクリーンカバー27によって覆われている。当該スクリーンカバー27は、上側LCD22の画面を保護するとともに、上側LCD22と上側ハウジング21の内側面と一体的にさせ、これにより統一感を持たせている。上側LCD22の画素数は、例えば、640dot×200dot(横×縦)であってもよい。なお、本実施形態では上側LCD22は液晶表示装置であるとしたが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置などが利用されてもよい。また、上側LCD22として、任意の解像度の表示装置を利用することができる。
【0062】
上側LCD22は、立体視可能な画像を表示することが可能な表示装置である。また、本実施形態では、実質的に同一の表示領域を用いて左目用画像と右目用画像が表示される。具体的には、上側LCD22は、左目用画像と右目用画像が所定単位で(例えば、1列ずつ)横方向に交互に表示される方式の表示装置である。または、上側LCD22は、左目用画像と右目用画像とが時分割で交互に表示される方式の表示装置であってもよい。また、本実施形態では、上側LCD22は裸眼立体視可能な表示装置である。そして、横方向に交互に表示される左目用画像と右目用画像とを左目および右目のそれぞれに分解して見えるように、レンチキュラー方式やパララックスバリア方式(視差バリア方式)の表示装置が用いられる。本実施形態では、上側LCD22はパララックスバリア方式のものとする。上側LCD22は、右目用画像と左目用画像とを用いて、裸眼で立体視可能な画像(立体画像)を表示する。すなわち、上側LCD22は、視差バリアを用いてユーザの左目に左目用画像を、ユーザの右目に右目用画像をそれぞれ視認させることにより、ユーザにとって立体感のある立体画像(立体視可能な画像)を表示することができる。また、上側LCD22は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる(上述した立体視とは反対の意味で平面視の画像を表示することができる)。このように、上側LCD22は、立体視可能な画像を表示する立体表示モードと、画像を平面的に表示する(平面視画像を表示する)平面表示モードとを切り替えることが可能な表示装置である。この表示モードの切り替えは、後述する3D調整スイッチ25によって行われる。
【0063】
外側カメラ23は、上側ハウジング21の外側面(上側LCD22が設けられた主面と反対側の背面)21Dに設けられ、当該外側面21Dの法線方向を撮像方向とするステレオカメラである。外側カメラ23は、左目用カメラ23aおよび右目用カメラ23bの2つのカメラで構成される。左目用カメラ23aおよび右目用カメラ23bは、それぞれの撮像方向が平行となるように配置される。左目用カメラ23aおよび右目用カメラ23bは、それぞれ所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。
【0064】
図1の破線および図3(b)の実線で示されるように、外側カメラ23を構成する左目用カメラ23aおよび右目用カメラ23bは、上側LCD22の画面の横方向と平行に並べられて配置される。すなわち、2つのカメラを結んだ直線が上側LCD22の画面の横方向と平行になるように、左目用カメラ23aおよび右目用カメラ23bが配置される。図1において左目用カメラ23aおよび右目用カメラ23bを表す破線は、上側ハウジング21の内側面とは反対側の外側面に左目用カメラ23aおよび右目用カメラ23bが存在することを意味している。図1に示すように、ユーザが上側LCD22の画面を正面から視認した場合に、左目用カメラ23aは左側に、右目用カメラ23bは右側に、それぞれ位置している。左目用カメラ23aおよび右目用カメラ23bの間隔は、人間の両目の間隔程度に設定され、例えば、30mm〜70mmの範囲で設定されてもよい。なお、左目用カメラ23aおよび右目用カメラ23bの間隔は、この範囲に限らない。また、他の実施形態においては、上記2つのカメラ23aおよび23bの間隔は可変であってもよい。
【0065】
また、左目用カメラ23aおよび右目用カメラ23bは、上側LCD22(上側ハウジング21)の左右方向に関して中央から対称となる位置にそれぞれ配置される。すなわち、左目用カメラ23aおよび右目用カメラ23bは、上側LCD22を左右に2等分する線に対して対称の位置にそれぞれ配置される。また、左目用カメラ23aおよび右目用カメラ23bは、上側ハウジング21を開いた状態において、上側ハウジング21の上部であって、上側LCD22の画面の上端よりも上方の位置の裏側に配置される。すなわち、左目用カメラ23aおよび右目用カメラ23bは、上側ハウジング21の外側面であって、上側LCD22を外側面に投影した場合、投影した上側LCD22の画面の上端よりも上方に配置される。
【0066】
このように、外側カメラ23の2つのカメラが、上側LCD22の左右方向に関して中央から対称の位置に配置されることにより、ユーザが上側LCD22を正視した場合に、外側カメラ23の撮像方向をユーザの視線方向と一致させることができる。また、外側カメラ23は、上側LCD22の画面の上端より上方の裏側の位置に配置されるため、外側カメラ23と上側LCD22とが上側ハウジング21の内部で干渉することがない。従って、外側カメラ23を上側LCD22の画面の裏側に配置する場合と比べて、上側ハウジング21を薄く構成することが可能となる。
【0067】
内側カメラ24は、上側ハウジング21の内側面(主面)21Bに設けられ、当該内側面の法線方向を撮像方向とするカメラである。内側カメラ24は、所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。
【0068】
図1に示すように、内側カメラ24は、上側ハウジング21を開いた状態において、上側ハウジング21の上部であって、上側LCD22の画面の上端よりも上方に配置され、上側ハウジング21の左右方向に関して中央の位置に配置される。具体的には、図1および図3(b)に示されるように、内側カメラ24は、上側ハウジング21の内側面であって、外側カメラ23の左右のカメラ(左目用カメラ23aおよび右目用カメラ23b)の中間の裏側の位置に配置される。すなわち、上側ハウジング21の外側面に設けられた左右のカメラを上側ハウジング21の内側面に投影した場合、当該投影した左右のカメラの中間に、内側カメラ24が設けられる。図3(b)で示される破線は、上側ハウジング21の内側面に存在する内側カメラ24を表している。
【0069】
このように、内側カメラ24は、外側カメラ23とは反対方向を撮像する。内側カメラ24は、上側ハウジング21の内側面であって、外側カメラ23の左右のカメラの中間位置の裏側に設けられる。これにより、ユーザが上側LCD22を正視した際、内側カメラ24でユーザの顔を正面から撮像することができる。また、外側カメラ23の左右のカメラと内側カメラ24とが上側ハウジング21の内部で干渉することがないため、上側ハウジング21を薄く構成することが可能となる。
【0070】
3D調整スイッチ25は、スライドスイッチであり、上述のように上側LCD22の表示モードを切り替えるために用いられるスイッチである。3D調整スイッチ25は、上側LCD22に表示された立体視可能な画像(立体画像)の立体感を調整するために用いられる。図1〜図3に示されるように、3D調整スイッチ25は、上側ハウジング21の内側面および右側面の端部に設けられ、ユーザが上側LCD22を正視した場合に、当該3D調整スイッチ25を視認できる位置に設けられる。
【0071】
図4は、図1に示す上側ハウジング21のA−A’線断面図である。図4に示すように、上側ハウジング21の内側面の右端部には、凹部21Cが形成され、当該凹部21Cに3D調整スイッチ25が設けられる。3D調整スイッチ25は、図1および図2に示されるように、上側ハウジング21の正面および右側面から視認可能に配置される。3D調整スイッチ25のスライダ25aは、所定方向(上下方向)の任意の位置にスライド可能であり、当該スライダ25aの位置に応じて上側LCD22の表示モードが設定される。
【0072】
図5Aから図5Cは、3D調整スイッチ25のスライダ25aがスライドする様子を示す図である。図5Aは、3D調整スイッチ25のスライダ25aが最下点(第3の位置)に存在する様子を示す図である。図5Bは、3D調整スイッチ25のスライダ25aが最下点よりも上方位置(第1の位置)に存在する様子を示す図である。図5Cは、3D調整スイッチ25のスライダ25aが最上点(第2の位置)に存在する様子を示す図である。
【0073】
図5Aに示すように、3D調整スイッチ25のスライダ25aが最下点位置(第3の位置)に存在する場合、上側LCD22は平面表示モードに設定され、上側LCD22の画面には平面画像が表示される。一方、図5Bに示す位置(最下点より上側の位置(第1の位置))から図5Cに示す位置(最上点の位置(第2の位置))までの間にスライダ25aが存在する場合、上側LCD22は立体表示モードに設定される。この場合、上側LCD22の画面には立体視可能な画像が表示される。スライダ25aが第1の位置から第2の位置の間に存在する場合、スライダ25aの位置に応じて、立体画像の見え方が調整される。3D調整スイッチ25のスライダ25aは、第3の位置で固定されるように構成されており、第1の位置と第2の位置との間では上下方向に任意の位置にスライド可能に構成されている。例えば、スライダ25aは、第3の位置において、3D調整スイッチ25を形成する側面から図5Aに示す横方向に突出した凸部(図示せず)によって固定されて、所定以上の力が上方に加わらないと第3の位置よりも上方にスライドしないように構成されている。
【0074】
3Dインジケータ26は、上側LCD22が立体表示モードか否かを示す。3Dインジケータ26は、LEDであり、上側LCD22の立体表示モードが有効の場合に点灯する。図1に示されるように、3Dインジケータ26は、上側ハウジング21の内側面に設けられ、上側LCD22の画面近傍に設けられる。このため、ユーザが上側LCD22の画面を正視した場合、ユーザは3Dインジケータ26を視認しやすい。従って、ユーザは上側LCD22の画面を視認している状態で、上側LCD22の表示モードを容易に認識することができる。
【0075】
また、上側ハウジング21の内側面には、スピーカ孔21Eが設けられる。後述するスピーカ43からの音声がこのスピーカ孔21Eから出力される。
【0076】
[ゲーム装置10の内部構成]
次に、図6を参照して、ゲーム装置10の内部の電気的構成について説明する。図6は、ゲーム装置10の内部構成を示すブロック図である。図6に示すように、ゲーム装置10は、上述した各部に加えて、情報処理部31、メインメモリ32、外部メモリインターフェイス(外部メモリI/F)33、データ保存用外部メモリI/F34、データ保存用内部メモリ35、無線通信モジュール36、ローカル通信モジュール37、リアルタイムクロック(RTC)38、加速度センサ39、電源回路40、およびインターフェイス回路(I/F回路)41等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて下側ハウジング11(または上側ハウジング21でもよい)内に収納される。
【0077】
情報処理部31は、所定のプログラムを実行するためのCPU(Central Processing Unit)311、画像処理を行うGPU(Graphics Processing Unit)312等を含む情報処理手段である。本実施形態では、所定の処理を実行するためのプログラムがゲーム装置10内のメモリ(例えば外部メモリI/F33に接続された外部メモリ44やデータ保存用内部メモリ35)に記憶されている。情報処理部31のCPU311は、当該プログラムを実行することによって、当該プログラムに応じた処理(例えば、撮影処理や、後述する画像表示処理など)を実行する。なお、情報処理部31のCPU311によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。また、情報処理部31は、VRAM(Video RAM)313を含む。情報処理部31のGPU312は、情報処理部31のCPU311からの命令に応じて画像を生成し、VRAM313に描画する。そして、情報処理部31のGPU312は、VRAM313に描画された画像を上側LCD22及び/又は下側LCD12に出力し、上側LCD22及び/又は下側LCD12に当該画像が表示される。
【0078】
情報処理部31には、メインメモリ32、外部メモリI/F33、データ保存用外部メモリI/F34、および、データ保存用内部メモリ35が接続される。外部メモリI/F33は、外部メモリ44を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリI/F34は、データ保存用外部メモリ45を着脱自在に接続するためのインターフェイスである。
【0079】
メインメモリ32は、情報処理部31(のCPU311)のワーク領域やバッファ領域として用いられる揮発性の記憶手段である。すなわち、メインメモリ32は、上記プログラムに基づく処理に用いられる各種データを一時的に記憶したり、外部(外部メモリ44や他の機器等)から取得されるプログラムを一時的に記憶したりする。本実施形態では、メインメモリ32として例えばPSRAM(Pseudo−SRAM)を用いる。
【0080】
外部メモリ44は、情報処理部31によって実行されるプログラムを記憶するための不揮発性の記憶手段である。外部メモリ44は、例えば読み取り専用の半導体メモリで構成される。外部メモリ44が外部メモリI/F33に接続されると、情報処理部31は外部メモリ44に記憶されたプログラムを読み込むことができる。情報処理部31が読み込んだプログラムを実行することにより、所定の処理が行われる。データ保存用外部メモリ45は、不揮発性の読み書き可能なメモリ(例えばNAND型フラッシュメモリ)で構成され、所定のデータを格納するために用いられる。例えば、データ保存用外部メモリ45には、外側カメラ23で撮像された画像や他の機器で撮像された画像が記憶される。データ保存用外部メモリ45がデータ保存用外部メモリI/F34に接続されると、情報処理部31はデータ保存用外部メモリ45に記憶された画像を読み込み、上側LCD22及び/又は下側LCD12に当該画像を表示することができる。
【0081】
データ保存用内部メモリ35は、読み書き可能な不揮発性メモリ(例えばNAND型フラッシュメモリ)で構成され、所定のデータを格納するために用いられる。例えば、データ保存用内部メモリ35には、無線通信モジュール36を介した無線通信によってダウンロードされたデータやプログラムが格納される。
【0082】
無線通信モジュール36は、例えばIEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、ローカル通信モジュール37は、所定の通信方式(例えば独自プロトコルによる通信や、赤外線通信)により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール36およびローカル通信モジュール37は情報処理部31に接続される。情報処理部31は、無線通信モジュール36を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール37を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
【0083】
また、情報処理部31には、加速度センサ39が接続される。加速度センサ39は、3軸(xyz軸)方向に沿った直線方向の加速度(直線加速度)の大きさを検出する。加速度センサ39は、下側ハウジング11の内部に設けられる。加速度センサ39は、図1に示すように、下側ハウジング11の長辺方向をx軸、下側ハウジング11の短辺方向をy軸、下側ハウジング11の内側面(主面)に対して垂直な方向をz軸として、各軸の直線加速度の大きさを検出する。例えば、加速度センサ39は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)又はSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。なお、加速度センサ39は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ39は1軸または2軸方向を検出する加速度センサであってもよい。情報処理部31は、加速度センサ39が検出した加速度を示すデータ(加速度データ)を受信して、ゲーム装置10の姿勢や動きを検出することができる。
【0084】
また、情報処理部31には、RTC38および電源回路40が接続される。RTC38は、時間をカウントして情報処理部31に出力する。情報処理部31は、RTC38によって計時された時間に基づき現在時刻(日付)を計算する。電源回路40は、ゲーム装置10が有する電源(下側ハウジング11に収納される上記充電式電池)からの電力を制御し、ゲーム装置10の各部品に電力を供給する。
【0085】
また、情報処理部31には、I/F回路41が接続される。I/F回路41には、マイク42およびスピーカ43が接続される。具体的には、I/F回路41には、図示しないアンプを介してスピーカ43が接続される。マイク42は、ユーザの音声を検知して音声信号をI/F回路41に出力する。アンプは、I/F回路41からの音声信号を増幅し、音声をスピーカ43から出力させる。また、タッチパネル13はI/F回路41に接続される。I/F回路41は、マイク42およびスピーカ43(アンプ)の制御を行う音声制御回路と、タッチパネルの制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するA/D変換およびD/A変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル13からの信号に基づいて所定の形式のタッチ位置データを生成して情報処理部31に出力する。タッチ位置データは、タッチパネル13の入力面において入力が行われた位置の座標を示す。なお、タッチパネル制御回路は、タッチパネル13からの信号の読み込み、および、タッチ位置データの生成を所定時間に1回の割合で行う。情報処理部31は、タッチ位置データを取得することにより、タッチパネル13に対して入力が行われた位置を知ることができる。
【0086】
操作ボタン14は、上記各操作ボタン14A〜14Lからなり、情報処理部31に接続される。操作ボタン14から情報処理部31へは、各操作ボタン14A〜14Iに対する入力状況(押下されたか否か)を示す操作データが出力される。情報処理部31は、操作ボタン14から操作データを取得することによって、操作ボタン14に対する入力に従った処理を実行する。
【0087】
下側LCD12および上側LCD22は情報処理部31に接続される。下側LCD12および上側LCD22は、情報処理部31(のGPU312)の指示に従って画像を表示する。本実施形態では、情報処理部31は、上側LCD22に右目用画像と左目用画像とを用いた立体画像(立体視可能な画像)を表示させる。
【0088】
具体的には、情報処理部31は、上側LCD22のLCDコントローラ(図示せず)と接続され、当該LCDコントローラに対して視差バリアのオン/オフを制御する。上側LCD22の視差バリアがオンになっている場合、情報処理部31のVRAM313に格納された右目用画像と左目用画像とが、上側LCD22に出力される。より具体的には、LCDコントローラは、右目用画像について縦方向に1ライン分の画素データを読み出す処理と、左目用画像について縦方向に1ライン分の画素データを読み出す処理とを交互に繰り返すことによって、VRAM313から右目用画像と左目用画像とを読み出す。これにより、右目用画像および左目用画像が、画素を縦に1ライン毎に並んだ短冊状画像に分割され、分割された右目用画像の短冊状画像と左目用画像の短冊状画像とが交互に配置された画像が、上側LCD22の画面に表示される。そして、上側LCD22の視差バリアを介して当該画像がユーザに視認されることによって、ユーザの右目に右目用画像が、ユーザの左目に左目用画像が視認される。以上により、上側LCD22の画面には立体視可能な画像が表示される。
【0089】
外側カメラ23および内側カメラ24は、情報処理部31に接続される。外側カメラ23および内側カメラ24は、情報処理部31の指示に従って画像を撮像し、撮像した画像データを情報処理部31に出力する。
【0090】
3D調整スイッチ25は、情報処理部31に接続される。3D調整スイッチ25は、スライダ25aの位置に応じた電気信号を情報処理部31に送信する。
【0091】
また、3Dインジケータ26は、情報処理部31に接続される。情報処理部31は、3Dインジケータ26の点灯を制御する。例えば、情報処理部31は、上側LCD22が立体表示モードである場合、3Dインジケータ26を点灯させる。以上がゲーム装置10の内部構成の説明である。
【0092】
[ゲーム装置10における立体画像表示処理の概要]
以下、ゲーム装置10において実行される立体画像表示処理の概要について説明する。本実施形態では、ゲーム装置10は、拡張現実感技術を用いて生成した画像を立体的に表示する。すなわち、ゲーム装置10は、外側カメラ23によって撮像される画像(撮像画像)と、仮想的に生成される仮想オブジェクトの画像(仮想画像)とを合成した画像(合成画像)を、立体視表示が可能な上側LCD22に表示する。
【0093】
図7は、本実施形態に係るゲーム装置10を使用する様子を示す図である。図7では、現実の物体であるボール51および52と、マーカー53とが外側カメラ23(左目用カメラ23aおよび右目用カメラ23b)によって撮像されている。また、図8は、ゲーム装置10と、各ボール51および52、ならびに、マーカー53との位置関係を示す図である。図8に示すように、ボール51がゲーム装置10に最も近く、マーカー53がゲーム装置10に2番目に近く、ボール52がゲーム装置10から最も遠くに配置されている。マーカー53は、拡張現実感技術に用いられる撮像対象である。つまり、ゲーム装置10は、このマーカー53と外側カメラ23との位置関係を算出し、算出された位置関係に基づいて生成された仮想オブジェクト54の画像を撮像画像に合成することによって合成画像を生成する。
【0094】
また、図7に示すように、上側LCD22には、拡張現実感技術による合成画像が立体的に表示される。すなわち、図7に示すように、左目用の合成画像(図7に示す実線)と右目用の合成画像(図7に示す点線)との両方が上側LCD22の画面に表示される。なお、図7では、左目用と右目用との両方合成画像が上側LCD22の画面に表示される様子を表している。ただし、実際には、上側LCD22の正面付近に位置するユーザに関しては、上述の視差バリアによって、左目用画像はユーザの左目のみで視認され、右目用画像はユーザの右目のみで視認される。その結果、ユーザは画像を立体的に視認することができる。以下、図9〜図13を参照して、拡張現実感技術による合成画像が立体的に表示されるまでの処理の概要を説明する。
【0095】
なお、以下では、左目用カメラ23aによって撮像される画像を「左撮像画像」と呼び、右目用カメラ23bによって撮像される画像を「右撮像画像」と呼ぶ。また、左撮像画像と合成される仮想オブジェクトの画像を「左仮想画像」と呼び、右撮像画像と合成される仮想オブジェクトの画像を「右仮想画像」と呼ぶ。また、左撮像画像と左仮想画像とを合成した画像を「左合成画像」と呼び、右撮像画像と右仮想画像とを合成した画像を「右合成画像」と呼ぶ。
【0096】
(表示領域の決定)
本実施形態においては、ゲーム装置10は、立体視表示における視差ゼロ距離を調整するために、各撮像画像のうちで画面に表示される領域(表示領域)をそれぞれ適切な位置に決定する。なお、立体視表示される表示対象は、立体視表示時の奥行位置に応じた視差で表示されることになるが、このうち、視差がゼロで表示される表示対象は、表示面上に見える(焦点が合って見える)ことになる。つまり、立体視表示における視差が小さい物体については、奥行き方向に関して表示面の位置に存在するように見え(焦点が合って見え)、視差が大きい物体については、表示面の位置よりも手前または奥に存在するように見える。
【0097】
本明細書では、上記のような、立体視表示時に、表示面上に見える表示対象までの視点からの深さ(視線方向についての距離)のことを「視差ゼロ距離」と呼ぶ。なお、視差ゼロ距離は実空間においても仮想空間においても設定可能である。つまり、視差ゼロ距離とは、「仮想空間における仮想カメラから、立体視表示において表示面の位置に存在するように見える点までの(仮想カメラの撮像方向についての)距離」または、現実空間における外側カメラ23から、立体視表示において表示面上に存在するように見える点までの(外側カメラ23の撮像方向についての)距離」である。また、特に、視差ゼロ距離上の点のうち2つのカメラ位置(2つの外側カメラ23aおよび23bの位置、または、2つの仮想カメラの位置)の中線上の点を、「視差ゼロ点」と呼ぶ。ゲーム装置10では、各撮像画像の表示領域を調整することで、撮像画像に含まれる物体の表示上の視差を調整することができ、それによって立体視表示における視差ゼロ距離を調整することができる。なお、本明細書において「視差」とは、右目用画像に含まれる物体の位置と、左目用画像に含まれる当該物体の位置との差を意味する。
【0098】
ここで、本実施形態においては、ゲーム装置10は、視差ゼロ距離が外側カメラ23からマーカー53までの距離(図8に示す距離D)に応じた距離となるように、立体視表示を行う。つまり、ゲーム装置10は、視差ゼロ距離が上記距離Dに応じた距離となるように各撮像画像の表示領域を決定する。例えば、ゲーム装置10は、視差ゼロ距離が距離Dとなるように表示領域を決定することによって、マーカー53の視差がゼロで表示されるようにし、マーカー53が画面上の奥行き位置に見える(マーカー53に焦点が合う)ように立体視表示を行うことも可能である。なお、実際にはマーカー53は大きさを持っているのでマーカー53の全域について視差がゼロになるわけではない。しかしながら、本実施形態は、視差ゼロ距離に存在するオブジェクトは視差ゼロとなるような表示を目的とする処理を行うものであり、また、そのオブジェクトの全域について視差ゼロとなるものではないとしても、そのオブジェクトは全体としては視差ゼロで表示されると言える。それゆえ、本明細書では、「視差ゼロ距離に存在するオブジェクトは視差ゼロで表示される」と表現する。マーカーなお、本実施形態では、表示領域を決定する際において、ゲーム装置10は、上記距離Dに対応する仮想空間における距離(後述する仮想マーカー距離d)を実際に算出し、算出した距離に基づいて視差ゼロ距離を決定する。そして、決定された視差ゼロ距離となるように表示領域を調整する(視差を調整する)。仮想マーカー距離dの算出方法や、視差ゼロ距離から表示領域を決定する方法の詳細については後述する。
【0099】
図9は、各撮像画像とそれらに設定される表示領域を示す図である。また、図10は、図9に示す各撮像画像を表示領域が一致するように重ねて示した図である。なお、図9および図10では、図面を見やすくする目的で、左撮像画像55を実線で表し、右撮像画像56を点線で表している。
【0100】
例えば外側カメラ23からマーカー53までの距離Dを視差ゼロ距離とする場合、ゲーム装置10は、マーカー53が画面上で左目用画像と右目用画像が(ほぼ)同じ位置に表示されるように(画面上でマーカー53が視差ゼロとなるように)、左撮像画像55の表示領域57、および、右撮像画像56の表示領域58を決定する。すなわち、図9および図10に示すように、各表示領域57および58内においてマーカー53が画面上における左目用画像と右目用画像で(ほぼ)同じ位置となるように(マーカー53の視差がゼロになるように)、各表示領域57および58を決定する。これによって、マーカー53までの距離を視差ゼロ距離とする立体視表示が行われる。すなわち、立体視表示をした際にマーカー53が画面上(付近)の奥行き位置にあるように見える。
【0101】
なお、左撮像画像および右撮像画像を用いて立体視表示する際における視差ゼロ距離は、各表示領域57および58の位置に応じて変化する。具体的には、左撮像画像55においては、表示領域57が左撮像画像55の中央から右にずれる量(ずれ量)が大きくなるほど、立体視表示における視差ゼロ点は近づくことになり、このずれ量が小さいほど視差ゼロ点が遠ざかることになる。また、右撮像画像56においては、表示領域58が右撮像画像56の中央から左にずれる量が大きくなるほど視差ゼロ点は近づき、このずれ量が小さいほど視差ゼロ点が遠ざかることになる。また、各表示領域57および58が各撮像画像55および56の中央にそれぞれ位置する場合、視差ゼロ点は無限遠となる。
【0102】
以上のように、ゲーム装置10は、立体視表示における視差ゼロ距離が、外側カメラ23からマーカー53までの距離Dに応じた距離となるように、各撮像画像55および56における各表示領域57および58の位置を決定する。したがって、本実施形態によれば、ゲーム装置10がマーカー53に近づくと、それに応じて視差ゼロ点が近くなり、ゲーム装置10がマーカー53から遠ざかると、それに応じて視差ゼロ点が遠くなる。なお、図9および図10ではマーカー53の位置を視差ゼロ点とする場合を例として説明したが、ゲーム装置10は、マーカー53の位置だけなく、マーカー53より所定距離だけ手前(または奥)の位置に視差ゼロ点を合わせることも可能である。また、視差ゼロ距離は現実空間の距離としても仮想空間の距離としても算出することが可能であるので、上記所定距離は、現実空間の距離としても仮想空間の距離としても設定することが可能である。
【0103】
(合成画像の生成)
上記のようにして表示領域57および58が決定されると、ゲーム装置10は、表示領域内の各撮像画像55および56に対して仮想オブジェクト54の画像(仮想画像)を合成して、合成画像を生成する。合成画像を生成する処理は、マーカー53を用いた拡張現実感技術によって行われる。すなわち、ゲーム装置10は、マーカー53と外側カメラ23との位置関係を算出し、算出された位置関係に基づいて生成された仮想オブジェクト54の画像を撮像画像に合成することによって合成画像を生成する。具体的には、仮想空間における仮想カメラの位置および姿勢が上記位置関係に基づいて決定され、仮想カメラから見た仮想オブジェクト54の画像が撮像画像に合成される。
【0104】
なお、本実施形態においては、仮想画像を合成する処理は撮像画像55および56毎に行われ、各撮像画像55および56に合成される各仮想画像は異なっている。つまり、各仮想画像を生成するために2つの仮想カメラが設定される。左撮像画像55に合成する仮想オブジェクトの画像(左仮想画像)は、左仮想カメラに基づいて生成され、右撮像画像56に合成する仮想オブジェクトの画像(右仮想画像)は、右仮想カメラに基づいて生成される。なお、左仮想カメラの位置および姿勢は、左目用カメラ23aとマーカー53との位置関係に基づいて算出され、右仮想カメラの位置および姿勢は、右目用カメラ23bとマーカー53との位置関係に基づいて算出される。以上のようにして2つの仮想画像が生成される結果、図11に示すように、左撮像画像55に対して左仮想画像が合成された左合成画像59が生成される。また、右撮像画像56に対して右仮想画像が合成された右合成画像60が生成される。なお、図11においては、仮想オブジェクト54がマーカー53の位置に表示される場合を示しているが、仮想オブジェクト54の表示位置はマーカー53の位置でなくてもよい。ゲーム装置10は、マーカー53の付近の位置に仮想オブジェクト54を表示することも可能であるし、マーカー53から離れた位置に仮想オブジェクト54を表示することも可能である。
【0105】
(立体視表示)
上記のように生成された各合成画像59および60を用いて、ゲーム装置10は立体視表示を行う。具体的には、ゲーム装置10は、上側LCD22の縦1ライン毎に左合成画像59と右合成画像60を交互に配置して表示する。なお、図7および図11では、左目用画像(実線)と右目用画像(点線)との両方が上側LCD22の画面に表示される様子を表している。ただし、実際には、(上側LCD22の視差バリアがオンになっている場合、)上側LCD22の正面付近に位置するユーザに関しては、上述の視差バリアによって、左合成画像59はユーザの左目のみで視認され、右合成画像60はユーザの右目のみで視認される。その結果、ユーザは合成画像を立体的に視認することができる。すなわち、ユーザにとっては、視差が小さい仮想オブジェクト54が表示画面付近にあるように見え、また、ボール51が仮想オブジェクト54よりも飛び出して見え、ボール52が仮想オブジェクト54よりも奥に見える。
【0106】
以上のように、本実施形態によれば、ゲーム装置10は、拡張現実感技術を用いることによって、仮想オブジェクト54があたかも現実世界に存在しているかのような画像をユーザに提示することができる。また、ゲーム装置10は、立体視表示を行うことによって、拡張現実感技術による合成画像を立体的に表示することができる。
【0107】
また、本実施形態では、ゲーム装置10は、外側カメラ23からマーカー53までの距離Dに応じて視差ゼロ距離を決めるので、立体視表示される画像の視差ゼロ点は、当該距離Dに合わせて自動的に調整される。したがって、例えばマーカー53の位置あるいはマーカー53の付近の位置に視差ゼロ点が位置するように自動的に調整することもできる。これによれば、マーカー53の付近に表示される仮想オブジェクト54に自動的に視差ゼロ点を合わせることも可能となるので、ユーザにとって仮想オブジェクト54を見やすく表示することができる。また、本実施形態のように拡張現実感技術を用いる場合には、ユーザは仮想オブジェクト54を注視する機会が多いと考えられるので、本実施形態によれば、ユーザにとって見やすい立体視表示を可能とすることができる。
【0108】
(ズーム処理)
また、本実施形態では、自動的に視差ゼロ距離(表示領域)が調整される際に、必要に応じて表示領域が縮小し、画像の拡大(ズームアップ)が行われることがある。以下、図12〜図14を参照して、表示領域が縮小される処理の概要について説明する。
【0109】
図12は、左撮像画像と表示領域の基準枠との関係を示す図である。図12に示すように、本実施形態においては、左撮像画像55の中央に基準枠61が設定される。基準枠61は、表示領域を決定する枠(図13に示す枠62)の基準位置を表す。なお、本実施形態では、左撮像画像55は384×512ドット(縦×横)の大きさであり、基準枠61は240×400ドット(縦×横)の大きさであるとする。なお、撮像画像および基準枠の大きさ、および、基準枠の位置については、右撮像画像56も左撮像画像55と同じである。
【0110】
図13は、枠が基準位置からずれた場合の左撮像画像を示す図である。視差ゼロ距離に応じて表示領域が決定される場合、上述のように、左撮像画像55については枠62は中央(基準枠61の位置)から右にずれる。また、枠62のずれ量dx(左撮像画像55の中心点Cから枠62の中心点C’までの距離)は、上述のように視差ゼロ距離に応じて決まり、視差ゼロ距離が小さいほどずれ量dxが大きくなる。なお、右撮像画像56については、ずれ量dxの大きさは左撮像画像55と同じであり、ずれる方向は左撮像画像55と逆の左方向となる。
【0111】
ここで、枠62のずれ量dxが所定値(図13の例では、56ドット)を超えると、図13に示すように、枠62が左撮像画像55からはみ出してしまう。枠62が左撮像画像55からはみ出す場合において、枠62の領域をそのまま表示領域とすると、左撮像画像55からはみ出した部分(図13に示す斜線部分)については、左撮像画像55が無いことになる。また、この場合、右撮像画像56についても枠が右撮像画像56からはみ出し、枠の左側の部分において右撮像画像56が無いことになる。したがって、枠62の領域をそのまま表示領域とすると、画面に表示される画像の両端部分は立体的に見えなくなるので、見にくい画像となってしまう。また、上記両端の部分については撮像画像を表示しないようにする(黒を表示する)方法では、撮像画像の幅が狭くなるので、ユーザに違和感を与えてしまうとともに、上側LCD22の画面を有効に利用することができない。
【0112】
そこで、本実施形態では、枠62が撮像画像からはみ出す場合、ゲーム装置10は、撮像画像の内側に収まるように枠62の大きさを変更(縮小)する。図14は、枠が縮小された左撮像画像を示す図である。図14においては、枠62は変更前の枠であり、枠63は変更後の枠である。上記の場合、ゲーム装置10は、はみ出した枠62の頂点が左撮像画像55の周の位置となるように枠を縮小する。このとき、ゲーム装置10は、変更前後で枠の中心位置(C’)が変化しないように枠を縮小する。なお、右撮像画像56についても、左撮像画像55と同様に、はみ出した枠62の頂点が右撮像画像56の周の位置となり、かつ、変更前後で枠の中心位置が変化しないように、枠が縮小される。以上によって、上側LCD22に表示される画像は拡大されることとなる。
【0113】
以上のように、本実施形態では、上記ずれ量dxが大きいために枠が撮像画像からはみ出す場合、枠の大きさが変更される。これによって、各撮像画像55および56の表示領域の全体に画像が含まれることになる。したがって、画面の両端の部分が立体的に見えなかったり、表示される画像の幅が狭くなったりすることがなく、立体視表示において見やすい画像を表示することができる。
【0114】
なお、上述のように、枠が縮小される場合には、上側LCD22に表示される画像はズームアップ(拡大)されることとなる。ここで、枠が縮小されるのは、ずれ量dxが大きい場合であり、視差ゼロ距離が短い場合である。つまり、本実施形態によれば、近くの物を見る場合に画像がズームアップされるので、自動的にズームアップされてもユーザが違和感を受けることはほとんどなく、見やすい画像を表示することができる。
【0115】
また、本実施形態のように自動で視差ゼロ距離が変化する場合において、仮に枠が縮小されないとすれば、ユーザが何ら操作を行っていない場合にも視差ゼロ距離が自動的に変化する結果、画面の両端の部分が立体的に見えなくなる等の問題が生じ、ユーザは非常に大きな違和感を抱くおそれがある。そのため、本実施形態のように自動で視差ゼロ距離が変化する場合においては、枠が自動的に縮小されることによって上記の問題を防止することは、特に有効である。
【0116】
[ゲーム装置10における処理の詳細]
次に、図15〜図22を参照して、ゲームプログラムによって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図15は、ゲームプログラムによる処理において用いられる各種データを示す図である。図15において、ゲーム装置10のメインメモリ32には、ゲームプログラム71、撮像画像データ72、および処理用データ75等が記憶される。
【0117】
ゲームプログラム71は、後述するゲーム処理(図16)をゲーム装置10の情報処理部31に実行させるプログラムである。ゲームプログラム71は、その一部または全部が適宜のタイミングで外部メモリ44やデータ保存用内部メモリ35等から読み込まれることによってメインメモリ32に記憶される。ゲームプログラム71には、所定のゲームを進行させるためのプログラムや、立体画像表示処理を実行するためのプログラムが含まれる。
【0118】
撮像画像データ72は、外側カメラ23によって撮像された画像(撮像画像)を示すデータである。撮像画像データ72には、左撮像画像データ73および右撮像画像データ74が含まれる。左撮像画像データ73は、左目用カメラ23aによって撮像された画像(左撮像画像)を示すデータである。右撮像画像データ74は、右目用カメラ23bによって撮像された画像(右撮像画像)を示すデータである。なお、各撮像画像データ73および74としては、それぞれの最新のデータのみが記憶されてもよいし、新しいものから順にそれぞれ所定個数のデータが記憶されてもよい。
【0119】
処理用データ75は、ゲーム処理において用いられる各種のデータである。処理用データ75には、認識結果データ76、仮想カメラ間隔データ77、仮想マーカー距離データ78、仮想カメラデータ79、スケールデータ80、仮想視差ゼロ距離データ81、実視差ゼロ距離データ82、ずれ量データ83、表示サイズデータ84、および、視野範囲データ85が含まれる。なお、処理用データ75には、上記の他、ゲームに登場する各種オブジェクト(図7に示す仮想オブジェクト54等)に関するデータや、BGM等の音声データ等、ゲームに必要な各種データが記憶される。
【0120】
認識結果データ76は、撮像画像に含まれるマーカー53を認識する処理(認識処理)の結果を示すデータである。具体的には、本実施形態の認識処理においては、仮想カメラの位置および姿勢を表す情報(例えば、仮想カメラのビュー行列)が認識結果として算出される。なお、ビュー行列は、仮想カメラの位置および姿勢を反映した行列であり、具体的には、仮想空間におけるマーカー座標系で表される座標を、仮想カメラの位置および姿勢を基準とした仮想カメラ座標系で表される座標へと変換する座標変換行列である。上記マーカー座標系は、現実空間におけるマーカー53の位置に対応する仮想空間内の位置(「仮想マーカー位置」と呼ぶ)を原点とした座標系である。
【0121】
また、上記認識処理は、左撮像画像および右撮像画像についてそれぞれ実行されるので、認識処理結果も左撮像画像および右撮像画像についてそれぞれ算出される。つまり、認識結果データ76は、左目用カメラ23aに対応する左仮想カメラに関する認識結果を示すデータと、右目用カメラ23bに対応する右仮想カメラに関する認識結果を示すデータとを含む。
【0122】
仮想カメラ間隔データ77は、仮想空間における左仮想カメラと右仮想カメラとの距離(仮想カメラ間距離e)を示すデータである。詳細は後述するが、この仮想カメラ間距離eは、上記認識結果データ76(各仮想カメラのビュー行列)から算出される。
【0123】
仮想マーカー距離データ78は、仮想空間における2つの仮想カメラから上記仮想マーカー位置までの距離(仮想マーカー距離d)である。ここでは、仮想マーカー距離dは、仮想カメラからマーカー対応位置までの距離のうち、仮想カメラの視線方向の成分の長さである。詳細は後述するが、仮想マーカー距離dは、上記認識結果データ76(各仮想カメラのビュー行列)から算出される。
【0124】
仮想カメラデータ79は、仮想画像の生成に用いられる仮想カメラの位置および姿勢を示すデータである。ここで、上記認識結果データ76も仮想カメラデータ79と同様、仮想カメラの位置および姿勢(例えば、仮想カメラのビュー行列)を示すが、仮想カメラデータ79は、認識結果データ76に対して必要に応じて所定の補正処理(後述するステップS14)を行った結果得られるデータである。また、仮想カメラデータ79も認識結果データ76と同様、左仮想カメラの位置および姿勢を示すデータと、右仮想カメラの位置および姿勢を示すデータとを含む。なお、本実施形態においては、認識結果データ76に対して所定の補正処理を行ったものを仮想カメラのビュー行列(仮想カメラデータ79)として用いるが、他の実施形態においては、例えば、認識結果データ76がそのままビュー行列として利用されてもよい。また、例えば、左撮像画像に対する認識結果のみを利用して、左右両方の仮想カメラのビュー行列が設定されてもよい。
【0125】
スケールデータ80は、仮想空間における長さと現実空間における長さとの比率(スケール)sを示すデータである。なお、本実施形態では、左目用カメラ23aと右目用カメラ23bとの間の長さ(実カメラ間距離E)は既知であり、上記の比率は、実カメラ間距離Eに対する上記仮想カメラ間距離eの比(E/e)として算出される。
【0126】
仮想視差ゼロ距離データ81は、現実空間における視差ゼロ距離Fに対応する仮想空間における視差ゼロ距離(仮想視差ゼロ距離)fを示すデータである。詳細は後述するが、本実施形態では、仮想視差ゼロ距離fは上記仮想マーカー距離dに応じて決定される。
【0127】
実視差ゼロ距離データ82は、現実空間におけるにおける視差ゼロ距離(実視差ゼロ距離)Fを示すデータである。本実施形態では、実視差ゼロ距離Fは上記仮想視差ゼロ距離fおよび上記スケールsに基づいて算出される。
【0128】
ずれ量データ83は、撮像画像内における上述の枠のずれ量dxを示すデータである。具体的には、ずれ量dxは、図13に示すように、撮像画像の中心点から枠の中心点までの長さである。詳細は後述するが、ずれ量dxは上記実視差ゼロ距離Fから算出される。なお、本実施形態では、左撮像画像と右撮像画像とにおける枠のずれ量は等しくなるので、ずれ量データ83は、ずれ量dxとして1種類の値のみを示せばよい。ただし、他の実施形態においては、ずれ量データ83は、左撮像画像における枠のずれ量を示すデータと、右撮像画像における枠のずれ量を示すデータとを別個に含んでいてもよい。
【0129】
表示サイズデータ84は、上記枠の大きさを示すデータである。具体的には、表示サイズデータ84は、枠の縦および横の長さ(ドット数)を示す。なお、上述のように、枠の大きさは、上記ずれ量dxが所定値以下である場合は、予め定められた大きさ(240×400(縦×横))であり、ずれ量dxが所定値を超える場合は、ずれ量dxに応じて縮小される。
【0130】
視野範囲データ85は、仮想カメラの視野範囲を示すデータである。仮想カメラの視野範囲は、例えば仮想カメラの視体積として表すことができ、仮想カメラの射影行列として表すことができる。なお、射影行列は、仮想カメラから見た仮想オブジェクトを描画する際に用いられる行列であり、仮想カメラ座標系で表された座標をスクリーン座標系で表された座標へと変換する座標変換行列である。なお、視野範囲データ85は、左仮想カメラの視野範囲(射影行列)を示すデータと、右仮想カメラの視野範囲を示すデータとを含む。
【0131】
次に、ゲーム装置10において行われるゲーム処理の詳細を、図16〜図22を用いて説明する。図16は、ゲーム装置10において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置10の電源が投入されると、ゲーム装置10の情報処理部31(CPU311)は、図示しないROMに記憶されている起動プログラムを実行し、これによってメインメモリ32等の各ユニットが初期化される。次に、データ保存用内部メモリ35に記憶されたゲームプログラムがメインメモリ32に読み込まれ、情報処理部31のCPU311によってゲームプログラムの実行が開始される。これによって、図16に示す処理が開始される。
【0132】
なお、図16、図17、および図19に示す処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判断ステップで利用される閾値も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、本実施形態では、図16、図17、および図20に示すフローチャートの各ステップの処理をCPU311が実行するものとして説明するが、図16、図17、および図20に示すフローチャートの一部のステップの処理を、CPU311以外のプロセッサや専用回路が実行するようにしてもよい。
【0133】
ステップS1において、CPU311は、撮像画像が取得されたか否かを判定する。すなわち、外側カメラ23から撮像画像のデータが送られてきたか否かを判定する。なお、本実施形態においては、ステップS1〜S8の処理ループは、1フレーム時間(1/60秒)に1回の割合で実行されるのに対して、外側カメラ23はこの割合で撮像画像を送るものでもよいし、この割合よりも少ない頻度(数フレーム時間に1回程度)で撮像画像を送るものでもよい。ステップS1の判定結果が肯定である場合、ステップS2の処理が実行される。一方、ステップS1の判定結果が否定である場合、ステップS2の処理がスキップされてステップS3の処理が実行される。
【0134】
ステップS2において、CPU311は、撮像画像内のマーカー53を認識する処理を実行する。具体的には、CPU311は、パターンマッチング等の手法によって撮像画像にマーカー53が含まれているか否かを判断する。そして、撮像画像にマーカー53が含まれている場合には、撮像画像内のマーカー53の位置および向き(例えばマーカー53の4つの頂点の位置)に基づいて、マーカー53とカメラ23aまたは23bとの位置関係を算出する。そして、この位置関係に対して、仮想空間においてマーカー53の位置に対応する所定位置と仮想カメラとの位置関係を対応させることで、仮想カメラの位置および姿勢(ビュー行列)を算出する。この場合、仮想カメラの位置および姿勢を示すデータが認識結果データ76としてメインメモリ32に記憶される。一方、撮像画像にマーカー53が含まれていない(マーカー53が認識できない)場合には、認識失敗を表すデータ(例えばヌル値)が認識結果データ76としてメインメモリ32に記憶される。なお、ステップS2においては、左撮像画像および右撮像画像の両方について認識処理が実行され、処理結果を示すデータが取得される。ステップS2の次にステップS3の処理が実行される。
【0135】
なお、本実施形態では、ステップS2の認識処理が1フレーム時間内に実行され、ステップS1〜S8の処理ループ内で実行されるものとした。ここで、認識処理は、1回の認識処理が1フレーム時間で完了することが困難な場合も考えられる。そのため、他の実施形態においては、認識処理は、1フレーム時間を周期として実行される表示処理とは必ずしも同じ周期で実行されなくてもよい。このとき、1回のステップS2の処理では、認識処理全体のうちの一部の処理だけが実行されてもよい。この場合、1回のステップS2で実行される処理は、ステップS1〜S8の一連の処理が1フレーム時間内に完了することができるような処理量に調整される。つまり、認識処理は、ステップS1〜S8(S2を除く)の処理ループとは別に並列的に実行され、CPU311がアイドル状態のときに実行されてもよい。
【0136】
ステップS3において、CPU311は、ゲーム制御処理を実行する。ゲーム制御処理は、ユーザ(プレイヤ)の入力等に応じて仮想空間内のオブジェクトを動作させること等によってゲームを進行させる処理である。具体的には、ゲーム制御処理には、ユーザの入力に従ってプレイヤキャラクタの動作を制御したり、ゲームプログラム71において定められた制御ルールに従ってオブジェクト(図7に示す仮想オブジェクト54)の動作を制御したりする処理が含まれる。本実施形態においては、オブジェクトは、仮想空間における仮想マーカー位置を基準として動作が制御される。すなわち、CPU311は、仮想マーカー位置にオブジェクトを配置したり、仮想マーカー位置の周囲を移動したりする制御を行う。なお、図7では、仮想空間に仮想オブジェクトを1つだけ配置しているが、複数の仮想オブジェクトが配置され、CPU311は、複数の仮想オブジェクトの動作を制御するようにしてもよい。また、本実施形態においては、CPU311は、タッチパネル13、各操作ボタン14A〜14L、およびアナログスティック15に対する操作結果の他、上記認識結果データ76をゲーム入力として用いてもよい。ステップS3の次にステップS4の処理が実行される。
【0137】
ステップS4において、CPU311は視差ゼロ点算出処理を実行する。視差ゼロ点算出処理は、撮像画像に基づいて外側カメラからマーカー53までの距離を算出し、当該距離に応じた視差ゼロ距離(実視差ゼロ距離)を算出する処理である。以下、図17を参照して、視差ゼロ点算出処理の詳細を説明する。
【0138】
図17は、図16に示す視差ゼロ点算出処理(ステップS4)の流れを示すフローチャートである。視差ゼロ点算出処理においては、まずステップS11において、CPU311はステップS2の認識処理が成功したか否かを判定する。ステップS11の判定は、メインメモリ32から読み出される認識結果データ76が仮想カメラの位置および姿勢を示すデータであるか、それとも、認識失敗を示すデータであるかによって行うことができる。ステップS11の判定結果が肯定である場合、ステップS12〜S17の処理が実行される。一方、ステップS11の判定結果が否定である場合、ステップS12〜S17の処理がスキップされ、CPU311は視差ゼロ点算出処理を終了する。なお、他の実施形態において、認識処理が1フレーム時間を周期として実行されない場合には、ステップS11においてはCPU311は認識処理が完了したか否かを判定し、認識処理が完了した場合のみステップS12〜S17の処理を実行するようにしてもよい。
【0139】
ステップS12において、CPU311は、左仮想カメラと右仮想カメラの間隔(仮想カメラ間距離e)を算出する。仮想カメラ間距離eは、認識処理の結果である認識結果データ76に基づいて算出される。以下、図18を参照して、仮想カメラ間距離eの算出方法について説明する。
【0140】
図18は、仮想空間における仮想カメラ間距離を示す図である。図18において、点Pc1が左仮想カメラの位置であり、点Pc2が右仮想カメラの位置であり、点Pmが仮想マーカー位置(現実空間におけるマーカー53の位置に対応する仮想空間内の位置)である。ここで、仮想マーカー位置(点Pm)を原点(0,0,0)として、当該原点に対して左仮想カメラのビュー行列(左ビュー行列)の逆行列を乗算すると、マーカー座標系における左仮想カメラの位置(点Pc1)を得ることができる。同様にして、仮想マーカー位置(点Pm)を原点(0,0,0)として、当該原点に対して右仮想カメラのビュー行列(右ビュー行列)の逆行列を乗算すると、マーカー座標系における右仮想カメラの位置(点Pc2)を得ることができる。これによって、マーカー座標系での左仮想カメラの位置および右仮想カメラの位置が分かることになるため、この間の距離を求めることによって仮想カメラ間距離eを求めることができる(図18)。なお、仮想カメラ間距離を求める方法としては、上記の方法に限らず、例えば、右目用カメラによって撮像されたマーカーの位置と左目用カメラによって撮像されたマーカーの位置との差を、カメラ位置の差と考えることによって仮想カメラ間距離を算出してもよい。
【0141】
ステップS12における具体的な処理としては、CPU311は、認識結果データ76をメインメモリ32から読み出し、認識結果データ76により示される左ビュー行列の逆行列を(0,0,0)に対して乗算した結果と、右ビュー行列の逆行列を(0,0,0)に対して乗算した結果の差を算出する演算を行う。そして、この演算によって得られた座標と原点との間の距離を示すデータを、仮想カメラ間隔データ77としてメインメモリ32に記憶する。ステップS12の次にステップS13の処理が実行される。
【0142】
ステップS13において、CPU311は、仮想カメラから仮想マーカー位置までの距離(仮想マーカー距離d)を算出する。図19は、仮想空間における仮想マーカー距離を示す図である。図19に示すように、仮想マーカー距離dは、仮想カメラからマーカー対応位置までの距離のうち、仮想カメラの視線方向の成分の長さである。したがって、左仮想カメラの視線方向が左仮想カメラのカメラ座標系(図19に示すXYZ座標系)におけるZ軸方向であるとすると、仮想マーカー距離dは、左仮想カメラの位置(点Pc1)を始点とし仮想マーカー位置(点Pm)を終点とするベクトルV1のZ軸成分の値となる。上記ベクトルV1は、原点(0,0,0)に左ビュー行列を乗算することで算出される。
【0143】
ステップS13における具体的な処理としては、CPU311は、認識結果データ76をメインメモリ32から読み出し、認識結果データ76により示される左ビュー行列を(0,0,0)に対して乗算して得られる座標(左仮想カメラの座標系における仮想マーカー位置を示す座標)のZ軸成分の絶対値を算出する。そして、算出された絶対値を示すデータを、仮想マーカー距離データ78としてメインメモリ32に記憶する。なお、本実施形態では、左仮想カメラのビュー行列を用いて仮想マーカー距離dを算出する場合を例として説明したが、他の実施形態においては、CPU311は、右仮想カメラのビュー行列を用いて仮想マーカー距離dを算出してもよい。ステップS13の次にステップS14の処理が実行される。
【0144】
ステップS14において、CPU311は、仮想カメラの位置および姿勢を補正する。ここで、上記認識処理の精度や、各カメラ23aおよび23bの取り付け精度には誤差がある。そのため、認識処理の処理結果として得られる各仮想カメラの位置および姿勢(ビュー行列)をそのまま用いて仮想画像を生成すると、各仮想カメラの位置関係が実際の各カメラ23aおよび23bの位置関係とは異なる結果、仮想画像の立体視表示を正常に行うことができないおそれがある。例えば、各仮想カメラが全く異なる方向を向いてしまうと、仮想画像の立体視表示を正常に行うことができなくなる。以上より、ステップS14においては、CPU311は、認識処理の処理結果として得られるビュー行列に所定の補正を行う。
【0145】
ステップS14の補正処理においては、右仮想カメラが、左仮想カメラから所定方向に上記仮想カメラ間距離eだけ離れた位置で、かつ、左仮想カメラの姿勢と同じ姿勢となるように補正される。なお、上記所定方向は、現実空間における左目用カメラ23aから右目用カメラ23bへの方向に対応する方向であり、例えば仮想カメラ座標系におけるX軸方向である。具体的には、CPU311は、認識結果データ76および仮想カメラ間隔データ77をメインメモリ32から読み出し、認識結果データ76が示す左ビュー行列に対して平行移動行列(−e,0,0)を乗算した行列を右ビュー行列とする(左仮想カメラの座標系の原点にある左仮想カメラを(−e,0,0)に平行移動したものを右仮想カメラとする行列を算出する)。そして、乗算によって得られた右ビュー行列を示すデータと、認識結果データ76が示す左ビュー行列のデータとが、仮想カメラデータ79としてメインメモリ32に記憶される。ステップS14の次にステップS15の処理が実行される。
【0146】
上記ステップS14の処理によれば、2つの仮想カメラは、所定方向に並んで配置され、かつ、視線方向が同じに設定される。これによれば、2つの仮想カメラの位置および姿勢の関係が理想的なものとなるので、正常な立体視表示を行うことができる。なお、上記ステップS14では、CPU311は、左仮想カメラを基準として右仮想カメラの位置および姿勢を補正することとしたが、他の実施形態においては、右仮想カメラを基準として左仮想カメラの位置および姿勢を補正するようにしてもよい。また、他の実施形態では、CPU311は、ステップS14の処理を省略し、認識処理の結果として得られた各仮想カメラの位置および姿勢をそのまま用いて仮想画像を生成してもよい。
【0147】
ステップS15において、CPU311は、現実空間に対する仮想空間の比率(スケール)sを算出する。上述のように、スケールsは、実カメラ間距離Eに対する仮想カメラ間距離eの比(E/e)として算出される。なお、実カメラ間距離Eは、既知であり、メインメモリ32等に記憶されているものとする。CPU311は、実カメラ間距離Eを示すデータと仮想カメラ間隔データ77とをメインメモリ32から読み出し、実カメラ間距離Eに対する仮想カメラ間距離eの比を算出する。算出された比率sを示すデータは、スケールデータ80としてメインメモリ32に記憶される。ステップS15の次にステップS16の処理が実行される。
【0148】
ステップS16において、CPU311は、上記仮想マーカー距離dに基づいて仮想空間における視差ゼロ距離(仮想視差ゼロ距離)を決定する。仮想視差ゼロ距離は、仮想マーカー距離dに応じて決められればよく、例えば、仮想マーカー距離dから所定値を加算または減算した距離であってもよいし、仮想マーカー距離dに所定値を積算した距離であってもよいし、仮想マーカー距離dと等しい距離であってもよい。また、例えば、CPU311は、所定の仮想オブジェクトの位置が視差ゼロ点の位置となるように、仮想視差ゼロ距離を算出するようにしてもよい。すなわち、所定の仮想オブジェクトが仮想マーカー位置から(仮想カメラの奥行き方向に関して)距離Lだけ離れた位置に配置される場合、仮想マーカー距離に当該距離Lを加算した距離を仮想視差ゼロ距離としてもよい。ステップS16において決定された仮想視差ゼロ距離を示すデータは、仮想視差ゼロ距離データ81としてメインメモリ32に記憶される。ステップS16の次にステップS17の処理が実行される。
【0149】
ステップS17において、CPU311は、現実空間における視差ゼロ距離(実視差ゼロ距離)Fを算出する。実視差ゼロ距離Fは、上記仮想視差ゼロ距離fにスケールsを乗算することによって得ることができる。すなわち、CPU311は、スケールデータ80と仮想視差ゼロ距離データ81とをメインメモリ32から読み出し、仮想視差ゼロ距離fにスケールsを乗算した値を算出する。そして、算出された値を示すデータを実視差ゼロ距離データ82としてメインメモリ32に記憶する。これによって、立体視表示における視差ゼロ距離が算出されたこととなる。ステップS17の後、CPU311は視差ゼロ点算出処理を終了する。
【0150】
上記視差ゼロ点算出処理によれば、CPU311は、外側カメラ23からマーカー53までの距離に対応する仮想マーカー距離dを算出し(ステップS13)、仮想マーカー距離dに応じた値となるように実視差ゼロ距離Fを算出する(ステップS16,S17)。したがって、本実施形態によれば、外側カメラ23からマーカー53までの距離Dに応じて実視差ゼロ距離Fが決まるので、立体視表示される画像の視差ゼロ点は、当該距離Dに合わせて自動的に調整される。これによれば、マーカー53の付近に表示される仮想オブジェクトの位置に自動的に視差ゼロ点を合わせることも可能となるので、ユーザにとって仮想オブジェクトを見やすく表示することができる。
【0151】
なお、上記視差ゼロ点算出処理においては、CPU311は、仮想マーカー距離dから仮想視差ゼロ距離fを決定した後、実視差ゼロ距離Fを算出した。ここで、他の実施形態においては、CPU311は、現実空間における外側カメラ23からマーカー53までの距離Dを仮想マーカー距離dから算出した後、距離Dから実視差ゼロ距離Fを算出してもよい。例えば、仮想空間におけるオブジェクトの位置が視差ゼロ点の位置となるように視差ゼロ距離を調整したい場合には、本実施形態のように、仮想マーカー距離dから仮想視差ゼロ距離fを決定する方法が好ましい。一方、マーカー53よりも10cm手前の位置に視差ゼロ点を合わせたい場合のように、現実空間における長さを基準として視差ゼロ距離を決定したい場合には、上記距離Dから実視差ゼロ距離Fを決定する方法が好ましい。すなわち、CPU311は、上記仮想マーカー距離dに上記スケールsを乗算することによって距離Dを算出し、距離Dに所望の調整量(例えば10cm)を減算(または加算)した距離を視差ゼロ距離Fとしてもよい。これによって、マーカー53から現実空間における実際の距離だけ離れた位置を視差ゼロ点とすることができる。いずれの方法によっても、外側カメラ23からマーカー53までの距離に応じて視差ゼロ距離F自動的に調整することができる。
【0152】
また、上記視差ゼロ点算出処理においては、CPU311は、マーカー53の大きさを用いずに実視差ゼロ距離Fを算出したが、他の実施形態においては、マーカー53の大きさを用いる方法によって実視差ゼロ距離Fを算出してもよい。すなわち、マーカー53の大きさが既知である場合には、CPU311は、認識処理において撮像画像内のマーカー53の大きさを特定することによって、カメラ23aまたは23bからマーカー53までの距離Dを算出することができる(ステップS2において、マーカーを認識して仮想カメラの位置および姿勢(ビュー行列)を算出する際に、マーカーの大きさを考慮しておけば、仮想マーカー距離dの値を距離Dの値と一致させることができる)。CPU311は、算出された距離Dに応じて実視差ゼロ距離Fを決定するようにしてもよい。なお、本実施形態では、マーカー53の大きさを用いずに実視差ゼロ距離Fを算出するので、マーカー53として自由なサイズのものを使用することができ、ゲーム装置10における拡張現実感技術の汎用性が高くなるという利点がある。
【0153】
図16の説明に戻り、ステップS4の視差ゼロ点算出処理の次に、ステップS5の処理が実行される。ステップS5においては、CPU311は左画像生成処理を実行する。左画像生成処理は、立体視表示に用いられる左目用画像(左合成画像)を生成する処理である。以下、図20を参照して、左画像生成処理の詳細を説明する。
【0154】
図20は、図16に示す左画像生成処理(ステップS5)の流れを示すフローチャートである。左画像生成処理においては、まずステップS20において、CPU311はステップS2の認識処理が成功したか否かを判定する。ステップS20の処理は上述のステップS11の処理と同じである。ステップS20の判定結果が肯定である場合、ステップS21の処理が実行される。一方、ステップS20の判定結果が否定である場合、ステップS21〜S24の処理がスキップされ、ステップS25の処理が実行される。なお、他の実施形態において、認識処理が1フレーム時間を周期として実行されない場合には、ステップS20においてはCPU311は認識処理が完了したか否かを判定し、認識処理が完了した場合のみステップS21〜S24の処理を実行するようにしてもよい。
【0155】
ステップS21において、CPU311は、撮像画像内における表示領域(枠)のずれ量dxを実視差ゼロ距離Fに基づいて算出する。すなわち、立体視表示における視差ゼロ点の位置が上記実視差ゼロ距離Fの位置となるように、上記ずれ量dxを算出する。以下、図21を参照して、ずれ量dxの算出方法について説明する。
【0156】
図21は、現実空間と撮像画像の平面との対応を示す図である。図21において、点P1〜点P8は現実空間における位置を表し、点P9および点P10は撮像画像の平面における位置を表す。点P1は左目用カメラ23aの位置を表し、点P2は右目用カメラ23bの位置を表す。点P3は2つの左目用カメラ23aおよび23bの中点である。したがって、線分P1−P3の長さは、実カメラ間距離(E)の1/2(E/2)となる。また、点P4は立体視表示における視差ゼロ点の位置であり、左目用カメラ23aの撮像方向に点P3から上記実視差ゼロ距離Fだけ離れた位置である。直線L1およびL2は、左目用カメラ23aの撮像範囲(視野範囲)を表している。
【0157】
また、図21において、左目用カメラ23aから撮像方向に任意の距離αだけ離れた位置に平面Q1を設定する。点P5は、点P1から撮像方向へ延ばした直線と平面Q1との交点である。点P6は上記直線L1と平面Q1との交点であり、点P7は上記直線L2と平面Q1との交点である。上記のように平面Q1を設定する場合、平面Q1における線分P6−P7の範囲が、左撮像画像55における横幅(512ドット)に対応する。また、平面Q1上における点P5の位置が、左撮像画像55の中心位置に対応する。
【0158】
ここで、立体視表示における視差ゼロ点の位置が距離Fの位置となるように枠62を設定するには、「視差ゼロ距離の位置にある点が(左目用画像と右目用画像とで)同じ位置に表示される」という条件を満たすように、左右の表示領域を設定すればよい。なお、視差ゼロ距離の位置にある点とは、例えば点P4である。つまり、上記条件を満たすためには、点P4が同じ位置に表示されるように各表示領域を設定すればよい。このためには、図21に示すように、枠62の中心位置(点P10)が平面Q1上における点P8に対応すればよい。ここで、点P8は、左目用カメラ23a(点P1)から視差ゼロ点の位置(点P4)への直線と平面Q1との交点である。以上より、図21に示す対応関係を満たすようなずれ量dxを算出すれば、上記条件を満たし、立体視表示における視差ゼロ点の位置が距離Fの位置とすることができる。
【0159】
図21において、左撮像画像55の横幅の半分の長さ“256”に対するずれ量dxの比(dx:256)と、平面Q1における線分P5−P6の長さβに対する線分P5−P7の長さγの比(γ:β)とは、等しくなる。したがって、ずれ量dxは式(1)として表すことができる。
dx=γ×256/β …(1)
また、図21において、線分P1−P5の長さαに対する線分P5−P7の長さγの比(γ:α)は、線分P3−P4の長さFに対する線分P1−P3の長さ“E/2”の比(E/2:F)に等しくなる。したがって、長さγは式(2)として表すことができる。
γ=α×(E/2)/F …(2)
上式(1)、(2)より、dxは、式(3)として表すことができる。
dx=(α/β)×(E/2)×(1/F)×256 …(3)
上式(3)において、上述のように実カメラ間距離Eの値は既知であり、メインメモリ32等に記憶されている。また、“α/β”の値は、左目用カメラ23aの画角から求めることができ、既知である。この値もメインメモリ32等に記憶されているものとする。また、変数Fは、上記視差ゼロ点算出処理において実視差ゼロ距離Fとして算出されている。したがって、上式(3)を用いて、ずれ量dxを算出することができる。
【0160】
ステップS21における具体的な処理としては、CPU311は、実視差ゼロ距離データ82をメインメモリ32から読み出すとともに、上記実カメラ間距離Eおよび“α/β”を示すデータをメインメモリ32から読み出す。そして、読み出した値を上式(3)に代入することによってずれ量dxを算出する。算出されたずれ量dxを示すデータは、ずれ量データ83としてメインメモリ32に記憶される。ステップS21の次にステップS22の処理が実行される。
【0161】
なお、本実施形態においては、実視差ゼロ距離Fからずれ量dxを算出するようにしたが、仮想視差ゼロ距離fからずれ量dxを算出することも可能である。具体的には、上式(3)において、実カメラ間距離Eに代えて仮想カメラ間距離eを用い、実視差ゼロ距離Fに代えて仮想視差ゼロ距離fを用いることで、ずれ量dxを算出することができる。したがって、他の実施形態においては、CPU311は、実視差距離Fを算出せずに、仮想視差ゼロ距離fのみを算出してずれ量dxを算出するようにしてもよい。
【0162】
ステップS22において、CPU311は、ずれ量データ83をメインメモリ32から読み出し、ずれ量dxが所定値Aよりも大きいか否かを判定する。ここで、ステップS22の判定処理は、枠62が左撮像画像55からはみ出しているか否かを判定するための処理である。したがって、上記所定値Aは、左撮像画像55の横の長さの1/2(=256)から基準枠61の横の長さの1/2(=200)を減算した値(=56)となる。ステップS22の判定結果が肯定である場合、ステップS23の処理が実行される。一方、ステップS22の判定結果が否定である場合、ステップS24の処理が実行される。
【0163】
ステップS23において、CPU311は左右の各撮像画像について枠の大きさを縮小する。このとき、枠は、撮像画像の外へはみ出さないように大きさが縮小される。さらに、本実施形態では、撮像画像の外へはみ出さない範囲で枠をできるだけ大きくするべく、CPU311は次のように枠を縮小する。すなわち、CPU311は、枠のはみ出した頂点が撮像画像の周の位置となるように、かつ、中心位置を変化させずに枠を小さくする。より具体的には、枠の左右方向の大きさは、ずれ量dxから上記所定値Aを減算した値の2倍“2×(dx−A)”だけ小さくなる。また、枠の上下方向の大きさは、枠のアスペクト比が維持されるように小さくなる。CPU311は、縮小後の枠の大きさを示すデータを表示サイズデータ84としてメインメモリ32に記憶する。ステップS23の次にステップS25の処理が実行される。
【0164】
一方、ステップS24において、CPU311は、枠の大きさを予め定められた基準値に設定する。基準値とは、上述の基準枠61(図12参照)の大きさであり、本実施形態では、240×400ドット(縦×横)の大きさである。つまり、ステップS24では、枠の大きさは変化しない。CPU311は、上記基準値の大きさを示すデータを表示サイズデータ84としてメインメモリ32に記憶する。ステップS24の次にステップS25の処理が実行される。
【0165】
上記ステップS21〜S24の一連の処理によって、撮像画像における表示領域が決定される。すなわち、立体視表示における視差ゼロ点の位置が実視差ゼロ距離Fとなるように枠の位置(ずれ量dx)が決定され(ステップS21)、枠が撮像画像からはみ出る場合(ステップS22でYesとなる場合)には、枠が縮小される(ステップS23)。また、枠が撮像画像からはみ出ない場合には、枠は基準値の大きさに維持される(ステップS24)。以上の一連の処理によって、枠の位置および大きさが決定されるので、表示領域が決定されたこととなる。
【0166】
ステップS25において、CPU311は、上記ステップS21〜S24の処理によって決定された表示領域内の撮像画像を、VRAM313内の所定の記憶領域である左フレームバッファに描画する。ステップS25の次にステップS26の処理が実行される。
【0167】
ステップS26において、CPU311は、ステップS2の認識処理が成功したか否かを判定する。ステップS26の処理は上述のステップS11の処理と同じである。ステップS26の判定結果が肯定である場合、ステップS27およびS28の処理が実行される。一方、ステップS26の判定結果が否定である場合、ステップS27およびS28の処理がスキップされ、CPU311は左画像生成処理を終了する。なお、他の実施形態において、認識処理が1フレーム時間を周期として実行されない場合には、ステップS26においてはCPU311は認識処理が完了したか否かを判定し、認識処理が完了した場合のみステップS27およびS28の処理を実行するようにしてもよい。あるいは、認識処理が完了した場合には、前回の処理ループで用いられた仮想カメラの設定(位置、姿勢、視野範囲)を用いてステップS27およびS28の処理が実行されてもよい。
【0168】
ステップS27において、CPU311は、撮像画像の表示領域に応じて左仮想カメラの視野範囲(射影行列)を算出する。視野範囲は、表示領域内の撮像画像が表す現実空間に対応する仮想空間を範囲とするように算出される。これによって、撮像画像の表示範囲に対応する仮想画像を生成することができ、撮像画像上における適切な位置に仮想オブジェクトが表示された合成画像を得ることができる。以下、図22を参照して仮想カメラの視野範囲の算出方法について説明する。
【0169】
図22は、撮像画像の平面と仮想空間との対応を示す図である。図22において、点R1〜点R9は仮想空間における位置を表し、点R11〜点R14は撮像画像の平面における位置を表す。点R1は仮想空間における左仮想カメラの位置を表し、直線L3およびL4は、左仮想カメラに対応する左目用カメラ23aの撮像範囲(視野範囲)を表している。ここでは、直線L3およびL4が表す左仮想カメラの視野範囲を、「全視野範囲」と呼ぶ。また、平面S1は左仮想カメラのニアクリップ面であり、平面S2は左仮想カメラのファークリップ面である。左仮想カメラの位置(点R1)からニアクリップ面までの距離、および、左仮想カメラの位置からファークリップ面までの距離は、予め定められている。
【0170】
また、撮像画像の平面とニアクリップ面との対応を考えると、図22に示すように、左撮像画像55の左端の点R11が、ニアクリップ面S1と直線L4との交点R2に対応する。また、左撮像画像55の右端の点R14が、ニアクリップ面S1と直線L3との交点R5に対応する。
【0171】
ここで、表示領域に対応する仮想空間を範囲とするように視野範囲を設定するには、左撮像画像55の領域全体に対する表示領域63の(左右方向に関する)位置関係と、上記全範囲に対する左仮想カメラの視野範囲の位置関係とを対応させればよい。すなわち、ニアクリップ面においては、図22に示すように、点R2〜点R5の位置関係を、撮像画像における点R11〜点R14の位置関係と対応させればよい。より具体的には、線分R2−R3の長さb1と、線分R3−R4の長さb2と、線分R4−R5の長さb3との比(b1:b2:b3)が、線分R11−R12の長さa1と、線分R12−R13の長さa2と、線分R13−R14の長さa3との比(a1:a2:a3)と等しくなるように、点R3および点R4を設定すればよい。ここで、“a1:a2:a3”は、上記ステップS21〜S24で表示領域63が決定されているので、既知である。また、点R2および点R5の位置は、左仮想カメラの位置および姿勢(ビュー行列)と、左目用カメラ23aの画角(既知である)とから算出することができる。したがって、CPU311は、a1:a2:a3=b1:b2:b3となる点R3および点R4を算出することができる。
【0172】
また、ファークリップ面においてもニアクリップ面と同様にして点R7および点R8の位置を算出することができる。すなわち、CPU311は、線分R6−R7の長さc1と、線分R7−R8の長さc2と、線分R8−R9の長さc3との比(c1:c2:c3)が、“a1:a2:a3”と等しくなるような点R7および点R8を算出することができる。
【0173】
以上のように決定される点R3、点R4、点R7および点R8によって、仮想カメラの左右方向に関する視野範囲を決めることができる。すなわち、CPU311は、ニアクリップ面における点R3から点R4の範囲、および、ファークリップ面における点R7から点R8の範囲を左右方向に関する視野範囲とするように左仮想カメラの射影行列を算出する。換言すれば、仮想カメラの左右方向に関する視野範囲は、点R1、点R4、および点R8を通る直線L5と、点R1、点R3、および点R7を通る直線L6とによって表される範囲となる。なお、上下方向に関する視野範囲は、左仮想カメラの視野範囲のアスペクト比が表示領域63のアスペクト比と一致するように決定される。
【0174】
ステップS27における具体的な処理としては、CPU311は、まず、ずれ量データ83と表示サイズデータ84をメインメモリ32から読み出して、表示領域のずれ量dxと枠の大きさとを用いて、左撮像画像内における表示領域の右端と左端の位置を算出する。そして、右端と左端の位置から上記長さa1、a2、およびa3を算出する。次に、CPU311は、仮想カメラデータ79をメインメモリ32から読み出して、左仮想カメラの位置および姿勢と、既知の左目用カメラ23aの画角とを用いて、ニアクリップ面における点R2および点R5の位置を算出する。さらに、線分R2−R5を、“a1:a2:a3”に分ける点R3および点R4を算出し、点R3および点R4を左右方向の視野範囲とする射影行列を算出する。以上によって、表示領域63に対応する左仮想カメラの射影行列を算出することができる。最後に、CPU311は、算出された射影行列を示すデータを視野範囲データ85としてメインメモリ32に記憶する。以上のステップS27の次にステップS28の処理が実行される。
【0175】
なお、上記ステップS27の処理においては、仮想カメラの視野範囲を算出するために、CPU311は当該視野範囲の左右端の位置(点R3および点R4)を、点R2〜点R5の位置関係(比)に基づいて算出した。ここで、仮想カメラの視野範囲の具体的な算出方法は上記に限らず、点R3および点R4の位置を算出できればどのような方法であってもよい。例えば、他の実施形態においては、CPU311は視野範囲の基準位置からのずれ量を算出するようにしてもよい。具体的にはまず、CPU311はニアクリップ面における基準の視野範囲を設定する。基準の視野範囲は、左仮想カメラの位置からその撮影方向に向かって、正面向きの(撮影方向に均等に画角が設定された)視野範囲であり、上述の基準枠61に対応する仮想カメラの視野範囲である。また、ニアクリップ面における上述の全範囲視野に対する基準の視野範囲の大きさの比は、撮像画像55の領域全体に対する表示領域63の比と等しいので、この関係から基準の視野範囲の大きさを算出することができる。
【0176】
ここで、基準の視野範囲から算出すべき視野範囲までのずれ量をΔxとした場合、ずれ量Δxは、表示領域のずれ量dxに比例する。また、ニアクリップ面における全範囲視野の幅(点R2−点R5の長さ)に対する視野範囲のずれ量Δxの比は、撮像画像55の幅(点R11−点R14の長さ)に対する表示領域のずれ量dxの比に等しくなる。したがって、CPU311は、上記比の関係から視野範囲のずれ量Δxを算出する。そして、基準の視野範囲の左辺および右辺を、算出されたずれ量Δxだけ移動させることで、算出すべき視野範囲が得られる。なお、基準の視野範囲の上辺および下辺の位置はそのままである。これによって、視体積のニアクリップ面における4辺が求まり、周知の方法により視体積のファークリップ面の4辺も求めることができる。以上より、CPU311は、上記視野範囲のずれ量Δxを算出することによって、視野範囲(点R3および点R4)を特定するようにしてもよい。
【0177】
ステップS28において、CPU311は、上記ステップS14およびS27で設定された左仮想カメラの位置、姿勢、および視野範囲に基づいて、左仮想カメラから見た仮想オブジェクトの画像を生成する。すなわち、CPU311は、仮想カメラデータ79および視野範囲データ85をメインメモリ32から読み出し、左仮想カメラのビュー行列と射影行列を用いて仮想オブジェクトの画像データを生成する。なお、仮想空間には背景となるオブジェクトが配置されず、仮想画像は背景が透明である。さらに、CPU311は、生成された仮想オブジェクトの画像をVRAM313内の上記左フレームバッファに描画する。これによって、ステップS25で左フレームバッファに描画された左撮像画像に左仮想画像が合成される。なお、仮想画像は背景が透明であるので、合成画像は、左撮像画像に仮想オブジェクトの画像が重ねられたものとなる。また、上記ステップS3で述べたように、仮想オブジェクトは、仮想マーカー位置を基準として配置されるので、合成画像においては、マーカー53の位置やその周辺に仮想オブジェクトが表示されることとなる。ステップS28の後、CPU311は左画像生成処理を終了する。
【0178】
図16の説明に戻り、ステップS5の左画像生成処理の次に、ステップS6の処理が実行される。ステップS6においては、CPU311は右画像生成処理を実行する。右画像生成処理は、立体視表示に用いられる右目用画像(右合成画像)を生成する処理である。
【0179】
右画像生成処理においても基本的には左画像生成処理と同様に合成画像が生成される。ただし、本実施形態においては、左撮像画像と右撮像画像とで枠のずれ量は同じであり、枠の大きさも同じに設定される。したがって、上記ステップS21〜S24の一連の処理は、右画像生成処理においては実行されなくてもよい。すなわち、右画像生成処理においては、上記ステップS21で算出されたずれ量dxに代えてずれ量を“−dx”(ずれる方向がdxとは逆になる)とし、枠の大きさはステップS23またはS24で設定される大きさを用いて、表示領域を決定するようにしてもよい。このとき、右撮像画像の表示領域は、右撮像画像の中心からずれ量dxだけ左側の位置で、左撮像画像の表示領域と同じ大きさとなる。なお、右撮像画像についても左撮像画像と同様、実視差ゼロ距離Fの位置にある点が表示領域の中心に位置することになる。
【0180】
表示領域が決定されると、右画像生成処理においても左画像生成処理と同様、CPU311は、表示領域内の右撮像画像を、VRAM313内の所定の記憶領域である右フレームバッファに描画する。
【0181】
さらに、右画像生成処理においても左画像生成処理のステップS26〜S28と同様の処理が実行される。すなわち、CPU311は、表示領域に対応する右仮想カメラの視野範囲を算出する処理を実行する。なお、右撮像画像についても図22に示す方法と同様の方法で右仮想カメラの視野範囲を算出することができる。さらに、CPU311は、設定された右仮想カメラの位置、姿勢、および視野範囲に基づいて、右仮想カメラから見た仮想オブジェクトの画像を生成し、仮想オブジェクトの画像をVRAM313内の上記右フレームバッファに描画する。これによって、右フレームバッファに描画された左撮像画像に左仮想画像が合成される。以上のステップS6の次にステップS7の処理が実行される。
【0182】
ステップS7において、CPU311は、左右の合成画像を上側LCD22に表示させる。すなわち、VRAM313内の左フレームバッファに描画された左合成画像と、右フレームバッファに描画された右合成画像とが上側LCD22の縦1ライン毎に交互に配置されて表示される。これによって、左右の合成画像を用いた立体視表示が行われる。ステップS7の次にステップS8の処理が実行される。
【0183】
ステップS8において、CPU311は、上側LCD22からの割り込み信号(垂直同期割り込み)を待機し、当該割り込み信号が発生した場合には、ステップS1の処理が再度実行される。これにより、ステップS1〜S8の処理が一定の周期(1フレーム時間(1/60秒)の周期)で繰り返される。なお、ステップS1〜S8の一連のゲーム処理は、例えば、ゲームがクリアされた場合や、ゲームオーバーとなった場合や、プレイヤがゲームを中止する指示を行った場合等に終了される。
【0184】
以上のように、上記ゲーム処理によれば、外側カメラ23からマーカー53までの距離Dに対応する仮想マーカー距離dが算出され(ステップS13)、仮想マーカー距離dに応じて視差ゼロ距離Fが決定される(ステップS16,S17)。そして、立体視表示における視差ゼロ点の位置がこの視差ゼロ距離Fとなるように視差が調整される(ステップS21)。したがって、上記ゲーム処理によれば、マーカー53までの距離Dに応じた視差ゼロ距離となるように自動的に視差が調整される。これによれば、ゲーム装置10は、例えばマーカー53の位置に視差ゼロ点が自動的に設定されるようにしたり、マーカー53の周囲に表示される仮想オブジェクト54の位置に視差ゼロ点が自動的に設定されるようにすることができる。そのため、本実施形態によれば、拡張現実感技術を用いて生成される合成画像について立体視表示を行う場合において、仮想オブジェクトの画像を見やすく表示することができる。
【0185】
[変形例]
(視差ゼロ距離を算出しない変形例)
上記実施形態においては、ゲーム装置10は、外側カメラ23からマーカー53までの距離Dに応じた視差ゼロ距離Fを実際に算出し(ステップS17)、立体視表示における視差ゼロ点の位置が視差ゼロ距離Fとなるように、視差を調整(表示領域を決定)した。ここで、他の実施形態においては、視差ゼロ距離Fを算出しない方法で、上記距離Dに応じた視差ゼロ距離となるように自動的に視差が調整されるようにしてもよい。具体的には、ゲーム装置10は、各撮像画像に含まれるマーカー53を認識した場合、左右の撮像画像に含まれるマーカー53の画像についてマッチングを行い、左右の撮像画像でマーカー53の位置が一致するように、表示領域を決定してもよい。あるいは、左右の撮像画像でマーカー53の位置が一致する位置から所定量だけ表示領域をずらすことで、マーカー53までの距離から視差ゼロ距離をずらすようにしてもよい。以上の方法によって、マーカー53の視差がゼロになるように調整することができるので、上記実施形態と同様、立体視表示における視差ゼロ距離を上記距離Dに応じた距離とすることができる。ただし、上記の方法では、上記距離Dおよび視差ゼロ距離Fを実際には算出しないので、例えば「マーカー53までの距離Dから所定距離だけ手前の位置を視差ゼロ点にする」というように、視差ゼロ距離を精度良く設定することは難しい。例えば、マーカー53から所定距離だけ離れた位置に表示される仮想オブジェクトに視差ゼロ点が設定されるように視差を調整することは、上記の方法では難しい。これに対して、上記実施形態では、距離Dに対応する距離(仮想マーカー距離d)を実際に算出して視差ゼロ距離Fを実際に算出するので、視差ゼロ距離を精度良く調整することが可能である。したがって、例えば仮想オブジェクトの位置に視差ゼロ点を設定する場合には、上記実施形態のように視差ゼロ距離を算出する方法が有効である。
【0186】
(表示領域の決定処理と合成画像の生成処理の順序に関する変形例)
上記実施形態では、ゲーム装置10は、撮像画像の表示領域を決定した(ステップS21〜S24)後、表示領域内の撮像画像に対応する仮想画像を生成して撮像画像と仮想画像とを合成した(ステップS28)。ここで、他の実施形態では、表示領域の決定処理と合成画像の生成処理との順序が上記実施形態とは逆になる手順で、上側LCD22に表示すべき画像が生成されてもよい。具体的には、ゲーム装置10は、まず、撮像画像の全領域に対応する仮想画像を各撮像画像について生成し、生成した仮想画像と撮像画像の全領域とを合成して、撮像画像の全領域に対応する合成画像を生成する。次に、ゲーム装置10は、上記ステップS21〜S24と同様の方法で合成画像について表示領域を決定する。これによっても、上記実施形態と同様、立体視表示における視差ゼロ距離を、外側カメラ23からマーカー53までの距離Dに応じた距離とすることができる。なお、上記の手順によれば、仮想画像を生成するための仮想カメラの視野範囲を、外側カメラ23の視野範囲に対応する範囲とすればよいので、仮想カメラの視野範囲を容易に算出することができる。ただし、仮想画像および合成画像を生成する領域が広くなり、実際には表示されない部分にまで合成画像を生成する必要がある。
【0187】
なお、上記の手順を採用する場合においても、ゲーム装置10は、視差ゼロ距離を算出しない方法を用いることができる。すなわち、ゲーム装置10は、撮像画像の全領域に対応する合成画像を生成した後、左右の合成画像についてマッチングを行い、合成画像に含まれる仮想オブジェクトの位置が左右の合成画像で一致するように、表示領域を決定してもよい。
【0188】
(表示領域に関する変形例)
上記実施形態では、立体視表示における視差ゼロ距離を調整するべく左右の撮像画像の表示位置を決定するために、ゲーム装置10は各撮像画像について表示領域を設定した。ここで、他の実施形態においては、ゲーム装置10は、各撮像画像の全体を上側LCD22に表示するようにしてもよい。例えば図10を用いて説明すると、他の実施形態においては、ゲーム装置10は、左撮像画像55および右撮像画像56の全体を視差ゼロ距離に応じてずらして上側LCD22に表示してもよい。このとき、上側LCD22の画面領域には、左撮像画像55のみが表示される領域と右撮像画像56のみが表示される領域とが生じるので、立体的に見えない部分が生じて上記実施形態に比べると若干見にくい画像となる。ただし、この場合でも、外側カメラ23からマーカー53までの距離Dに応じ視差ゼロ距離となるように自動的に視差が調整されるので、上記実施形態と同様の効果を得ることができる。
【0189】
また、上記実施形態においては、ゲーム装置10は、視差ゼロ距離が短くなった場合により見やすい立体視表示を行うべく、表示領域を縮小する処理(ステップS23)を実行した。ここで、他の実施形態においては、表示領域を縮小する処理は必ずしも実行されなくてもよい。
【0190】
(ズーム処理に関する変形例)
なお、他の実施形態においては、ゲーム装置10は、外側カメラ23で撮像された撮像画像に対して、キャリブレーションによる補正処理を行うようにしてもよい。ここで、外側カメラ23の各カメラ23aおよび23bには取り付け誤差が生じる場合があり、この場合、取り付け誤差によって撮像画像は理想的な画像(理想的な位置および姿勢で取り付けられた各カメラ23aおよび23bによって撮像される画像)からずれてしまう。そのため、ゲーム装置10(またはゲームプログラム)の作成者は、理想的な画像に対する撮像画像のずれを予め測定しておき、撮像画像のずれを相殺する補正をゲーム装置10に行わせるようにしてもよい。
【0191】
ここで、上記の補正処理が行われる場合には、表示領域を縮小する処理(ステップS23)を実行するか否かの判定処理は、次のように行われることが好ましい。図23は、補正処理が行われた撮像画像と表示領域との関係を示す図である。図23においては、補正処理によって左撮像画像55は所定角度だけ回転され、かつ、所定長さ(撮像画像の中心点Cから表示領域の中心点C’までの長さ)だけ平行移動されているものとする。また、基準枠61の右側の2つの頂点から左撮像画像55の右辺までの距離をA2,A3とする。上記補正処理が行われる場合には、上記所定値A、距離A2、および距離A3のうちの最も短いもの(図23ではA3)よりもずれ量dxが大きくなると、枠(表示領域)が左撮像画像55からはみ出す。そのため、上記の場合、ステップS22の判定処理では、CPU311は、上述の所定値A、距離A2、および距離A3の中で最も短くなる値を用いて判定を行うことが好ましい。これによれば、ゲーム装置10は、枠が撮像画像からはみ出したか否かの判定をより正確に行うことができる。
【0192】
(その他の変形例)
また、上記実施形態では、ゲーム装置10は、外側カメラ23によってリアルタイムに取得される撮像画像を用いて上側LCD22に立体画像を表示した。ここで、他の実施形態においては、ゲーム装置10は、外側カメラ23や外部のステレオカメラ等によって過去に撮像された画像データを用いて上側LCD22に立体画像を表示するようにしてもよい。また、上記実施形態では、外側カメラ23がゲーム装置10に予め搭載されているが、他の実施形態では、ゲーム装置10に着脱可能な外付け型のカメラが外側カメラ23に代えて利用されてもよい。
【0193】
また、上記実施形態では、上側LCD22がゲーム装置10に予め搭載されているが、他の実施形態では、ゲーム装置10に着脱可能な外付け型の立体視ディスプレイが上側LCD22に代えて利用されてもよい。
【0194】
また、上記実施形態では、上側LCD22がパララックスバリア方式の立体表示装置であるが、他の実施形態では、上側LCD22がレンチキュラー方式等の他の任意の方式の立体表示装置であってもよい。例えば、レンチキュラー方式の立体表示装置を利用する場合には、左目用画像と右目用画像をCPU311または他のプロセッサで合成してから、合成された画像をレンチキュラー方式の立体表示装置に供給するようにしてもよい。
【0195】
また、上記実施形態では、ゲーム装置10を用いたゲーム処理中において立体画像表示処理を実行しているが、他の実施形態では、任意の情報処理装置または情報処理システム(例えば、PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ等)によって立体画像表示処理を実行してもよい。
【0196】
また、上記実施形態では、一台の情報処理装置(ゲーム装置10)のみによってゲーム処理(立体画像表示処理)を実行しているが、他の実施形態では、互いに通信可能な複数の情報処理装置を有する立体画像表示システムにおいて、当該複数の情報処理装置が立体画像表示処理を分担して実行するようにしてもよい。
【産業上の利用可能性】
【0197】
以上のように、本発明は、拡張現実感技術を用いて生成される画像を立体的に表示する場合において、仮想画像を見やすく表示すること等を目的として、例えばゲームプログラムやゲーム装置として利用することが可能である。
【符号の説明】
【0198】
10 ゲーム装置
11 下側ハウジング
12 下側LCD
13 タッチパネル
14 操作ボタン
15 アナログスティック
16 LED
21 上側ハウジング
22 上側LCD
23 外側カメラ
23a 左目用カメラ
23b 右目用カメラ
24 内側カメラ
25 3D調整スイッチ
26 3Dインジケータ
28 タッチペン
31 情報処理部
311 CPU
312 GPU
32 メインメモリ
53 マーカー
54 仮想オブジェクト
55 左撮像画像
56 右撮像画像
57,58 表示領域
59 左合成画像
60 右合成画像
61 基準枠
62,63 枠
71 ゲームプログラム
72 撮像画像データ



【特許請求の範囲】
【請求項1】
2つの画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる情報処理装置のコンピュータにおいて実行される立体画像表示プログラムであって、
所定の撮像対象を2つの撮像装置によってそれぞれ撮像した2つの撮像画像を取得する画像取得手段と、
前記2つの撮像画像に基づいて、前記所定の撮像対象と、各前記撮像装置とのそれぞれの位置関係を算出する位置関係算出手段と、
立体視表示において前記立体視表示装置の画面の位置に存在するように見える、仮想空間における点の仮想カメラから撮像方向への距離、または、現実空間における点の前記撮像部から撮像方向への距離である視差ゼロ距離を、前記撮像装置から前記撮像対象までの距離に応じた距離となるように、前記位置関係の少なくとも一方を用いて決定する距離決定手段と、
前記視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面の位置に存在するように見えるように、前記立体視表示装置に表示すべき前記2つの撮像画像の表示位置を決定する表示位置決定手段と、
仮想空間内のオブジェクトを表す仮想画像を生成するための仮想カメラを、仮想画像が表す仮想空間の範囲と撮像画像が表す現実空間の範囲とが一致するように各前記位置関係を用いて2つ設定し、設定された2つ仮想カメラに基づいて2つの仮想画像を生成する画像生成手段と、
前記撮像画像に対して前記仮想画像を合成した合成画像を生成する処理を各撮像画像について実行し、当該合成画像を前記立体視表示装置に表示させる表示制御手段として前記コンピュータを機能させる、立体画像表示プログラム。
【請求項2】
前記距離決定手段は、前記撮像装置から前記所定の撮像対象までの距離、または、当該距離から所定距離だけ離れた点までの距離を、視差ゼロ距離として決定する、請求項1に記載の立体画像表示プログラム。
【請求項3】
前記距離決定手段は、前記撮像装置から前記所定の撮像対象までの距離が増加した場合に視差ゼロ距離を増加させ、前記撮像装置から前記所定の撮像対象までの距離が減少した場合に視差ゼロ距離を減少させる、請求項1に記載の立体画像表示プログラム。
【請求項4】
前記表示位置決定手段は、前記2つの撮像画像のうちで表示すべき表示領域をそれぞれ決定することによって、前記2つの撮像画像の表示位置を決定し、
前記画像生成手段は、仮想画像が表す仮想空間の範囲と前記表示領域内の撮像画像が表す現実空間の範囲とが一致するように2つの仮想カメラを設定し、
前記画像生成手段は、前記表示領域内の撮像画像に対して前記仮想画像を合成する、請求項1から請求項3のいずれか1項に記載の立体画像表示プログラム。
【請求項5】
前記画像生成手段は、
前記仮想空間内のオブジェクトが配置される仮想空間における2つの仮想カメラの位置および姿勢を各前記位置関係に基づいてそれぞれ算出するカメラ位置算出手段と、
前記表示領域内の現実空間に対応する仮想空間を範囲とするように各前記仮想カメラの視野範囲をそれぞれ算出するカメラ視野算出手段と、
前記各仮想カメラの位置、姿勢、および視野に基づいて、各撮像画像に合成すべき仮想画像をそれぞれ生成する仮想画像生成手段とを有する、請求項4に記載の立体画像表示プログラム。
【請求項6】
前記カメラ視野算出手段は、撮像画像の領域に対する前記表示領域の位置関係と、前記撮像装置の視野範囲に対応する仮想カメラの視野範囲に対する、算出すべき視野範囲の位置関係とが対応するように、仮想カメラの視野範囲を算出する、請求項5に記載の立体画像表示プログラム。
【請求項7】
前記表示位置決定手段は、
各撮像画像の前記表示領域について、立体視表示における視差ゼロ距離が前記撮像装置から前記撮像対象までの距離に応じた距離となるように、基準位置からのずれ量を算出するずれ量算出手段と、
少なくとも一方の表示領域について、前記ずれ量だけ移動させた表示領域が撮像画像の外へはみ出す場合、撮像画像の外へ表示領域がはみ出さないように各表示領域の大きさを変更する領域サイズ変更手段とを有し、
前記画像生成手段は、2つの撮像画像における各表示領域内の画像に対して前記仮想画像を合成する、請求項4から請求項6のいずれか1項に記載の立体画像表示プログラム。
【請求項8】
前記表示位置決定手段は、前記視差ゼロ距離の位置にあり、かつ、2つの撮像装置から等距離にある点が各表示領域内の左右方向に関して中心となるように、前記2つの画像の表示領域を決定する、請求項4から請求項6のいずれか1項に記載の立体画像表示プログラム。
【請求項9】
前記画像取得手段は、前記2つの撮像装置から撮像画像を逐次取得し、
前記位置関係算出手段は、逐次取得される撮像画像のうちの所定の撮像画像について、前記位置関係を逐次算出し、
前記距離決定手段は、位置関係が算出される度に視差ゼロ距離を逐次決定し、
前記表示位置決定手段は、視差ゼロ距離が決定される度に表示位置を逐次決定し、
前記画像生成手段は、前記所定の撮像画像に対して前記仮想画像を合成する処理を逐次実行し、
前記表示制御手段は、前記画像生成手段によって生成された合成画像を前記立体視表示装置に逐次表示させる、請求項1から請求項8のいずれか1項に記載の立体画像表示プログラム。
【請求項10】
前記距離決定手段は、前記位置関係算出手段によって算出される各位置関係のうち少なくとも一方に基づいて、前記撮像装置から前記撮像対象までの距離に対応する長さを算出し、
前記表示位置決定手段は、前記距離決定手段によって算出された長さによって決められる視差ゼロ距離に基づいて前記2つの画像の表示位置を決定する、請求項1から請求項9のいずれか1項に記載の立体画像表示プログラム。
【請求項11】
前記表示位置決定手段は、前記視差ゼロ距離の位置にある点が同じ位置に表示されるように前記2つの画像の表示位置を決定する、請求項1から請求項10のいずれか1項に記載の立体画像表示プログラム。
【請求項12】
前記表示位置決定手段は、前記視差ゼロ距離の位置にあり、かつ、2つの撮像装置から等距離にある点が表示領域内の中心となるように、各撮像画像上において表示領域を決定し、
前記画像生成手段は、前記表示領域内の撮像画像に対して仮想画像を合成した合成画像を生成する処理を各撮像画像について実行する、請求項11に記載の立体画像表示プログラム。
【請求項13】
前記表示位置決定手段は、撮像画像の横幅の半分の長さに対する、撮像画像の中心からの表示領域のずれ量の割合が所定の割合となるようにずれ量を算出することによって、表示領域を決定し、
前記所定の割合は、前記視差ゼロ距離の位置にあり、かつ、2つの撮像装置から等距離にある点を視差ゼロ点とし、撮像装置の視線方向と垂直に交わる所定の平面を設定した場合において、撮像装置の撮像範囲の境界線と前記所定の平面との交点から、撮像装置の位置を前記所定の平面に投影した投影点までの長さに対する、撮像装置の位置と前記視差ゼロ点とを結ぶ線分と前記所定の平面との交点から前記投影点まで長さの割合である、請求項12に記載の立体画像表示プログラム。
【請求項14】
2つの画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる立体画像表示装置であって、
所定の撮像対象を2つの撮像装置によってそれぞれ撮像した2つの撮像画像を取得する画像取得手段と、
前記2つの撮像画像に基づいて、前記所定の撮像対象と、各前記撮像装置とのそれぞれの位置関係を算出する位置関係算出手段と、
立体視表示において前記立体視表示装置の画面の位置に存在するように見える、仮想空間における点の仮想カメラから撮像方向への距離、または、現実空間における点の前記撮像装置から撮像方向への距離である視差ゼロ距離を、前記撮像装置から前記撮像対象までの距離に応じた距離となるように、前記位置関係の少なくとも一方を用いて決定する距離決定手段と、
前記視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面の位置に存在するように見えるように、前記立体視表示装置に表示すべき前記2つの撮像画像の表示位置を決定する表示位置決定手段と、
仮想空間内のオブジェクトを表す仮想画像を生成するための仮想カメラを、仮想画像が表す仮想空間の範囲と撮像画像が表す現実空間の範囲とが一致するように各前記位置関係を用いて2つ設定し、設定された2つ仮想カメラに基づいて2つの仮想画像を生成する画像生成手段と、
前記撮像画像に対して前記仮想画像を合成した合成画像を生成する処理を各撮像画像について実行し、当該合成画像を前記立体視表示装置に表示させる表示制御手段とを備える、立体画像表示装置。
【請求項15】
2つの画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる立体画像表示システムであって、
所定の撮像対象を2つの撮像装置によってそれぞれ撮像した2つの撮像画像を取得する画像取得手段と、
前記2つの撮像画像に基づいて、前記所定の撮像対象と、各前記撮像装置とのそれぞれの位置関係を算出する位置関係算出手段と、
立体視表示において前記立体視表示装置の画面の位置に存在するように見える、仮想空間における点の仮想カメラから撮像方向への距離、または、現実空間における点の前記撮像装置から撮像方向への距離である視差ゼロ距離を、前記撮像装置から前記撮像対象までの距離に応じた距離となるように、前記位置関係の少なくとも一方を用いて決定する距離決定手段と、
前記視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面の位置に存在するように見えるように、前記立体視表示装置に表示すべき前記2つの撮像画像の表示位置を決定する表示位置決定手段と、
仮想空間内のオブジェクトを表す仮想画像を生成するための仮想カメラを、仮想画像が表す仮想空間の範囲と撮像画像が表す現実空間の範囲とが一致するように各前記位置関係を用いて2つ設定し、設定された2つ仮想カメラに基づいて2つの仮想画像を生成する画像生成手段と、
前記撮像画像に対して前記仮想画像を合成した合成画像を生成する処理を各撮像画像について実行し、当該合成画像を前記立体視表示装置に表示させる表示制御手段とを備える、立体画像表示システム。
【請求項16】
2つの画像を用いた立体視表示が可能な立体視表示装置に画像を表示させるための立体画像表示方法であって、
所定の撮像対象を2つの撮像装置によってそれぞれ撮像した2つの撮像画像を取得する画像取得ステップと、
前記2つの撮像画像に基づいて、前記所定の撮像対象と、各前記撮像装置とのそれぞれの位置関係を算出する位置関係算出ステップと、
立体視表示において前記立体視表示装置の画面の位置に存在するように見える、仮想空間における点の仮想カメラから撮像方向への距離、または、現実空間における点の前記撮像装置から撮像方向への距離である視差ゼロ距離を、前記撮像装置から前記撮像対象までの距離に応じた距離となるように、前記位置関係の少なくとも一方を用いて決定する距離決定ステップと、
前記視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面の位置に存在するように見えるように、前記立体視表示装置に表示すべき前記2つの撮像画像の表示位置を決定する表示位置決定ステップと、
仮想空間内のオブジェクトを表す仮想画像を生成するための仮想カメラを、仮想画像が表す仮想空間の範囲と撮像画像が表す現実空間の範囲とが一致するように各前記位置関係を用いて2つ設定し、設定された2つ仮想カメラに基づいて2つの仮想画像を生成する画像生成ステップと、
前記撮像画像に対して前記仮想画像を合成した合成画像を生成する処理を各撮像画像について実行し、当該合成画像を前記立体視表示装置に表示させる表示制御ステップとを含む、立体画像表示方法。
【請求項17】
2つの画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる情報処理装置のコンピュータにおいて実行される立体画像表示プログラムであって、
所定の撮像対象を2つの撮像装置によってそれぞれ撮像した撮像画像を取得する画像取得手段と、
前記2つの撮像画像に基づいて、前記所定の撮像対象と、各撮像装置とのそれぞれの位置関係を算出する位置関係算出手段と、
立体視表示において表示装置の画面上に存在するように見える、仮想世界における点の仮想カメラから撮像方向への距離、または、現実世界における点の前記撮像装置から撮像方向への距離である視差ゼロ距離を、前記撮像装置から前記撮像対象までの距離に応じた距離となるように、前記位置関係を用いて決定する視差ゼロ距離決定手段、
前記視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面上の奥行位置に存在するように見えるように、前記立体視表示装置に表示すべき前記2つの撮像画像の表示位置を決定する表示位置決定手段と、
各前記位置関係を用いて、前記視差ゼロ距離に応じた位置にある仮想オブジェクトが立体視表示において表示装置の画面上の奥行位置に存在するように見えるように設定された2つの仮想カメラで仮想空間をそれぞれ撮影することによって、2つの仮想画像を生成する画像生成手段と、
前記撮像画像に対して前記仮想画像を合成した合成画像を生成する処理を各撮像画像について実行し、当該合成画像を前記立体視表示装置に表示させる表示制御手段として前記コンピュータを機能させる、立体画像表示プログラム。
【請求項18】
2つの画像を用いた立体視表示が可能な立体視表示装置に画像を表示させる情報処理装置のコンピュータにおいて実行される立体画像表示プログラムであって、
所定の撮像対象を2つの撮像装置によってそれぞれ撮像した撮像画像を取得する画像取得手段と、
前記2つの撮像画像に基づいて、前記所定の撮像対象と、各撮像装置とのそれぞれの位置関係を算出する位置関係算出手段と、
立体視表示において表示装置の画面上に存在するように見える、仮想世界における点の仮想カメラから撮像方向への距離、または、現実世界における点の前記撮像装置から撮像方向への距離である視差ゼロ距離を、前記撮像装置から前記撮像対象までの距離に応じた距離となるように、前記位置関係を用いて決定する視差ゼロ距離決定手段、
前記視差ゼロ距離に応じた位置にある表示対象が立体視表示において表示装置の画面上の奥行位置に存在するように見えるように、前記立体視表示装置に表示すべき前記2つの撮像画像の表示位置を決定する表示位置決定手段と、
各前記位置関係を用いて設定された2つの仮想カメラで撮影した仮想空間内の前記視差ゼロ距離に応じた位置にある仮想オブジェクトが、立体視表示において表示装置の画面上に存在するように見えるように、当該仮想空間を前記撮像画像に重畳させた合成画像を生成する処理を各撮像画像について実行し、当該合成画像を前記立体視表示装置に表示させる表示制御手段として前記コンピュータを機能させる、立体画像表示プログラム。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図5C】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate


【公開番号】特開2012−3327(P2012−3327A)
【公開日】平成24年1月5日(2012.1.5)
【国際特許分類】
【出願番号】特願2010−135313(P2010−135313)
【出願日】平成22年6月14日(2010.6.14)
【出願人】(000233778)任天堂株式会社 (1,115)
【出願人】(391041718)株式会社ハル研究所 (38)
【Fターム(参考)】