(ゲーム装置の構成)
以下、本発明の一実施形態に係るゲーム装置について説明する。図1〜図3は、ゲーム装置10の外観を示す平面図である。ゲーム装置10は携帯型のゲーム装置であり、図1〜図3に示すように折り畳み可能に構成されている。図1および図2は、開いた状態(開状態)におけるゲーム装置10を示し、図3は、閉じた状態(閉状態)におけるゲーム装置10を示している。図1は、開状態におけるゲーム装置10の正面図であり、図2は、開状態におけるゲーム装置10の右側面図である。ゲーム装置10は、撮像部によって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりすることが可能である。また、ゲーム装置10は、交換可能なメモリカード内に記憶され、または、サーバや他のゲーム装置から受信したゲームプログラムを実行可能であり、仮想空間に設定された仮想カメラで撮像した画像などのコンピュータグラフィックス処理により生成された画像を画面に表示したりすることができる。
まず、図1〜図3を参照して、ゲーム装置10の外観構成について説明する。図1〜図3に示されるように、ゲーム装置10は、下側ハウジング11および上側ハウジング21を有する。下側ハウジング11と上側ハウジング21とは、開閉可能(折り畳み可能)に接続されている。本実施形態では、各ハウジング11および21はともに横長の長方形の板状形状であり、互いの長辺部分で回転可能に接続されている。
図1および図2に示されるように、下側ハウジング11の上側長辺部分には、下側ハウジング11の内側面(主面)11Bに対して垂直な方向に突起する突起部11Aが設けられる。また、上側ハウジング21の下側長辺部分には、上側ハウジング21の下側面から当該下側面に垂直な方向に突起する突起部21Aが設けられる。下側ハウジング11の突起部11Aと上側ハウジング21の突起部21Aとが連結されることにより、下側ハウジング11と上側ハウジング21とが、折り畳み可能に接続される。
(下側ハウジングの説明)
まず、下側ハウジング11の構成について説明する。図1〜図3に示すように、下側ハウジング11には、下側LCD(Liquid Crystal Display:液晶表示装置)12、タッチパネル13、各操作ボタン14A〜14L(図1、図3)、アナログスティック15、LED16A〜16B、挿入口17、および、マイクロフォン用孔18が設けられる。以下、これらの詳細について説明する。
図1に示すように、下側LCD12は下側ハウジング11に収納される。下側LCD12は横長形状であり、長辺方向が下側ハウジング11の長辺方向に一致するように配置される。下側LCD12は下側ハウジング11の中央に配置される。下側LCD12は、下側ハウジング11の内側面(主面)に設けられ、下側ハウジング11に設けられた開口部から当該下側LCD12の画面が露出される。ゲーム装置10を使用しない場合には閉状態としておくことによって、下側LCD12の画面が汚れたり傷ついたりすることを防止することができる。下側LCD12の画素数は、例えば、256dot×192dot(横×縦)であってもよい。下側LCD12は、後述する上側LCD22とは異なり、画像を(立体視可能ではなく)平面的に表示する表示装置である。なお、本実施形態では表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置など、他の任意の表示装置を利用してもよい。また、下側LCD12として、任意の解像度の表示装置を利用することができる。
図1に示されるように、ゲーム装置10は、入力装置として、タッチパネル13を備えている。タッチパネル13は、下側LCD12の画面上に装着されている。なお、本実施形態では、タッチパネル13は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。本実施形態では、タッチパネル13として、下側LCD12の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル13の解像度と下側LCD12の解像度が一致している必要はない。また、下側ハウジング11の上側面には挿入口17(図1および図3(d)に示す点線)が設けられている。挿入口17は、タッチパネル13に対する操作を行うために用いられるタッチペン28を収納することができる。なお、タッチパネル13に対する入力は通常タッチペン28を用いて行われるが、タッチペン28に限らずユーザの指でタッチパネル13に対する入力をすることも可能である。
各操作ボタン14A〜14Lは、所定の入力を行うための入力装置である。図1に示されるように、下側ハウジング11の内側面(主面)には、各操作ボタン14A〜14Lのうち、十字ボタン14A(方向入力ボタン14A)、aボタン14B、bボタン14C、xボタン14D、yボタン14E、電源ボタン14F、セレクトボタン14J、HOMEボタン14K、およびスタートボタン14Lが、設けられる。十字ボタン14Aは、十字の形状を有しており、上下左右の方向を指示するボタンを有している。ボタン14B、ボタン14C、ボタン14D、ボタン14Eは、十字状に配置される。ボタン14A〜14E、セレクトボタン14J、HOMEボタン14K、およびスタートボタン14Lには、ゲーム装置10が実行するプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン14Aは選択操作等に用いられ、各操作ボタン14B〜14Eは例えば決定操作やキャンセル操作等に用いられる。また、電源ボタン14Fは、ゲーム装置10の電源をオン/オフするために用いられる。
アナログスティック15は、方向を指示するデバイスであり、下側ハウジング11の内側面の下側LCD12より左側領域の上部領域に設けられる。図1に示すように、十字ボタン14Aは下側LCD12より左側領域の下部領域に設けられるので、アナログスティック15は、十字ボタン14Aの上方に設けられる。また、アナログスティック15、および、十字ボタン14Aは、下側ハウジングを把持した左手の親指で操作可能な位置に設計される。また、アナログスティック15を上部領域に設けたことにより、下側ハウジング11を把持する左手の親指が自然と位置するところにアナログスティック15が配され、十字ボタン14Aは、左手の親指を少し下にずらした位置に配される。アナログスティック15は、そのキートップが、下側ハウジング11の内側面に平行にスライドするように構成されている。アナログスティック15は、ゲーム装置10が実行するプログラムに応じて機能する。例えば、3次元仮想空間に所定のオブジェクトが登場するゲームがゲーム装置10によって実行される場合、アナログスティック15は、当該所定のオブジェクトを3次元仮想空間内で移動させるための入力装置として機能する。この場合において、所定のオブジェクトはアナログスティック15のキートップがスライドした方向に移動される。なお、アナログスティック15として、上下左右および斜め方向の任意の方向に所定量だけ傾倒することでアナログ入力を可能としたものを用いても良い。
十字状に配置される、aボタン14B、bボタン14C、xボタン14D、yボタン14Eの4つのボタンは、下側ハウジング11を把持する右手の親指が自然と位置するところに配置される。また、これらの4つのボタンと、アナログスティック15とは、下側LCD12を挟んで、左右対称に配置される。これにより、ゲームプログラムによっては、例えば、左利きの人が、これらの4つのボタンを使用して方向指示入力をすることも可能である。
また、下側ハウジング11の内側面には、マイクロフォン用孔18が設けられる。マイクロフォン用孔18の下部には後述する音声入力装置としてのマイク(図4参照)が設けられ、当該マイクがゲーム装置10の外部の音を検出する。
図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の上面の右端部に設けられる。また、図3(a)に示されるように、下側ハウジング11の左側面には、音量ボタン14Iが設けられる。音量ボタン14Iは、ゲーム装置10が備えるスピーカの音量を調整するために用いられる。
図3(a)に示されるように、下側ハウジング11の左側面には開閉可能なカバー部11Cが設けられる。このカバー部11Cの内側には、ゲーム装置10とデータ保存用外部メモリ45とを電気的に接続するためのコネクタ(図示せず)が設けられる。データ保存用外部メモリ45は、コネクタに着脱自在に装着される。データ保存用外部メモリ45は、例えば、ゲーム装置10によって撮像された画像のデータを記憶(保存)するために用いられる。なお、上記コネクタおよびそのカバー部11Cは、下側ハウジング11の右側面に設けられてもよい。
また、図3(d)に示されるように、下側ハウジング11の上側面には、ゲーム装置10とゲームプログラムを記録した外部メモリ44を挿入するための挿入口11Dが設けられ、その挿入口11Dの内部には、外部メモリ44と電気的に着脱自在に接続するためのコネクタ(図示せず)が設けられる。当該外部メモリ44がゲーム装置10に接続されることにより、所定のゲームプログラムが実行される。なお、上記コネクタおよびその挿入口11Dは、下側ハウジング11の他の側面(例えば、右側面等)に設けられてもよい。
また、図1および図3(c)に示されるように、下側ハウジング11の下側面にはゲーム装置10の電源のON/OFF状況をユーザに通知する第1LED16A、下側ハウジング11の右側面にはゲーム装置10の無線通信の確立状況をユーザに通知する第2LED16Bが設けられる。ゲーム装置10は他の機器との間で無線通信を行うことが可能であり、第2LED16Bは、無線通信が確立している場合に点灯する。ゲーム装置10は、例えば、IEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。下側ハウジング11の右側面には、この無線通信の機能を有効/無効にする無線スイッチ19が設けられる(図3(c)参照)。
なお、図示は省略するが、下側ハウジング11には、ゲーム装置10の電源となる充電式電池が収納され、下側ハウジング11の側面(例えば、上側面)に設けられた端子を介して当該電池を充電することができる。
(上側ハウジングの説明)
次に、上側ハウジング21の構成について説明する。図1〜図3に示すように、上側ハウジング21には、上側LCD(Liquid Crystal Display:液晶表示装置)22、外側撮像部23(外側撮像部(左)23aおよび外側撮像部(右)23b)、内側撮像部24、3D調整スイッチ25、および、3Dインジケータ26が設けられる。以下、これらの詳細について説明する。
図1に示すように、上側LCD22は上側ハウジング21に収納される。上側LCD22は、横長形状であり、長辺方向が上側ハウジング21の長辺方向に一致するように配置される。上側LCD22は上側ハウジング21の中央に配置される。上側LCD22の画面の面積は、下側LCD12の画面の面積よりも大きく設定される。また、上側LCD22の画面は、下側LCD12の画面よりも横長に設定される。すなわち、上側LCD22の画面のアスペクト比における横幅の割合は、下側LCD12の画面のアスペクト比における横幅の割合よりも大きく設定される。
上側LCD22の画面は、上側ハウジング21の内側面(主面)21Bに設けられ、上側ハウジング21に設けられた開口部から当該上側LCD22の画面が露出される。また、図2に示すように、上側ハウジング21の内側面は、透明なスクリーンカバー27によって覆われている。当該スクリーンカバー27は、上側LCD22の画面を保護するとともに、上側LCD22と上側ハウジング21の内側面と一体的にさせ、これにより統一感を持たせている。上側LCD22の画素数は、例えば、640dot×200dot(横×縦)であってもよい。なお、本実施形態では上側LCD22は液晶表示装置であるとしたが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置などが利用されてもよい。また、上側LCD22として、任意の解像度の表示装置を利用することができる。
上側LCD22は、立体視可能な画像(立体視画像、立体画像ともいう)を表示することが可能な表示装置である。また、本実施例では、実質的に同一の表示領域を用いて左目用画像と右目用画像が表示される。具体的には、左目用画像と右目用画像が所定単位で(例えば、1列ずつ)横方向に交互に表示される方式の表示装置である。または、左目用画像と右目用画像とが交互に表示される方式の表示装置であってもよい。また、本実施例では、裸眼立体視可能な表示装置である。そして、横方向に交互に表示される左目用画像と右目用画像とを左目および右目のそれぞれに分解して見えるようにレンチキュラー方式やパララックスバリア方式(視差バリア方式)のものが用いられる。本実施形態では、上側LCD22はパララックスバリア方式のものとする。上側LCD22は、右目用画像と左目用画像とを用いて、裸眼で立体視可能な画像(立体画像)を表示する。すなわち、上側LCD22は、視差バリアを用いてユーザの左目に左目用画像をユーザの右目に右目用画像を視認させることにより、ユーザにとって立体感のある立体画像(立体視可能な画像)を表示することができる。また、上側LCD22は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる(上述した立体視とは反対の意味で平面視の画像を表示することができる。すなわち、表示された同一の画像が右目にも左目にも見えるような表示モードである)。このように、上側LCD22は、立体視可能な画像を表示する立体表示モードと、画像を平面的に表示する(平面視画像を表示する)平面表示モードとを切り替えることが可能な表示装置である。この表示モードの切り替えは、後述する3D調整スイッチ25によって行われる。
外側撮像部23は、上側ハウジング21の外側面(上側LCD22が設けられた主面と反対側の背面)21Dに設けられた2つの撮像部(23aおよび23b)の総称である。外側撮像部(左)23aと外側撮像部(右)23bの撮像方向は、いずれも当該外側面21Dの外向きの法線方向である。また、これらの撮像部はいずれも、上側LCD22の表示面(内側面)の法線方向と180度反対の方向に設計される。すなわち、外側撮像部(左)23aの撮像方向および外側撮像部(右)23bの撮像方向は、平行である。外側撮像部(左)23aと外側撮像部(右)23bとは、ゲーム装置10が実行するプログラムによって、ステレオカメラとして使用することが可能である。また、プログラムによっては、2つの外側撮像部(23aおよび23b)のいずれか一方を単独で用いて、外側撮像部23を非ステレオカメラとして使用することも可能である。また、プログラムによっては、2つの外側撮像部(23aおよび23b)で撮像した画像を合成してまたは補完的に使用することにより撮像範囲を広げた撮像をおこなうことも可能である。本実施形態では、外側撮像部23は、外側撮像部(左)23aおよび外側撮像部(右)23bの2つの撮像部で構成される。外側撮像部(左)23aおよび外側撮像部(右)23bは、それぞれ所定の共通の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。レンズは、ズーム機構を有するものでもよい。
図1の破線および図3(b)の実線で示されるように、外側撮像部23を構成する外側撮像部(左)23aおよび外側撮像部(右)23bは、上側LCD22の画面の横方向と平行に並べられて配置される。すなわち、2つの撮像部を結んだ直線が上側LCD22の画面の横方向と平行になるように、外側撮像部(左)23aおよび外側撮像部(右)23bが配置される。図1の破線で示す23aおよび23bは、上側ハウジング21の内側面とは反対側の外側面に存在する外側撮像部(左)23aおよび外側撮像部(右)23bをそれぞれ表している。図1に示すように、ユーザが上側LCD22の画面を正面から視認した場合に、外側撮像部(左)23aは左側に外側撮像部(右)23bは右側にそれぞれ位置している。外側撮像部23をステレオカメラとして機能させるプログラムが実行されている場合、外側撮像部(左)23aは、ユーザの左目で視認される左目用画像を撮像し、外側撮像部(右)23bは、ユーザの右目で視認される右目用画像を撮像する。外側撮像部(左)23aおよび外側撮像部(右)23bの間隔は、人間の両目の間隔程度に設定され、例えば、30mm〜70mmの範囲で設定されてもよい。なお、外側撮像部(左)23aおよび外側撮像部(右)23bの間隔は、この範囲に限らない。
なお、本実施例においては、外側撮像部(左)23aおよび外側撮像部(右)23はハウジングに固定されており、撮像方向を変更することはできない。
また、外側撮像部(左)23aおよび外側撮像部(右)23bは、上側LCD22(上側ハウジング21)の左右方向に関して中央から対称となる位置にそれぞれ配置される。すなわち、外側撮像部(左)23aおよび外側撮像部(右)23bは、上側LCD22を左右に2等分する線に対して対称の位置にそれぞれ配置される。また、外側撮像部(左)23aおよび外側撮像部(右)23bは、上側ハウジング21を開いた状態において、上側ハウジング21の上部であって、上側LCD22の画面の上端よりも上方の位置の裏側に配置される。すなわち、外側撮像部(左)23aおよび外側撮像部(右)23bは、上側ハウジング21の外側面であって、上側LCD22を外側面に投影した場合、投影した上側LCD22の画面の上端よりも上方に配置される。
このように、外側撮像部23の2つの撮像部(23aおよび23b)が、上側LCD22の左右方向に関して中央から対称の位置に配置されることにより、ユーザが上側LCD22を正視した場合に、外側撮像部23の撮像方向をユーザの視線方向と一致させることができる。また、外側撮像部23は、上側LCD22の画面の上端より上方の裏側の位置に配置されるため、外側撮像部23と上側LCD22とが上側ハウジング21の内部で干渉することがない。従って、外側撮像部23を上側LCD22の画面の裏側に配置する場合と比べて、上側ハウジング21を薄く構成することが可能となる。
内側撮像部24は、上側ハウジング21の内側面(主面)21Bに設けられ、当該内側面の内向きの法線方向を撮像方向とする撮像部である。内側撮像部24は、所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。レンズは、ズーム機構を有するものでもよい。
図1に示すように、内側撮像部24は、上側ハウジング21を開いた状態において、上側ハウジング21の上部であって、上側LCD22の画面の上端よりも上方に配置され、上側ハウジング21の左右方向に関して中央の位置(上側ハウジング21(上側LCD22の画面)を左右に2等分する線の線上)に配置される。具体的には、図1および図3(b)に示されるように、内側撮像部24は、上側ハウジング21の内側面であって、外側撮像部23の左右の撮像部(外側撮像部(左)23aおよび外側撮像部(右)23b)の中間の裏側の位置に配置される。すなわち、上側ハウジング21の外側面に設けられた外側撮像部23の左右の撮像部を上側ハウジング21の内側面に投影した場合、当該投影した左右の撮像部の中間に、内側撮像部24が設けられる。図3(b)で示される破線24は、上側ハウジング21の内側面に存在する内側撮像部24を表している。
このように、内側撮像部24は、外側撮像部23とは反対方向を撮像する。内側撮像部24は、上側ハウジング21の内側面であって、外側撮像部23の左右の撮像部の中間位置の裏側に設けられる。これにより、ユーザが上側LCD22を正視した際、内側撮像部24でユーザの顔を正面から撮像することができる。また、外側撮像部23の左右の撮像部と内側撮像部24とが上側ハウジング21の内部で干渉することがないため、上側ハウジング21を薄く構成することが可能となる。
3D調整スイッチ25は、スライドスイッチであり、上述のように上側LCD22の表示モードを切り替えるために用いられるスイッチである。また、3D調整スイッチ25は、上側LCD22に表示された立体視可能な画像(立体画像)の立体感を調整するために用いられる。図1〜図3に示されるように、3D調整スイッチ25は、上側ハウジング21の内側面および右側面の端部に設けられ、ユーザが上側LCD22を正視した場合に、当該3D調整スイッチ25を視認できる位置に設けられる。また、3D調整スイッチ25の操作部は、内側面および右側面の両方に突出しており、どちらからも視認および操作することができる。なお、3D調整スイッチ25以外のスイッチは全て下側ハウジング11に設けられる。
3D調整スイッチ25は、図1および図2に示されるように、上側ハウジング21の正面および右側面から視認可能に配置される。3D調整スイッチ25のスライダ25aは、所定方向(上下方向)の任意の位置にスライド可能であり、当該スライダ25aの位置に応じて上側LCD22の表示モードが設定されたり、立体画像の立体感が調整されてもよい。例えば、3D調整スイッチ25のスライダ25aの位置に応じて、後述する仮想カメラ(仮想ステレオカメラ)のカメラ間距離が設定されてもよい。また、当該仮想ステレオカメラの左仮想カメラによって撮像された左目用画像と右仮想カメラによって撮像された右目用画像との位置関係が調整されてもよい。具体的には、例えば、3D調整スイッチ25のスライダ25aが最上点(図1および図2では上方向)に存在する場合、上記左目用画像と右目用画像との横方向(上側LCD22の画面の横方向;図1の左右方向)の位置のずれが上限値に設定される。このように左目用画像と右目用画像の横方向のずれが上限値に設定されると、2つの画像の視差がより大きくなる。このため、ユーザが視差バリアを通して上側LCD22に表示された2つの画像を見ると、上側LCD22の画面から画像がより手前方向に飛び出したように見える。このように、3D調整スイッチ25を用いて、2つの画像の視差が調整されてもよい。
3Dインジケータ26は、上側LCD22が立体表示モードか否かを示す。3Dインジケータ26は、LEDであり、上側LCD22の立体表示モードが有効の場合に点灯する。なお、3Dインジケータ26は、上側LCD22が立体表示モードになっており、かつ、立体視画像を表示するプログラム処理が実行されているときに限り、点灯するようにしてもよい。図1に示されるように、3Dインジケータ26は、上側ハウジング21の内側面に設けられ、上側LCD22の画面近傍に設けられる。このため、ユーザが上側LCD22の画面を正視した場合、ユーザは3Dインジケータ26を視認しやすい。従って、ユーザは上側LCD22の画面を視認している状態でも、上側LCD22の表示モードを容易に認識することができる。
また、上側ハウジング21の内側面には、スピーカ孔21Eが設けられる。後述するスピーカ43からの音声がこのスピーカ孔21Eから出力される。
(ゲーム装置10の内部構成)
次に、図4を参照して、ゲーム装置10の内部の電気的構成について説明する。図4は、ゲーム装置10の内部構成を示すブロック図である。図4に示すように、ゲーム装置10は、上述した各部に加えて、情報処理部31、メインメモリ32、外部メモリインターフェイス(外部メモリI/F)33、データ保存用外部メモリI/F34、データ保存用内部メモリ35、無線通信モジュール36、ローカル通信モジュール37、リアルタイムクロック(RTC)38、加速度センサ39、電源回路40、およびインターフェイス回路(I/F回路)41等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて下側ハウジング11(または上側ハウジング21でもよい)内に収納される。
情報処理部31は、所定のプログラムを実行するためのCPU(Central Processing Unit)311、画像処理を行うGPU(Graphics Processing Unit)312等を含む情報処理手段である。本実施形態では、所定のプログラムがゲーム装置10内のメモリ(例えば外部メモリI/F33に接続された外部メモリ44やデータ保存用内部メモリ35)に記憶されている。情報処理部31のCPU311は、当該所定のプログラムを実行することによって、後述する処理(図12)を実行する。なお、情報処理部31のCPU311によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。また、情報処理部31は、VRAM(Video RAM)313を含む。情報処理部31のGPU312は、情報処理部31のCPU311からの命令に応じて画像を生成し、VRAM313に描画する。そして、情報処理部31のGPU312は、VRAM313に描画された画像を上側LCD22及び/又は下側LCD12に出力し、上側LCD22及び/又は下側LCD12に当該画像が表示される。
情報処理部31には、メインメモリ32、外部メモリI/F33、データ保存用外部メモリI/F34、および、データ保存用内部メモリ35が接続される。外部メモリI/F33は、外部メモリ44を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリI/F34は、データ保存用外部メモリ45を着脱自在に接続するためのインターフェイスである。
メインメモリ32は、情報処理部31(のCPU311)のワーク領域やバッファ領域として用いられる揮発性の記憶手段である。すなわち、メインメモリ32は、上記画像処理に用いられる各種データを一時的に記憶したり、外部(外部メモリ44や他の機器等)から取得されるプログラムを一時的に記憶したりする。本実施形態では、メインメモリ32として例えばPSRAM(Pseudo−SRAM)を用いる。
外部メモリ44は、情報処理部31によって実行されるプログラムを記憶するための不揮発性の記憶手段である。外部メモリ44は、例えば読み取り専用の半導体メモリで構成される。外部メモリ44が外部メモリI/F33に接続されると、情報処理部31は外部メモリ44に記憶されたプログラムを読み込むことができる。情報処理部31が読み込んだプログラムを実行することにより、所定の処理が行われる。データ保存用外部メモリ45は、不揮発性の読み書き可能なメモリ(例えばNAND型フラッシュメモリ)で構成され、所定のデータを格納するために用いられる。例えば、データ保存用外部メモリ45には、外側撮像部23で撮像された画像や他の機器で撮像された画像が記憶される。データ保存用外部メモリ45がデータ保存用外部メモリI/F34に接続されると、情報処理部31はデータ保存用外部メモリ45に記憶された画像を読み込み、上側LCD22及び/又は下側LCD12に当該画像を表示することができる。
データ保存用内部メモリ35は、読み書き可能な不揮発性メモリ(例えばNAND型フラッシュメモリ)で構成され、所定のデータを格納するために用いられる。例えば、データ保存用内部メモリ35には、無線通信モジュール36を介した無線通信によってダウンロードされたデータやプログラムが格納される。
無線通信モジュール36は、例えばIEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、ローカル通信モジュール37は、所定の通信方式(例えば赤外線通信)により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール36およびローカル通信モジュール37は情報処理部31に接続される。情報処理部31は、無線通信モジュール36を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール37を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
また、情報処理部31には、加速度センサ39が接続される。加速度センサ39は、3軸(xyz軸)方向に沿った直線方向の加速度(直線加速度)の大きさを検出する。加速度センサ39は、下側ハウジング11の内部に設けられる。加速度センサ39は、図1に示すように、下側ハウジング11の長辺方向をx軸、下側ハウジング11の短辺方向をy軸、下側ハウジング11の内側面(主面)に対して垂直な方向をz軸として、各軸の直線加速度の大きさを検出する。なお、加速度センサ39は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ39は1軸又は2軸方向を検出する加速度センサであってもよい。情報処理部31は、加速度センサ39が検出した加速度を示すデータ(加速度データ)を受信して、ゲーム装置10の姿勢や動きを検出する。本実施形態では、情報処理部31は、加速度センサ39が検出した加速度に基づいて、ゲーム装置10の姿勢(傾き)を判定する。
また、情報処理部31には、RTC38および電源回路40が接続される。RTC38は、時間をカウントして情報処理部31に出力する。情報処理部31は、RTC38によって計時された時間に基づき現在時刻(日付)を計算する。電源回路40は、ゲーム装置10が有する電源(下側ハウジング11に収納される上記充電式電池)からの電力を制御し、ゲーム装置10の各部品に電力を供給する。
また、情報処理部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に対して入力が行われた位置を知ることができる。
操作ボタン14は、上記各操作ボタン14A〜14Lからなり、情報処理部31に接続される。操作ボタン14から情報処理部31へは、各操作ボタン14A〜14Iに対する入力状況(押下されたか否か)を示す操作データが出力される。情報処理部31は、操作ボタン14から操作データを取得することによって、操作ボタン14に対する入力に従った処理を実行する。
下側LCD12および上側LCD22は情報処理部31に接続される。下側LCD12および上側LCD22は、情報処理部31(のGPU312)の指示に従って画像を表示する。
具体的には、情報処理部31は、上側LCD22のLCDコントローラ(図示せず)と接続され、当該LCDコントローラに対して視差バリアのON/OFFを制御する。上側LCD22の視差バリアがONになっている場合、情報処理部31のVRAM313に格納された右目用画像と左目用画像とが、上側LCD22に出力される。より具体的には、LCDコントローラは、右目用画像について縦方向に1ライン分の画素データを読み出す処理と、左目用画像について縦方向に1ライン分の画素データを読み出す処理とを交互に繰り返すことによって、VRAM313から右目用画像と左目用画像とを読み出す。これにより、右目用画像および左目用画像が、画素を縦に1ライン毎に並んだ短冊状画像に分割され、分割された右目用画像の短冊状画像と左目用画像の短冊状画像とが交互に配置された画像が、上側LCD22の画面に表示される。そして、上側LCD22の視差バリアを介して当該画像がユーザに視認されることによって、ユーザの右目に右目用画像が、ユーザの左目に左目用画像が視認される。以上により、上側LCD22の画面には立体視可能な画像が表示される。
外側撮像部23および内側撮像部24は、情報処理部31に接続される。外側撮像部23および内側撮像部24は、情報処理部31の指示に従って画像を撮像し、撮像した画像データを情報処理部31に出力する。例えば、情報処理部31は外側撮像部23および内側撮像部24のいずれか一方に対して撮像指示を行い、撮像指示を受けた撮像部が画像を撮像して画像データを情報処理部31に送る。例えば、ユーザによるタッチパネル13を用いたタッチ操作によって使用する撮像部が選択される。撮像部が選択されたことを情報処理部31(CPU311)が検知し、情報処理部31が外側撮像部23または内側撮像部24に対して撮像指示を行う。
3D調整スイッチ25は、情報処理部31に接続される。3D調整スイッチ25は、スライダ25aの位置に応じた電気信号を情報処理部31に送信する。
また、3Dインジケータ26は、情報処理部31に接続される。情報処理部31は、3Dインジケータ26の点灯を制御する。本実施形態では、情報処理部31は、上側LCD22が立体表示モードである場合、3Dインジケータ26を点灯させる。以上がゲーム装置10の内部構成の説明である。
また、情報処理部31には、角速度センサ46が接続される。角速度センサ46は、各軸(x軸、y軸、z軸)周りの角速度を検出する。ゲーム装置10は、角速度センサ46が逐次検出する角速度に基づいて、実空間におけるゲーム装置10の姿勢を算出することができる。具体的には、ゲーム装置10は、角速度センサ46によって検出された各軸周りの角速度を時間で積分することによって、各軸周りのゲーム装置10の回転角を算出することができる。
(撮影処理の概要)
次に、本実施形態に係るゲーム装置10において実行される撮影処理(画像処理)の概要について説明する。図5は、本実施形態に係る撮影処理が実行された場合において、実空間に予め配置されたマーカ61を外側撮像部23で撮像したときに上側LCD22に表示される画像の一例を示す図である。
図5に示すように、ゲーム装置10の外側撮像部23の撮像方向の実空間には、マーカ61が配置される。マーカ61は、長方形の紙であって、その中心に矢印が描かれている。マーカ61の長辺は、中心に描かれた矢印の方向と平行である。ゲーム装置10の情報処理部31(CPU311)は、外側撮像部23によって撮像された実画像に対して、例えばパターンマッチング等の画像処理を行うことによって、当該画像に含まれるマーカ61を検出することができる。外側撮像部23によって撮像された実画像中にマーカ61が検出された場合、上側LCD22には、外側撮像部23によって撮像された実画像に仮想キャラクタが重ね合わされて表示される。外側撮像部23によって撮像された実画像中にマーカ61が検出されない場合は、上側LCD22にマーカ61が検出されていないことを示すメッセージが表示されて、仮想キャラクタは表示されない。
具体的には、マーカ61が検出された場合、上側LCD22には、外側撮像部23によって撮像された実画像(マーカ61と背景を含む実空間を撮像した画像)に、仮想キャラクタ51〜53、カーソル55、および、表示バー56が重畳表示される。仮想キャラクタ51〜53は、仮想空間に存在するキャラクタであり、人を模した仮想オブジェクトである。より具体的には、上側LCD22には、マーカ61の上に仮想キャラクタ52が乗っている様子が表示される。また、当該仮想キャラクタ52の左側(画面上の左側)には仮想キャラクタ51が、仮想キャラクタ52の右側(画面上の右側)には仮想キャラクタ53が表示される。なお、カーソル55は、現在選択されている仮想キャラクタを示すためのものである。また、表示バー56は、ゲーム装置10の操作方法をユーザに知らせるために表示される。
上側LCD22に表示される画像は立体視可能な画像である。すなわち、外側撮像部23によって撮像された実画像は、外側撮像部(左)23aによって撮像された左目用実画像と外側撮像部(右)23bによって撮像された右目用実画像とを含む。また、仮想キャラクタ51〜53は、仮想空間に存在する仮想ステレオカメラ(左仮想カメラおよび右仮想カメラ)によって撮像されて、上記実画像に重畳表示される。具体的には、外側撮像部(左)23aによって撮像された左目用実画像に、左仮想カメラで仮想キャラクタを撮像した画像が重ね合わされて、左目用重畳画像が生成される。また、外側撮像部(右)23bによって撮像された右目用実画像に、右仮想カメラで仮想キャラクタを撮像した画像が重ね合わされて、右目用重畳画像が生成される。そして、上側LCD22にこれら2つの重畳画像が表示されて、視差バリアを介してユーザの左目に左目用重畳画像が、ユーザの右目に右目用重畳画像が視認される。これにより、ユーザは立体的に画像を視認することができる。
仮想キャラクタ51〜53は、仮想空間に配置されたオブジェクトである。図6は、仮想空間上の座標系の定義を示す図である。仮想空間は、マーカ61の中心を原点としたXYZ座標系(マーカ座標系)によって定義される。マーカ座標系は、マーカ61の矢印と同じ方向にZ軸、矢印方向を基準として右向き(右方向)にX軸、マーカ61に対して垂直上向き(上方向)にY軸が設定される。このように、実空間に配置されたマーカ61を基準として仮想空間の座標系が定義されることにより、実空間と仮想空間とを対応付けることができる。このようにして定義された仮想空間上に仮想キャラクタ51〜53が配置される。例えば、仮想キャラクタ52は、マーカ座標系の原点(0,0,0)に配置され、その向き(姿勢)は、X軸をY軸周りに45度回転させた方向に設定される。また、仮想キャラクタ51および53は、XZ平面上の所定の位置に配置され、その向きは、仮想キャラクタ52と同じに設定される。
図7は、仮想空間に仮想キャラクタ52が配置された様子を示す図である。図7に示すように、マーカ座標系の原点には、仮想キャラクタ52が配置され、当該仮想キャラクタ52は、仮想空間内に配置された左仮想カメラ58aおよび右仮想カメラ58bによって撮像される。左仮想カメラ58aは、ユーザの左目で視認される仮想空間の画像を撮像するためのものであり、右仮想カメラ58bは、ユーザの右目で視認される仮想空間の画像を撮像するためのものである。具体的には、左仮想カメラ58aのマーカ座標系における位置および姿勢は、実空間の外側撮像部(左)23aの位置および姿勢と一致される。また、右仮想カメラ58bのマーカ座標系における位置および姿勢は、実空間の外側撮像部(右)23bの位置および姿勢と一致される。
このようにマーカ61に基づいて仮想空間が定義され、当該仮想空間に仮想キャラクタ51〜53が配置された場合において、外側撮像部23の位置や撮像方向を変化させると、上側LCD22に表示される仮想キャラクタ51〜53も変化する。図8は、マーカ61を図5とは反対方向から撮像したときに上側LCD22に表示される画像の一例を示す図である。図8では、ゲーム装置10(外側撮像部23)の位置および姿勢を固定して、図5に示すマーカ61を、その中心を通り当該マーカ61に垂直な軸の周りに180度回転させた場合に、上側LCD22に表示される画像が示されている。あるいは、図8では、図5に示すマーカ61を固定して、ゲーム装置10をマーカ61の中心を通り当該マーカ61に垂直な軸の周りに180度回転させた場合に、上側LCD22に表示される画像が示されている。
図8に示すように、実空間におけるゲーム装置10(外側撮像部23)とマーカ61との位置関係(相対的な位置関係;距離や姿勢)が変化すると、上側LCD22に表示される仮想キャラクタ51〜53も変化する。具体的には、図5に示すゲーム装置10とマーカ61との位置関係では仮想キャラクタ51〜53の正面が表示されるが、図8に示すゲーム装置10とマーカ61との位置関係(図5とは反対方向)では仮想キャラクタ51〜53の背面が表示される。すなわち、外側撮像部23の位置や撮像方向を変化させると、その変化に応じて、左右の仮想カメラの位置や撮像方向も変化する。これにより、仮想キャラクタ51〜53は、あたかも実空間に存在するマーカ61の上または周辺に実在するかのように見える。なお、上記マーカ61とゲーム装置10との位置関係に応じて仮想キャラクタの表示を変化させることは、公知の拡張現実感技術を用いて実現することができる。
次に、ユーザによる仮想キャラクタの操作について説明する。まず、アナログスティック15を用いた操作について説明する。図9は、アナログスティック15に対する操作に応じて仮想キャラクタ52が移動する様子を示す図である。
図9に示すように、ユーザがアナログスティック15を所定の方向にスライドさせると(アナログスティック15を用いて所定の方向を指示すると)、カーソル55で選択されている仮想キャラクタ52が当該方向に移動する。例えば、ユーザがアナログスティック15を用いて上方向を指示すると(アナログスティック15を上方向にスライドさせると)、仮想キャラクタ52はXZ平面上を歩くように移動して、上側LCD22の画面の上方向に移動する。また、例えば、ユーザがアナログスティック15を用いて左方向を指示すると、仮想キャラクタ52はXZ平面上を歩くように移動して、上側LCD22の画面の左方向に移動する。この場合において、仮想キャラクタ52は、仮想空間のXZ平面上を移動する。仮想空間における移動方向と、上側LCD22の画面上の移動方向は必ずしも一致しない。すなわち、上側LCD22の画面上の移動方向は、仮想空間を仮想カメラで撮像して上側LCD22に表示した場合の表示上の移動方向である。このように、ユーザがアナログスティック15で指示した方向に、仮想キャラクタ52の表示上の位置が変化する。
次に、仮想キャラクタをゲーム装置10(仮想カメラ)に注目させることについて説明する。図10は、仮想キャラクタを仮想カメラの方向に注目させた場合に上側LCD22に表示される画像の一例を示す図である。図10では、仮想キャラクタ51〜53の右側面が表示されるような位置関係でマーカ61とゲーム装置10(外側撮像部23)とが配置された場合に、仮想キャラクタ51〜53がユーザの操作によって仮想カメラ(58aおよび58b)に注目する様子が示されている。上述のように、仮想カメラと外側撮像部23とは、位置および姿勢が一致するため、仮想キャラクタを仮想カメラに注目させることは、仮想キャラクタを外側撮像部23に注目させることを意味する。具体的には、図10のように仮想キャラクタ51〜53の右側面が表示されている場合に、ユーザが例えばxボタン14Dを押すと、全ての仮想キャラクタ51〜53は、ゲーム装置10の方向に顔を向ける。仮想キャラクタ51〜53が仮想カメラに注目すると、仮想キャラクタ51〜53の視線は仮想カメラ、すなわち、外側撮像部23に固定されるため、ユーザがゲーム装置10を動かしても、仮想キャラクタ51〜53は常に仮想カメラの方向を向く。すなわち、一度ユーザがxボタン14Dを押すと、カメラ注目モードとなって、仮想キャラクタ51〜53は、常に仮想カメラに注目する。なお、カメラ注目モードの状態において、再びユーザがxボタン14Dを押すと、カメラ注目モードが解除されて、各仮想キャラクタの顔は、体の向きに応じた方向を向くようになる。このように、ユーザは、操作手段(入力手段)に対する操作(入力)によって仮想キャラクタをゲーム装置10の方向に注目させることができる。
なお、他の操作によって、仮想キャラクタのポーズが変更される。例えば、ユーザがaボタン14Bまたはbボタン14Cを押すと、選択されている仮想キャラクタが立った状態から座った状態になったり、仮想キャラクタが手を上げたり、下ろしたりする。このようにして、ユーザは、各仮想キャラクタのポーズを変更することができる。また、仮想キャラクタの選択変更は、yボタン14Eを押すことにより行われる。例えば、yボタン14Eが1回押されると、カーソル55が仮想キャラクタ53の頭上に移動して、仮想キャラクタ53が選択される。
また、別の操作によって、仮想キャラクタの表情が変更される。例えば、ユーザが十字ボタン14Aの左右方向のボタンを押すと、選択された仮想キャラクタが怒ったり笑ったりする。このようにして、ユーザは、各仮想キャラクタの表情を変更することができる。
以上のように、ユーザは、上側LCD22を見ながらボタン操作によって各仮想キャラクタの位置やポーズ、表情を変更させたり、仮想キャラクタをカメラに注目させたりすることができる。ユーザがボタン操作している間やゲーム装置10を実空間内で移動させている間、上側LCD22に表示される画像はリアルタイムに変化する。これにより、ユーザは、各仮想キャラクタの位置、ポーズ、表情や向き、あるいはゲーム装置10とマーカ61との位置関係等を変化させることで、撮影する写真の構図をある程度自由に決定することができる。その後、ユーザは、所定のボタンを押すことにより、上側LCD22に表示された画像を撮影(保存)することができる。例えば、Lボタン14GまたはRボタン14Hが押されると、当該ボタンが押されたときに表示されていた画像が静止画として上側LCD22に表示されるとともに、当該静止画が保存用バッファ(メインメモリ32等に設けられたバッファ領域)に保存される。その後、さらに所定のボタンが押されると当該静止画が不揮発性の記憶手段(データ保存用内部メモリ35や外部メモリ33)に保存される。
以上のようにして、ユーザは、あたかも仮想オブジェクトが実空間に存在するように仮想オブジェクトを操作して、仮想オブジェクトの写真を撮影することができる。
(撮影処理の詳細)
次に、図11から図16を参照して、本実施形態に係る撮影処理の詳細について説明する。まず、撮影処理の際にメインメモリ32およびVRAM313(以下、これらを総称してRAMと呼ぶことがある)に記憶される主なデータについて説明する。図11は、ゲーム装置10のRAMのメモリマップを示す図である。図11に示されるように、RAMには、撮影処理プログラム71、左目用実画像72L、右目用実画像72R、仮想キャラクタ情報73、左仮想カメラ情報74L、右仮想カメラ情報74R、左仮想オブジェクト画像75L、右仮想オブジェクト画像75R、操作情報76、保存フラグ77、左右静止画像78、カメラ注目フラグ79等が記憶される。
撮影処理プログラム71は、後述するフローチャートに示される撮影処理を情報処理部31(CPU311)に実行させるためのプログラムである。
左目用実画像72Lは、外側撮像部(左)23aによって撮像された、実空間を撮像した画像である。
右目用実画像72Rは、外側撮像部(右)23bによって撮像された、実空間を撮像した画像である。
仮想キャラクタ情報73は、各仮想キャラクタ51〜53に関連する情報である。具体的には、仮想キャラクタ情報73は、仮想キャラクタの形状を表す3次元モデルデータ(ポリゴンデータ)や、仮想キャラクタの模様をあらわすテクスチャデータ、仮想空間における仮想キャラクタの位置や姿勢の情報、および、現在選択されているか否かを示す情報を含む。各仮想キャラクタ51〜53は、これら3次元モデルデータ、テクスチャデータ、位置や姿勢に関する情報、現在選択されているか否かを示す情報を有している。なお、各仮想キャラクタは、部位毎に上記3次元モデルデータ、位置や姿勢に関する情報を有している。例えば、仮想キャラクタ51は、体(首から下の部分)の3次元モデルデータ、当該体の位置や姿勢に関する情報、頭部の3次元モデルデータ、当該頭部の位置や姿勢に関する情報を有している。頭部の位置と体の位置とは、予め定められた所定の関係を有している。このように部位毎に上記情報を有することにより、頭部と体の向きを異なるようにすることができる。例えば、仮想キャラクタ51の体が仮想空間内の原点に位置して当該体の向きがX軸の正方向を向いている場合において、仮想キャラクタ51の顔を原点よりもY軸正方向の所定位置に配置して、顔をZ軸の正方向に向かせることができる。
左仮想カメラ情報74Lは、仮想空間のおける左仮想カメラ58aの位置および姿勢を表す情報である。具体的には、左仮想カメラ情報74Lは、左目用実画像におけるマーカ61の位置および姿勢に基づいて算出される行列である。
右仮想カメラ情報74Rは、仮想空間のおける右仮想カメラ58bの位置および姿勢を表す情報である。具体的には、右仮想カメラ情報74Rは、右目用実画像におけるマーカ61の位置および姿勢に基づいて算出される行列である。
左仮想オブジェクト画像75Lは、左仮想カメラ58aによって仮想キャラクタを撮像した画像である。
右仮想オブジェクト画像75Rは、右仮想カメラ58bによって仮想キャラクタを撮像した画像である。
操作情報76は、操作手段(各操作ボタン14A〜14E、14G、14H、および、アナログスティック15)に対して行われた操作を示す情報である。操作手段に対する操作が行われると、操作が行われたことを示す信号がCPU311に送信されて、操作情報76が更新される。
保存フラグ77は、撮像された画像が保存されることを示すフラグであり、例えば、撮影指示ボタン(Lボタン14GまたはRボタン14H)が押された場合に、ONに設定される。
左右静止画像78は、撮影指示ボタン(Lボタン14GまたはRボタン14H)が押されたことに応じて保存される画像であり、左静止画像と右静止画像とを含む。
カメラ注目フラグ79は、仮想キャラクタが仮想カメラに注目するモード(カメラ注目モード)か否かを示すフラグである。カメラ注目モードである場合、カメラ注目フラグ79はONに設定され、カメラ注目モードでない場合、カメラ注目フラグ79はOFFに設定される。
(メインフローの説明)
次に、本実施形態に係る撮影処理の詳細について、図12から図16を参照して説明する。図12は、本実施形態に係る撮影処理の詳細を示すメインフローチャートである。ゲーム装置10の電源が投入されると、ゲーム装置10の情報処理部31(CPU311)は、図示しないROMに記憶されている起動プログラムを実行し、これによってメインメモリ32等の各ユニットが初期化される。次に、不揮発性メモリ(外部メモリ44等;コンピュータ読み取り可能な記憶媒体)に記憶された撮影処理プログラムがRAM(具体的には、メインメモリ32)に読み込まれ、情報処理部31のCPU311によって当該プログラムの実行が開始される。図12のフローチャートに示す処理は、以上の処理が完了した後に情報処理部31(CPU311又はGPU312)によって行われる。なお、図12では、本発明に直接関連しない処理については記載を省略する。また、図12に示すステップS1〜ステップS14の処理ループは、1フレーム(例えば1/30秒又は1/60秒。フレーム時間という)毎に繰り返し実行される。
まず、ステップS1において、情報処理部31は、撮影中か否かを判定する。具体的には、情報処理部31は、RAMを参照して、保存フラグ77がONか否かを判定する。判定結果が否定の場合、情報処理部31は、次にステップS2の処理を実行する。一方、判定結果が肯定の場合、情報処理部31は、次にステップS7の処理を実行する。
ステップS2において、情報処理部31は、実カメラ画像を取得する。具体的には、情報処理部31は、外側撮像部23に対して、画像を撮像するための命令を送信する。当該命令に応じて外側撮像部(左)23aは左目用実画像72Lを、外側撮像部(右)23bは右目用実画像72Rを撮像する。そして、情報処理部31は、撮像された2つの画像(左目用実画像72Lおよび右目用実画像72R)を取得し、RAMに記憶する。次に、情報処理部31は、ステップS3の処理を実行する。
ステップS3において、情報処理部31は、マーカ認識処理を実行する。マーカ認識処理は、ステップS2で取得した左目用実画像72Lおよび右目用実画像72Rを用いて、2つの画像に含まれるマーカ61を認識する処理である。マーカ認識処理においては、マーカの認識結果に応じて、仮想カメラ(左仮想カメラ58aおよび右仮想カメラ58b)が仮想空間に設定される。マーカ認識処理の詳細は、後述する。マーカ認識処理の後、ステップS4の処理が行われる。
ステップS4において、情報処理部31は、マーカを認識したか否かを判定する。ステップS4の処理は、ステップS3のマーカ認識処理においてマーカ61が正常に認識されたか否かを判定する処理である。具体的には、情報処理部31は、RAMを参照して、検出結果フラグ(後述する)がONか否かを判定する。判定結果が肯定の場合、情報処理部31は、次にステップS5の処理を実行する。一方、判定結果が否定の場合、情報処理部31は、次にステップS14の処理を実行する。
ステップS5において、情報処理部31は、撮影ボタンが押されたか否かを判定する。具体的には、情報処理部31は、RAMに記憶された操作情報76を参照して、Lボタン14GまたはRボタン14Hが押されたか否かを判定する。判定結果が否定の場合、情報処理部31は、次にステップS6の処理を実行する。一方、判定結果が肯定の場合、情報処理部31は、次にステップS7の処理を実行する。
ステップS6において、情報処理部31は、操作情報76を参照して、アナログスティック15が操作されたか否かを判定する。判定結果が肯定の場合、情報処理部31は、次にステップS8の処理を実行する。一方、判定結果が否定の場合、情報処理部31は、次にステップS9の処理を実行する。
一方、ステップS7において、情報処理部31は、保存処理を実行する。保存処理は、上側LCD22に表示された画像を保存(撮影)する処理である。保存処理の詳細については、後述する。ステップS7の処理の後、情報処理部31は、次にステップS14の処理を実行する。
ステップS8において、情報処理部31は、キャラクタ移動処理を実行する。キャラクタ移動処理では、情報処理部31は、アナログスティック15に対する操作に応じて、仮想キャラクタを仮想空間内で移動させる。キャラクタ移動処理の詳細については、後述する。キャラクタ移動処理の後、ステップS9の処理が行われる。
ステップS9において、情報処理部31は、カメラ注目モードか否かを判定する。具体的には、情報処理部31は、操作情報76を参照して、xボタン14Dが押されたか否か、または、カメラ注目フラグ79がONか否かを判定する。判定結果が肯定の場合(xボタン14Dが押された場合、又は、カメラ注目フラグ79がONの場合)、情報処理部31は、カメラ注目フラグ79をONに設定して、次にステップS10に示す注目処理(後述する)を実行する。なお、カメラ注目フラグ79がONであって、かつ、xボタン14Dが押された場合、情報処理部31は、カメラ注目フラグ79をOFFに設定するとともに、非注目処理(図示せず)を実行して、次にステップS11の処理を実行する。非注目処理の詳細な説明は省略するが、非注目処理では、後述する注目処理で変更された各仮想キャラクタの頭部の姿勢が元に戻される。一方、ステップS9において判定結果が否定の場合(xボタン14Dが押されておらず、かつ、カメラ注目フラグ79がOFFの場合)、情報処理部31は、次にステップS11の処理を実行する。
ステップS10において、情報処理部31は、注目処理を実行する。注目処理では、各仮想キャラクタを仮想カメラに注目させる処理であり、各仮想キャラクタの顔を仮想カメラの方向に向かせる処理である。注目処理の詳細については、後述する。注目処理の後、ステップS11の処理が行われる。
ステップS11において、情報処理部31は、所定のボタン操作が行われたか否かを判定する。具体的には、情報処理部31は、操作情報76を参照して、十字ボタン14Aの左右方向のボタン、aボタン14B、bボタン14C、および、yボタン14Eの何れかが押されたか否かを判定する。判定結果が肯定の場合、情報処理部31は、次にステップS12の処理を実行する。一方、判定結果が否定の場合、情報処理部31は、次にステップS13の処理を実行する。
ステップS12において、情報処理部31は、ボタン操作に応じた処理を実行する。具体的には、情報処理部31は、十字ボタン14Aの左右方向のボタンが押された場合、選択されている仮想キャラクタの表情を変更する。仮想キャラクタの表情は、仮想キャラクタの顔に適用されるテクスチャによって変更される。従って、情報処理部31は、十字ボタン14Aの左右方向のボタンが押されたことに応じて、現在適用されているテクスチャを別のテクスチャ(予め記憶されている)に変更する。また、情報処理部31は、aボタン14Bまたはbボタン14Cが押された場合、選択されている仮想キャラクタのポーズを変更する。各仮想キャラクタには、予め複数のポーズ(座った状態や立った状態、手を上げた状態等)が用意されており、情報処理部31は、aボタン14Bまたはbボタン14Cが押されたことに応じて、これら複数のポーズの中から1つのポーズを選択する。また、情報処理部31は、yボタン14Eが押された場合、現在選択されている仮想キャラクタとは別の仮想キャラクタを選択する。例えば、表示上の右から左に順番に仮想キャラクタが選択されたり、撮影処理前に仮想空間に配置される仮想キャラクタが決定された順番に、仮想キャラクタが選択されたりする。情報処理部31は、次にステップS13の処理を実行する。
ステップS13において、情報処理部31は、仮想オブジェクト画像生成処理を実行する。具体的には、情報処理部31は、仮想空間を左仮想カメラ58aで撮像することによって左仮想オブジェクト画像75Lを生成し、仮想空間を右仮想カメラ58bで撮像することによって右仮想オブジェクト画像75Rを生成する。そして、情報処理部31は、撮像した左仮想オブジェクト画像75Lおよび右仮想オブジェクト画像75RをRAMに保存する。情報処理部31は、次にステップS14の処理を実行する。
ステップS14において、情報処理部31は、出力処理を実行する。出力処理が実行されることによって、上側LCD22に立体視可能な画像が表示される。具体的には、情報処理部31は、直前にステップS13の処理が行われた場合、ステップS2で取得した実カメラ画像とステップS13で生成した仮想オブジェクト画像とを重ね合わせた重畳画像を生成する。具体的には、情報処理部31は、左目用実画像72Lと左仮想オブジェクト画像75Lとを重ね合わせた左目用重畳画像を生成し、右目用実画像72Rと右仮想オブジェクト画像75Rとを重ね合わせた右目用重畳画像を生成する。そして、情報処理部31は、生成した2つの重畳画像を上側LCD22に出力する。なお、カーソル55および表示バー56の表示設定がなされている場合は、上記仮想オブジェクト画像に加えて、カーソル55および表示バー56を示す画像が左右の実カメラ画像に重畳されて上側LCD22に表示される。一方、カーソル55および表示バー56が非表示設定されている場合は、カーソル55および表示バー56は上側LCD22に表示されない。
また、情報処理部31は、ステップS4の判定結果が否定の場合は、ステップS2で取得した左目用実画像72Lと右目用実画像72Rとを上側LCD22に出力する。また、情報処理部31は、保存フラグ77がONの場合(直前にステップS7が実行されている場合)、ステップS7でRAMに記憶された左右の静止画像(左右静止画像78)を上側LCD22に出力する。情報処理部31は、ステップS14の処理の後、ステップS1の処理を再び実行する。以上で図12に示すフローチャートの説明を終了する。
なお、図12では省略しているが、保存フラグ77がONの場合において、静止画像(左右静止画像78)がRAMに記憶されると、この静止画像が上側LCD22に表示され、ユーザがこの静止画像の内容を確認して所定のボタンを押すと、RAMに記憶された静止画像(左右静止画像78)は、不揮発性の記憶手段(データ保存用外部メモリ45やデータ保存用内部メモリ35等)に保存される。
次に、上述した各処理の詳細について説明する。
(マーカ認識処理の説明)
図13は、マーカ認識処理(ステップS3)の詳細を示すフローチャートである。まず、ステップS21において、情報処理部31は、マーカを検出したか否かを判定する。ここでは、ステップS2で取得した左目用実画像72Lおよび右目用実画像72Rを用いて、2つの画像の何れにもマーカが含まれているか否かを判定する。具体的には、情報処理部31は、各画像に対してパターンマッチング等の画像処理を行い、マーカが含まれるか否かを判定する。どちらか一方の画像にマーカが含まれない場合、判定結果は否定となって、次にステップS25の処理が実行される。一方、何れの画像にもマーカが含まれている場合、判定結果は肯定となって、次にステップS22の処理が実行される。
ステップS22において、情報処理部31は、実カメラとマーカとの位置関係を算出する。具体的には、情報処理部31は、左目用実画像72Lに含まれるマーカの当該左目用実画像72Lにおける位置や大きさ、形状、および、マーカの矢印の方向等に基づいて、外側撮像部(左)23aと実空間に存在するマーカ61との位置関係を算出する。ここで、外側撮像部(左)23aとマーカ61との位置関係とは、マーカ61および外側撮像部(左)23aの何れか一方を基準とした場合の他方の3次元の位置および姿勢である。すなわち、上記位置関係は、マーカ61に対する外側撮像部(左)23aの相対的な位置および姿勢である。同様に、情報処理部31は、右目用実画像72Rに含まれるマーカの当該右目用実画像72Rにおける位置や大きさ、形状、および、マーカの矢印の方向等に基づいて、外側撮像部(右)23bと実空間に存在するマーカ61との位置関係を算出する。
より具体的には、ステップS22においては、マーカの認識結果に基づいて、マーカ座標系が設定されるとともに、マーカ61と外側撮像部(左)23aとの位置関係が算出される。図17は、マーカ61と外側撮像部(左)23aとの位置関係を示す図である。図17に示すように、マーカ61には、マーカ座標系が設定される。具体的には、マーカ座標系の原点は、マーカ61の中心に設定される。また、マーカ座標系のZ軸は、マーカ61の矢印の方向と平行に設定され(マーカ61の長辺と平行に設定され)、マーカ座標系のX軸は、当該矢印の方向と垂直であって、当該矢印の方向を基準として右向きに設定される(マーカ61の短辺と平行に設定される)。また、Y軸は、マーカ61に対して垂直上向きに設定される(長方形のマーカ61の上向きの法線方向に設定される)。マーカ座標系は、仮想空間を定義する座標系であり、実空間と仮想空間とを対応付ける。すなわち、マーカ座標系における原点は、仮想空間の原点であって、実空間におけるマーカ61の中心でもある。
そして、マーカ61に対する外側撮像部(左)23aの相対的な位置および姿勢を表す行列が算出される。図17に示すように、外側撮像部(左)23aの位置および姿勢を表す行列は、仮想空間におけるマーカ座標系で表された座標を、外側撮像部(左)23aの位置および姿勢を基準とした外側撮像部(左)座標系で表される座標へと変換するための座標変換行列である。ステップS23においては、左目用実画像72Lに含まれるマーカに基づいて外側撮像部(左)23aの位置および姿勢を表す行列が算出され、右目用実画像72Rに含まれるマーカに基づいて外側撮像部(右)23bの位置および姿勢を表す行列が算出される。
なお、外側撮像部(左)23aおよび外側撮像部(右)23bは、これらの撮像方向が平行で、かつ、撮像方向に対して回転しないようにして配設されている。すなわち、外側撮像部(左)23aの姿勢と外側撮像部(右)23bの姿勢とは常に一致する。また、外側撮像部(左)23aと外側撮像部(右)23bとは、所定の間隔で配置されている。このため、例えば、左目用実画像72Lに基づいて外側撮像部(左)23aの位置および姿勢が算出されると、右目用実画像72Rを用いなくても、外側撮像部(右)23bの位置および姿勢は算出可能である。ステップS22の後、情報処理部31は、次にステップS23の処理を実行する。
ステップS23において、情報処理部31は、左右の仮想カメラの位置および姿勢を決定する。ここでは、左右の仮想カメラの位置および姿勢は、外側撮像部23の位置および姿勢と一致する。すなわち、左仮想カメラ58aの仮想空間における位置および姿勢は、外側撮像部(左)23aの位置および姿勢と一致するように設定される。また、右仮想カメラ58bの仮想空間における位置および姿勢は、外側撮像部(右)23bの位置および姿勢と一致するように設定される。具体的には、左仮想カメラ58aの位置および姿勢は、行列(左ビュー行列)として表され、ステップS22で算出された外側撮像部(左)23aの位置および姿勢を表す行列が、左仮想カメラ情報74LとしてRAMに保存される。同様に、右仮想カメラ58bの位置および姿勢は、行列(右ビュー行列)として表され、ステップS22で算出された外側撮像部(右)23bの位置および姿勢を表す行列が、右仮想カメラ情報74RとしてRAMに保存される。なお、上述のように外側撮像部(左)23aの姿勢と外側撮像部(右)23bの姿勢とは常に一致するため、左仮想カメラ58aの姿勢と右仮想カメラ58bの姿勢とも一致する。ステップS23の後、情報処理部31は、次にステップS24の処理を実行する。
ステップS24において、情報処理部31は、検出結果フラグをONに設定してRAMに記憶する。ステップS24の後、情報処理部31は、図13に示すマーカ認識処理を終了する。
一方、ステップS25において、情報処理部31は、検出結果フラグをOFFに設定してRAMに記憶する。ここでは、左目用実画像72Lおよび右目用実画像72Rの何れか一方にマーカが検出されなかったため、マーカの検出結果を示す検出結果フラグがOFFに設定される。ステップS25の後、情報処理部31は、図13に示すマーカ認識処理を終了する。
(保存処理の説明)
次に、保存処理(ステップS7)の詳細について説明する。図14は、保存処理(ステップS7)の詳細を示すフローチャートである。
まず、ステップS31において、情報処理部31は、RAMを参照して保存フラグ77がONか否かを判定する。判定結果が否定の場合、情報処理部31は、次にステップS32の処理を実行する。一方、判定結果が肯定の場合、情報処理部31は、次にステップS34の処理を実行する。
ステップS32において、情報処理部31は、カーソル等を非表示に設定する。ここでは、カーソル55や表示バー56が非表示に設定される。次に、情報処理部31は、ステップS33の処理を実行する。
ステップS33において、情報処理部31は、保存フラグ77をONに設定し、当該保存処理を終了する。
一方、ステップS31において、保存フラグがONに設定されていると判定された場合、情報処理部31は、ステップS34の処理を実行する。ステップS34において、情報処理部31は、表示されている画像(すなわち、左右の画像)を左右静止画像78としてRAMに保存する。なお、静止画像が既にRAMに保存されている場合は、ステップS34の処理は行われない。ここで保存される画像は、前のフレームで上側LCD22に表示された画像であり、上記カーソル等が表示されていない、左目用重畳画像および右目用重畳画像である。情報処理部31は、ステップS34の処理を実行した後、当該保存処理を終了する。
(移動処理の説明)
次に、仮想キャラクタの移動処理(ステップS8)の詳細について説明する。図15は、キャラクタ移動処理(ステップS8)の詳細を示すフローチャートである。
まず、ステップS41において、情報処理部31は、ビュー行列を取得する。ここで取得されるビュー行列は、左右の仮想カメラの中間に仮想カメラ(当該仮想カメラは実際には仮想空間に設定されない)を設定した場合の、当該仮想カメラの仮想空間(XYZ座標系)における位置および姿勢を表す行列である。具体的には、情報処理部31は、左仮想カメラ情報74Lおよび右仮想カメラ情報74Rに基づいて、左仮想カメラ58aと右仮想カメラ58bとの中点(マーカ座標系の座標値)を算出する。そして、情報処理部31は、左仮想カメラ58aの姿勢(これは右仮想カメラ58bの姿勢と一致する)を左ビュー行列から取得し、算出した中点と当該取得した姿勢とを示す行列をビュー行列として算出する。次に、情報処理部31は、ステップS42の処理を実行する。
ステップS42において、情報処理部31は、ビュー行列に基づいてカメラ方向を算出する。ここで算出されるカメラ方向は、上記左右の仮想カメラ(58aおよび58b)の中間の仮想カメラの撮像方向を示す。図18は、ステップS42で算出されるカメラ方向を示す図である。図18に示すように、カメラ方向は、左右の仮想カメラの撮像方向と同じであり、ベクトルとして表わされる。次に、情報処理部31は、ステップS43の処理を実行する。
ステップS43において、情報処理部31は、カメラ方向とアナログスティック15の操作情報に基づいて、仮想キャラクタの移動方向を算出する。ここでは、マーカ座標系における仮想キャラクタの移動方向が算出される。具体的には、まず、カメラ方向を示すベクトルを、仮想空間(マーカ座標系)のXZ平面に投影したXZ平面投影ベクトルが算出される。図19は、カメラ方向ベクトルをXZ平面に投影したXZ平面投影ベクトルを示す図である。また、情報処理部31は、アナログスティック15の操作情報に基づいて、アナログスティック15の入力方向を算出する。図20は、アナログスティック15の入力方向を示す図である。図20に示すように、アナログスティック15の入力方向は、アナログスティック15によって指示された方向(アナログスティック15がスライドされた方向)であり、xy平面(図1参照)上のベクトルとして表される。情報処理部31は、操作情報76を参照して、図20に示すようにアナログスティック15の入力方向を示すベクトルを算出する。
次に、情報処理部31は、上記XZ平面投影ベクトルとアナログスティック15の入力方向ベクトルとに基づいて、仮想キャラクタの移動方向を算出する。具体的には、アナログスティック15に対する入力に応じて、XZ平面投影ベクトルをY軸周りに回転させることによって、移動方向が算出される。より具体的には、情報処理部31は、図20に示すように上記入力方向ベクトルとy軸との角度θを算出し、XZ平面投影ベクトルを当該角度θだけY軸(図19参照)周りに回転させた方向を、移動方向として算出する。このようにして、情報処理部31は、仮想キャラクタの移動方向を算出する。
例えば、アナログスティック15を用いて上方向(図1に示す上方向(y軸正方向))が指示された場合は、XZ平面投影ベクトルは回転されず(回転角度が0度)、移動方向は、XZ平面投影ベクトルと同じ方向になる。また、アナログスティック15を用いて下方向(図1に示す下方向(y軸負方向))が指示された場合は、XZ平面投影ベクトルはY軸周りに180度回転され、移動方向は、XZ平面投影ベクトルと反対方向になる。また、アナログスティック15を用いて右方向(図1に示す右方向(x軸正方向))が指示された場合は、XZ平面投影ベクトルはY軸周りに90度回転され、移動方向は、回転前のXZ平面投影ベクトルに対して右向きになる。
なお、ステップS42で算出されたカメラ方向がY軸と平行な方向である場合、すなわち、仮想カメラの撮像方向がY軸と平行な方向である場合、仮想キャラクタの移動方向は、上記カメラ方向を用いて算出されない。カメラ方向がY軸と平行(Y軸負方向)になるのは、マーカ61を正確に真上から外側撮像部23で撮像した場合である。カメラ方向がY軸と平行な方向である場合、当該カメラ方向をXZ平面に投影したXZ平面投影ベクトルは、図21に示すように、方向を持たない点ベクトルとなる。図21は、仮想カメラの撮像方向がY軸と平行な方向である場合のXZ平面投影ベクトルを示す図である。このため、上記のようにカメラ方向を用いて仮想キャラクタの移動方向を算出することができない。従って、この場合、カメラ方向(仮想カメラの撮像方向)の替わりに、仮想カメラの上方向(図19および図21に示すYc軸方向)が算出される。図22は、カメラ方向がY軸と平行である場合において、仮想カメラの上方向とアナログスティック15の入力方向とを示す図である。図22に示すように、算出された仮想カメラの上方向と、アナログスティック15の入力方向とに基づいて、仮想キャラクタの移動方向が算出される。すなわち、仮想カメラの上方向ベクトルがXZ平面に投影されて、当該投影されたベクトルをマーカ座標系のY軸周りに角度θ(仮想カメラの上方向とアナログスティック15の入力方向とがなす角度)で回転させた方向が、仮想キャラクタの移動方向として算出される。
このようにして算出された移動方向は、仮想空間内の移動方向、すなわち、マーカ座標系での移動方向である。仮想空間内で仮想キャラクタが算出された移動方向に移動すると、仮想キャラクタは、上側LCD22に表示された場合にアナログスティック15を用いて指示された方向(スライドされた方向)と同じ方向に移動する。すなわち、仮想キャラクタの表示上の移動方向は、アナログスティック15をスライドさせた方向と一致する。次に、情報処理部31は、ステップS44の処理を実行する。
ステップS44において、情報処理部31は、ステップS43で算出した移動方向に仮想キャラクタを移動させる。具体的には、情報処理部31は、RAMに記憶された仮想キャラクタ情報のうち、選択されている仮想キャラクタの仮想空間における位置を更新することにより、仮想キャラクタを移動させる。すなわち、情報処理部31は、選択されている仮想キャラクタの仮想空間における位置に、ステップS43で算出した移動方向のベクトル(当該ベクトルは予め定められた大きさを有する)を加えることにより、当該仮想キャラクタの位置を更新して、RAMに記憶する。次に、情報処理部31は、ステップS45の処理を実行する。
ステップS45において、情報処理部31は、仮想キャラクタが所定範囲外に移動したか否かを判定する。具体的には、情報処理部31は、ステップS44で移動させた仮想キャラクタの位置が、マーカ座標系の原点を中心とした所定範囲を超えているか否かを判定する。判定結果が肯定の場合、情報処理部31は、次にステップS46の処理を実行する。一方、判定結果が否定の場合、情報処理部31は、図15に示す移動処理を終了する。
ステップS46において、情報処理部31は、仮想キャラクタの位置を上記所定範囲内に修正する。ここでは、仮想キャラクタがマーカ座標系の原点から遠く離れすぎないようにするための処理である。仮想キャラクタがマーカ座標系の原点から遠く離れすぎて仮想カメラの撮像範囲を超えると、ユーザは、そのキャラクタを見るために外側撮像部23を用いてマーカ61から離れた位置を撮像しようとする。そうすると、外側撮像部23の撮像範囲にマーカ61が含まれなくなり、マーカ座標系を定義することができず、ユーザは仮想キャラクタを見ることができなくなる。このようなことを防止するために、ステップS46において、ステップS44で移動された仮想キャラクタの位置を上記所定範囲内に修正する。その後、情報処理部31は、図15に示す移動処理を終了する。
(注目処理の説明)
次に、注目処理(ステップS10)の詳細について説明する。図16は、注目処理(ステップS10)の詳細を示すフローチャートである。まず、ステップS51において、情報処理部31は、仮想キャラクタの体の位置を取得する。具体的には、情報処理部31は、仮想キャラクタ情報73を参照して、複数の仮想キャラクタのうち、未だ注目処理(ステップS51〜ステップS56の処理)が行われていない仮想キャラクタの体の位置を取得する。上述のように、仮想キャラクタ情報73には、仮想キャラクタ毎に形状データ等とともに、各部位の位置や姿勢情報が含まれており、情報処理部31は、仮想キャラクタ情報73を参照して、仮想キャラクタの体の位置を取得する。次に、情報処理部31は、ステップS52の処理を実行する。
ステップS52において、情報処理部31は、仮想カメラの位置と仮想キャラクタの頭部の位置とに基づいて、仮想キャラクタの視線方向を算出する。図23は、仮想キャラクタの視線方向を示す図である。ここで、「仮想カメラの位置」は、図23に示すように、左仮想カメラ58aの位置と右仮想カメラ58bの位置との中間である。具体的には、情報処理部31は、上記ステップS41で取得したビュー行列(左右の仮想カメラの中点、および、左右の仮想カメラと同じ姿勢を示す行列)に基づいて、「仮想カメラの位置」(左右の仮想カメラの中点)を取得する。また、情報処理部31は、ステップS51で取得した仮想キャラクタの体の位置に基づいて、当該仮想キャラクタの頭部の位置を算出する。仮想キャラクタの体と頭部は、予め定められた位置関係を有しており、情報処理部31は、仮想キャラクタの体の位置に、所定のベクトルを加えることによって当該仮想キャラクタの頭部の位置を算出する。そして、情報処理部31は、上記仮想キャラクタの頭部の位置から上記仮想カメラの位置に向かうベクトルを算出して、仮想キャラクタの視線方向としてRAMに記憶する。次に、情報処理部31は、ステップS53の処理を実行する。なお、仮想キャラクタの体と頭部の位置関係は、当該仮想キャラクタのポーズ毎に異なるため、現在の仮想キャラクタのポーズに応じて仮想キャラクタの頭部の位置が算出される。
ステップS53において、情報処理部31は、ステップS52で算出した視線方向に基づいて、頭部の各軸(XY軸)周りの回転角度を算出する。ここでは、仮想キャラクタの頭部(顔)を上記視線方向に向かせるために必要なX軸およびY軸周りの回転角度が算出される。具体的には、情報処理部31は、仮想キャラクタ情報73を参照して、仮想キャラクタの体の姿勢を示す行列(現在の体の姿勢行列)を取得する。次に、情報処理部31は、当該仮想キャラクタの頭部を上記視線方向に向けたときの頭部の姿勢行列(視線方向の頭部の姿勢行列)を算出する。そして、情報処理部31は、上記現在の体の姿勢行列と上記視線方向の頭部の姿勢行列とに基づいて、頭部の回転を示す回転行列を算出し、当該回転行列に基づいて、各軸(X軸およびY軸)周りの回転角度を算出する。次に、情報処理部31は、ステップS54の処理を実行する。
ステップS54において、情報処理部31は、ステップS53で算出した各軸周りの回転角度が所定範囲外か否かを判定する。具体的には、情報処理部31は、X軸周り(垂直方向)の回転角度が所定範囲(例えば、−60度から60度の範囲)外か否か、および、Y軸周り(水平方向)の回転角度が所定範囲(例えば、−80度から80度の範囲)外か否かを判定する。X軸周りの回転角度およびY軸周りの回転角度の何れか一方でも上記所定範囲外であれば(すなわち、判定結果が肯定)、情報処理部31は、次にステップS55の処理を実行する。一方、X軸周りの回転角度およびY軸周りの回転角度の何れもが上記所定範囲外でなければ(すなわち、判定結果が否定)、情報処理部31は、次にステップS56の処理を実行する。
ステップS55において、情報処理部31は、各軸周りの回転角度を上記所定範囲内に修正する。ステップS55においては、各軸周りの回転角度が上記所定範囲外である場合、当該所定範囲内になるように各軸周りの回転角度が上限値または下限値に修正される。例えば、情報処理部31は、X軸周りの回転角度が上記所定範囲の上限値(60度)を超えている場合、X軸周りの回転角度を当該上限値(60度)に修正する。このように、頭部の回転角度が修正されることにより、例えば、頭部が体に対して水平方向に180度回転したり、頭部が体に対して垂直方向に150度回転したりするように、頭部が不自然に回転することを防止することができる。情報処理部31は、次にステップS56の処理を実行する。
ステップS56において、情報処理部31は、頭部の姿勢行列を決定する。具体的には、情報処理部31は、直前のステップS55で頭部の回転角度が修正された場合は、当該修正された回転角度で頭部を回転させた場合の頭部の姿勢行列を算出する。また、情報処理部31は、ステップS55で頭部の回転角度が修正されなかった場合、ステップS53で算出した視線方向の頭部の姿勢行列を、新たな頭部の姿勢行列として決定し、仮想キャラクタ情報73を更新する。情報処理部31は、次にステップS57の処理を実行する。
ステップS57において、情報処理部31は、全ての仮想キャラクタに対して注目処理(ステップS51〜ステップS56に示す処理)を実行したか否かを判定する。判定結果が否定の場合、情報処理部31は、ステップS51の処理を再び実行する。判定結果が肯定の場合、情報処理部31は、図16に示す注目処理を終了する。
なお、上述した処理は単なる一例であって、例えば、上記処理の順番や各操作に用いら
れるボタン、各判定に用いられた閾値(S45やS54で用いられた値)等は、どのようなものであってもよい。
以上のように、本実施形態では、実空間と仮想空間とが対応付けられ、当該仮想空間に仮想オブジェクトが配置される。そして、外側撮像部23で実空間を撮像するとともに、仮想カメラで仮想オブジェクトを撮像することにより、あたかも実空間に仮想オブジェクトが存在するような感覚をユーザに与えることができる写真を撮影することができる。
また、本実施形態では、ユーザの操作によって、仮想空間に存在する仮想キャラクタを移動させたり、仮想キャラクタのポーズを変更したり、仮想キャラクタをカメラに注目させたりすることができる。これにより、仮想キャラクタが実際に実空間に存在するような感覚をユーザに与えることができる。例えば、仮想キャラクタの顔が仮想カメラ(外側撮像部23)に向くように、仮想キャラクタの顔(頭部)の姿勢を変更する。これにより、当該仮想キャラクタがあたかも実空間に存在するような感覚を与えることができる。さらに、本実施形態では、左右の仮想カメラによって仮想キャラクタを撮像するため、立体的な画像となる。そして、左右の仮想カメラの中心を向くようにして、仮想キャラクタの頭部の姿勢が設定される。このため、仮想キャラクタが実空間に存在するような感覚をユーザに与えることができる。
また、仮想キャラクタをカメラに注目させる場合において、仮想キャラクタの頭部が回転する角度は、所定の範囲(横方向に)に制限される。具体的には、仮想キャラクタの頭部の可動範囲は、水平方向には−80度から80度の範囲、垂直方向には−60度から60度の範囲に制限される。例えば、仮想キャラクタを真後ろから撮像して当該仮想キャラクタをカメラに注目させた場合、当該仮想キャラクタの顔は、真後ろを向かずに斜め方向(体の向きに対して水平方向に80度頭を回転させた方向)を向く。このように、頭の回転角度を制限することにより、仮想キャラクタが実空間に存在してカメラの方向を向いているような感覚を得ることができる。すなわち、人間の首が180度後方を向くことは通常では考えられず、仮想キャラクタの動作はこのような現実の人間の動作に近い自然な動作となる。このため、仮想キャラクタが実際に実空間に存在するような感覚をユーザに与えることができる。
(変形例)
なお、本実施形態では、仮想オブジェクトとして人を模した仮想キャラクタを仮想空間に配置した。他の実施形態では、仮想オブジェクトは、どのようなオブジェクトであってもよく、例えば、動物を模したオブジェクト、植物を模したオブジェクト、ロボットのオブジェクト等であってもよい。
また、本実施形態では、ボタン操作によって仮想キャラクタを移動させたり、ポーズを変更したりした。他の実施形態では、複数の仮想キャラクタの位置や姿勢のパターンが予め記憶されてもよい。例えば、5人の仮想キャラクタが直線状に配置してそれぞれが異なるポーズを取るようなパターンや、5人の仮想キャラクタが5角形を形成するように配置されてそれぞれが同じポーズを取るようなパターンが予め記憶されてもよい。そして、ユーザによる操作に応じて、各仮想キャラクタの位置や姿勢を予め記憶されたパターンに変更してもよい。
また、本実施形態では、上記ボタン操作に応じて、仮想キャラクタを移動させたり、表情やポーズを変化させたり、注目させたりしたが、上記ボタン操作は単なる一例であって、どのボタンが押された場合にどのような動作をさせるかは、任意に設定されてもよい。他の実施形態では、下側LCD12に操作のためのアイコンが複数表示され、当該画面(タッチパネル13)に対するタッチ操作によって、アイコンが選択されて、仮想キャラクタの位置や姿勢、表情等が変更されてもよいし、タッチ操作によって仮想キャラクタを注目させてもよい。また、他の実施形態では、加速度センサ39や角速度センサ46が入力手段として機能してもよい。具体的には、加速度センサ39や角速度センサ46の検出結果に基づいて、ゲーム装置10に対する所定のジェスチャ操作(例えば、ゲーム装置10を上下方向に移動させたり、ゲーム装置10を傾けたりする操作)が行われたか否かを判定し、当該判定結果に応じて、仮想キャラクタを移動させたり、注目させたりしてもよい。
また、本実施形態では、仮想キャラクタの位置および姿勢がユーザの操作によって変更されたが(移動処理および注目処理が実行されたが)、他の実施形態では、仮想キャラクタの位置または姿勢がユーザの操作によって変更されてもよい(移動処理または注目処理の何れか一方が実行されてもよい)。
また、本実施形態では、注目処理において、仮想キャラクタの顔が仮想カメラを向くように顔(頭部)の姿勢を変更した。他の実施形態では、体全体を仮想カメラの方向に向けてもよい。また、他の実施形態では、顔ではなく、目のみを仮想カメラの方向に向けてもよいし、腕や足等を仮想カメラの方向に向けてもよい。すなわち、注目処理において、仮想キャラクタの体の一部位を仮想カメラの方向に向けてもよい。
また、本実施形態では、注目処理において左右の仮想カメラの中心に仮想キャラクタの顔を向けたが、他の実施形態では、左右の仮想カメラのどちらか一方に仮想キャラクタの顔を向けてもよい。
また、本実施形態では、立体視可能な画像(立体画像)を撮像して保存した。すなわち、本実施形態では、実空間を2つのカメラ(外側撮像部(左)23aおよび外側撮像部(右)23b)で撮像し、仮想空間を2つの仮想カメラ(左仮想カメラ58aおよび右仮想カメラ58b)で撮像して、保存した。他の実施形態では、平面画像を撮像して保存してもよい。すなわち、他の実施形態では、1つの実カメラで実空間を撮像し、1つの仮想カメラで仮想空間を撮像してもよい。
また、本実施形態では、マーカ61を外側撮像部23で撮像することによって、外側撮像部23とマーカ61との位置関係(相対的な位置および姿勢)を算出した。そして、算出した位置関係に基づいて、仮想空間(マーカ座標系)を定義した。他の実施形態では、マーカ61に限らず、他の物体を撮像画像から認識して、上記位置関係が算出されてもよい。例えば、実空間に存在する所定の物体(例えば、実空間に存在する椅子やテーブル等でもよい)をパターンマッチング等の画像認識により検出し、上記位置関係が算出されて、仮想空間が定義されてもよい。すなわち、他の実施形態では、実空間に存在する特定対象物(上記マーカや所定の物体)を撮像画像から認識して、当該特定対象物と外側撮像部23との位置関係が算出されてもよい。また、特定対象物は、実カメラによって撮像された画像に基づいて認識されず、他の認識手段(例えば、超音波センサ等でもよい)によって認識されてもよい。
また、他の実施形態では、GPSや加速度センサ、角速度センサ、地磁気センサ等によって、実カメラの位置および姿勢が検出されてもよい。そして、検出された位置および姿勢に基づいて、仮想空間内の仮想カメラの位置および姿勢が設定され、実カメラで撮像した画像と仮想カメラで仮想空間を撮像した画像とを重畳してもよい。例えば、実空間に対応した仮想空間の所定の位置に仮想オブジェクトが配置され、当該仮想空間の所定の位置に対応する実空間の位置を所定の方向から実カメラで撮影してもよい。この場合、GPSや姿勢検出手段(加速度センサや角速度センサ、地磁気センサ等)によって実カメラの位置および姿勢を検出することができ、当該実カメラの位置および姿勢に一致するように仮想空間に仮想カメラを設定することができる。このようにして実カメラで撮像された画像と仮想カメラで撮像された画像とを重ね合わせることにより、実空間のその位置に仮想オブジェクトが存在するような写真を撮影することができる。
また、本実施形態では、ビデオシースルー方式を用いて拡張現実感を実現した。すなわち、本実施形態では、外側撮像部23によって撮像された画像と、仮想カメラ(左右の仮想カメラ)によって撮像された画像とが重ね合わされて重畳画像が生成され、当該重畳画像が上側LCD22に表示された。他の実施形態では、光学シースルー方式により拡張現実感を実現してもよい。例えば、実空間に配置されたマーカを検出するためのカメラを備えたヘッドマウンドディスプレイをユーザが装着し、ユーザはメガネのレンズ部分に相当するディスプレイ部を通して実空間を視認できるようになっている。このディプレイ部は、現実空間を透過してユーザの目に直接導くことが可能な素材によって構成されている。さらに、このディスプレイ部にはコンピュータにより生成した仮想オブジェクトの画像を表示させることができるようになっている。
また、他の実施形態では、上述した撮影処理の方法は、ゲーム装置に限らず任意の電子機器、例えば、PDA(Personal Digital Assistant)や高機能携帯電話、カメラ(装置としてカメラ)等に適用されてもよい。
また、本実施形態では、表示装置として裸眼で立体視画像を表示可能なLCDが用いられた。他の実施形態では、時分割方式や偏向方式、アナグリフ方式(赤青眼鏡方式)などの眼鏡を用いて立体表示を行うような場合でも、本発明は適用可能である。
また、他の実施形態では、有線や無線等で通信可能に接続された複数の情報処理装置が各処理を分担して処理することにより、上述した撮影処理方法を実現する撮影処理システムとして構築されてもよい。例えば、外側撮像部23が情報処理装置と分離された構成であって、外側撮像部23が情報処理装置に有線または無線で接続されてもよい。また、外側撮像部23の位置および姿勢が情報処理装置と分離した検出手段によって検出され、当該検出結果が情報処理装置に送信されてもよい。
また、上記実施形態においては、ゲーム装置10の情報処理部31が所定のプログラムを実行することによって、上述したフローチャートによる処理が行われた。他の実施形態においては、上記処理の一部又は全部は、ゲーム装置10が備える専用回路によって行われてもよい。
また、上記撮影処理プログラムは、上記メモリに限らず、光ディスクや磁気ディスク等、コンピュータ読み取り可能な記憶媒体に記憶されてゲーム装置10に提供されてもよい。また、例えば、ネットワーク上のサーバのRAMに上記撮影処理プログラムが記憶され、ゲーム装置10が当該ネットワークに接続されて、当該撮影処理プログラムがゲーム装置10に提供されてもよい。