図1を参照して、本発明の一実施形態に係る画像処理プログラムを実行する装置について説明する。以下、説明を具体的にするために、当該装置の一例の据置型のゲーム装置本体5を含むゲームシステムについて説明する。なお、図1は据置型のゲーム装置3を含むゲームシステム1の外観図であり、図2はゲーム装置本体5のブロック図である。以下、当該ゲームシステム1について説明する。
図1において、ゲームシステム1は、表示手段の一例の家庭用テレビジョン受像機(以下、モニタと記載する)2と、当該モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置本体5から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明の画像処理プログラムの一例であるゲームプログラムを記録した光ディスク4と、当該光ディスク4のゲームプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体5に与えるためのコントローラ7とを備えている。
また、ゲーム装置本体5は、無線コントローラモジュール19(図2参照)を内蔵する。無線コントローラモジュール19は、コントローラ7から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7とゲーム装置本体5とを無線通信によって接続する。さらに、ゲーム装置本体5には、当該ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。
また、ゲーム装置本体5には、後述する各種データやゲームソフト処理におけるセーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ17(図2参照)が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。また、ゲームプログラム等は、光ディスク4に限らず、フラッシュメモリ17に予め記録されたものを実行するようにしてもよい。さらに、ゲーム装置本体5は、フラッシュメモリ17に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置本体5のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
コントローラ7は、無線コントローラモジュール19を内蔵するゲーム装置本体5へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて操作情報等の送信データを無線送信する。コントローラ7は、主にモニタ2の表示画面に表示されるオブジェクト等を操作するための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キーやスティック等を含む)とが設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって例えば赤外光を出力する。また、コントローラ7は、ゲーム装置本体5の無線コントローラモジュール19から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
次に、図2を参照して、ゲーム装置本体5の内部構成について説明する。図2は、ゲーム装置本体5の構成を示すブロック図である。ゲーム装置本体5は、CPU(Central Processing Unit)10、システムLSI(Large Scale Integration)11、外部メインメモリ12、ROM/RTC(Read
Only Memory/Real Time Clock)13、ディスクドライブ14、およびAV−IC(Audio Video−Integrated Circuit)15等を有する。
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムLSI11の内部構成については、後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置本体5の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ35または外部メインメモリ12に読み出したデータを書き込む。
また、システムLSI11には、入出力プロセッサ31、GPU(Graphics Processor Unit)32、DSP(Digital Signal Processor)33、VRAM(Video RAM)34、および内部メインメモリ35が設けられる。図示は省略するが、これらの構成要素31〜35は、内部バスによって互いに接続される。
GPU32は、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM34は、GPU32がグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU32は、VRAM34に記憶されたデータを用いて画像データを作成する。
DSP33は、オーディオプロセッサとして機能し、内部メインメモリ35や外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。そして、スピーカ2aから音を出力させる場合、DSP33は、上記サウンドデータを読み出し、AV−IC15およびAVコネクタ16を介して、モニタ2に備えるスピーカ2aに出力させる。また、コントローラ7に搭載されたスピーカ706(図7参照)から音を出力させる場合、DSP33は、上記サウンドデータを読み出し、無線コントローラモジュール19およびアンテナ23を介して、音声データをコントローラ7に送信する。
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、AVコネクタ16を介して、読み出した画像データをモニタ2に出力するとともに、読み出した音声データをモニタ2に内蔵されるスピーカ2aに出力する。これによって、画像がモニタ2に表示されるとともに音がスピーカ2aから出力される。
入出力プロセッサ(I/Oプロセッサ)31は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ31は、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、および外部メモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
入出力プロセッサ31は、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ31は、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介して当該データをネットワークに送信する。また、入出力プロセッサ31は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22、および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10は、ゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムや画像処理プログラムの実行動作で利用する。フラッシュメモリ17には、ゲーム装置本体5と他のゲーム装置や各種サーバとの間で送受信されるデータの他、上述したようにゲーム装置本体5を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
また、入出力プロセッサ31は、アンテナ23および無線コントローラモジュール19を介して、コントローラ7から送信される操作データ等を受信し、内部メインメモリ35または外部メインメモリ12のバッファ領域に記憶(一時記憶)する。なお、内部メインメモリ35には、外部メインメモリ12と同様に、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、CPU10のワーク領域やバッファ領域として用いられてもかまわない。
さらに、入出力プロセッサ31には、拡張コネクタ20および外部メモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ31は、拡張コネクタ20や外部メモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
また、ゲーム装置本体5(例えば、前部主面)には、当該ゲーム装置本体5の電源ボタン24、ゲーム処理のリセットボタン25、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトボタン26等が設けられている。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置本体5の各構成要素に対して、図示しないACアダプタを経て電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置本体5の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た斜視図である。図4は、コントローラ7を下面前方から見た斜視図である。
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に4つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72a〜72gは、ゲーム装置本体5が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置本体5の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール19からコントローラ7へ、複数のLED702のうち、上記コントローラ種別に対応するLEDを点灯させるための信号が送信される。
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図5に示すスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
一方、ハウジング71下面には、凹部が形成されている。ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング71の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
次に、図5および図6を参照して、コントローラ7の内部構造について説明する。なお、図5は、コントローラ7の上筐体(ハウジング71の一部)を外した状態を後面側から見た斜視図である。図6は、コントローラ7の下筐体(ハウジング71の一部)を外した状態を前面側から見た斜視図である。ここで、図6に示す基板700は、図5に示す基板700の裏面から見た斜視図となっている。
図5において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751等(図6、図7参照)に接続される。また、無線モジュール753(図7参照)およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。
また、加速度センサ701は、操作ボタン72dの左側の基板700上(つまり、基板700の中央部ではなく周辺部)に設けられる。したがって、加速度センサ701は、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ7の動きを良好な感度でゲーム装置本体5等が判定することができる。例えば、コントローラ7は、3軸の加速度センサ701を備えている。この3軸の加速度センサ701は、3方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。そして、加速度センサ701でそれぞれ検知された加速度を示すデータは、通信部75に出力される。
一方、図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体5から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。
そして、基板700の下主面上には、バイブレータ704が取り付けられる。バイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704は、基板700等に形成された配線によってマイコン751と接続され、ゲーム装置本体5から送信された振動データに応じてその作動をオン/オフする。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
次に、図7を参照して、コントローラ7の内部構成について説明する。なお、図7は、コントローラ7の構成を示すブロック図である。
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コントローラ7のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置本体5からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置本体5から送信されたサウンドデータ等を処理する。また、マイコン751は、通信部75を介してゲーム装置本体5から送信された振動データ(例えば、バイブレータ704をONまたはOFFする信号)等に応じて、バイブレータ704を作動させる。
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの3軸方向の加速度信号(加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、加速度データ、処理結果データ)を無線コントローラモジュール19へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から無線コントローラモジュール19への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、無線コントローラモジュール19への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥース(登録商標)の技術を用いて、操作情報を示す電波信号を所定周波数の搬送波を用いてアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からの加速度データ、および撮像情報演算部74からの処理結果データがコントローラ7から送信される。そして、ゲーム装置本体5の無線コントローラモジュール19でその電波信号を受信し、ゲーム装置本体5で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体5のCPU10は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
図8および図9を参照して、プレイヤがコントローラ7を一方の手で把持した状態について説明する。なお、図8は、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の前面側から見た一例である。図9は、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の左側面側から見た一例である。
図8および図9に示すように、コントローラ7は、全体として大人や子供の片手で把持可能な大きさである。そして、プレイヤの親指をコントローラ7の上面(例えば、十字キー72a付近)に添え、プレイヤの人差し指をコントローラ7下面の凹部(例えば、操作ボタン72i付近)に添えたとき、コントローラ7の前面に設けられている撮像情報演算部74の光入射口がプレイヤの前方方向に露出する。なお、このようなコントローラ7に対する把持状態は、プレイヤの左手であっても同様に行えることは言うまでもない。
このように、コントローラ7は、プレイヤが片手で把持した状態で十字キー72aや操作ボタン72i等の操作部72を容易に操作することができる。さらに、プレイヤがコントローラ7を片手で把持したとき、当該コントローラ7の前面に設けられている撮像情報演算部74の光入射口が露出するため、上述した2つのマーカ8Lおよび8Rからの赤外光を容易に当該光入射口から取り入れることができる。つまり、プレイヤは、コントローラ7が有する撮像情報演算部74の機能を阻害することなくコントローラ7を片手で把持することができる。したがって、プレイヤがコントローラ7を把持した手を表示画面に対して動かすことによって、コントローラ7は、プレイヤの手の運動が表示画面に直接作用する操作入力機能をさらに備えることができる。
このように、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、プレイヤは、一方の手(例えば右手)でコントローラ7を把持する。そして、プレイヤは、コントローラ7の前面(撮像情報演算部74が撮像する光の入射口側)がモニタ2に向くようにコントローラ7を把持する。一方、モニタ2の表示画面近傍には、2つのマーカ8Lおよび8Rが設置される(図1参照)。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力し、撮像情報演算部74の撮像対象となる。
図10に示すように、マーカ8Lおよび8Rは、それぞれ視野角θ1を有している。また、撮像素子743は、視野角θ2を有している。例えば、マーカ8Lおよび8Rの視野角θ1は共に34°(半値角)であり、撮像素子743の視野角θ2は41°である。そして、撮像素子743の視野角θ2の中にマーカ8Lおよび8Rが共に存在し、マーカ8Lの視野角θ1の中でかつマーカ8Rの視野角θ1の中に撮像素子743が存在するとき、ゲーム装置本体5は、2つのマーカ8Lおよび8Rによる高輝度点に関する位置データを用いてコントローラ7の位置(マーカ8Lおよび8Rからの距離を含む)を算出する。
プレイヤがその前面がモニタ2に向くようにコントローラ7を把持することによって、撮像情報演算部74には2つのマーカ8Lおよび8Rが出力した赤外光が入射する。そして、赤外線フィルタ741およびレンズ742を介して、入射した赤外光を撮像素子743が撮像し、当該撮像画像を画像処理回路744が処理する。ここで、撮像情報演算部74では、マーカ8Lおよび8Rから出力される赤外線成分を検出することで、上記撮像画像における当該マーカ8Lおよび8Rの位置情報(対象画像の位置)や面積、直径、幅等のサイズ情報を取得する。具体的には、画像処理回路744は、撮像素子743が撮像した画像データを解析して、まず面積情報からマーカ8Lおよび8Rからの赤外光ではあり得ない画像を除外し、さらに輝度が高い点をマーカ8Lおよび8Rそれぞれの位置として判別する。そして、撮像情報演算部74は、判別されたそれらの輝点の重心位置等の位置情報を取得し、上記処理結果データとして出力する。ここで、上記処理結果データである位置情報は、撮像画像における所定の基準点(例えば、撮像画像の中央や左上隅)を原点とした座標値として出力するものでもよく、所定のタイミングにおける輝点位置を基準点として、当該基準位置からの現在の輝点位置の差をベクトルとして出力するものでもよい。つまり、上記対象画像の位置情報は、撮像素子743が撮像した撮像画像に対して所定の基準点を設定した場合に、当該基準点に対する差として用いられるパラメータである。このような位置情報をゲーム装置本体5へ送信することによって、ゲーム装置本体5では、基準からの上記位置情報の差に基づいて、マーカ8Lおよび8Rに対する撮像情報演算部74、すなわちコントローラ7の動き、姿勢、位置等に応じた信号の変化量を得ることができる。具体的には、コントローラ7が動かされることによって、通信部75から送信される画像内の高輝度点の位置が変化するため、高輝度点の位置の変化に対応させた方向入力や座標入力を行うことで、3次元空間に対してコントローラ7の移動方向に沿った方向入力や座標入力を行うことができる。なお、後述するゲーム処理動作例では、撮像情報演算部74が撮像画像におけるマーカ8Lおよび8Rの対象画像それぞれの重心位置の座標を少なくとも取得し、上記処理結果データとして出力する例を用いる。
このように、コントローラ7の撮像情報演算部74によって、固定的に設置されたマーカ(実施例では、2つのマーカ8Lおよび8Rからの赤外光)を撮像することによって、ゲーム装置本体5におけるゲーム処理において、コントローラ7から出力されるデータを処理してコントローラ7の動き、姿勢、位置等に対応した操作が可能となり、ボタンを押下するような操作ボタンや操作キーとは異なった直感的な操作入力となる。また、上述したように上記マーカは、モニタ2の表示画面近傍に設置されているため、マーカに対する位置をモニタ2の表示画面に対するコントローラ7の動き、姿勢、位置等に換算することも容易に行うことができる。つまり、コントローラ7の動き、姿勢、位置等による処理結果データは、モニタ2の表示画面に直接作用する操作入力として用いることができる。なお、ゲームシステム1では、マーカ8Lおよび8Rを撮像した撮像画像を用いて、マーカ8Lおよび8Rからコントローラ7までの距離もモニタ2の表示画面に直接作用する操作入力として用いることができるが、詳細な動作については後述する。
次に、図11〜図13を参照して、プレイヤPの操作に応じてモニタ2に表示される画面例について説明する。なお、図11は、プレイヤPがマーカ8Lおよび8Rに対して前後方向へ操作する一例を示す上面図である。図12および図13は、図11に示した操作に応じて、モニタ2に表示される画面例を示す図である。
図11において、プレイヤPは、コントローラ7の前面をマーカ8Lおよび8R(モニタ2)に向けて、当該コントローラ7を把持している。そして、マーカ8Lおよび8Rの中点からコントローラ7の前面(厳密には撮像素子743)までの距離を距離Dとする。ここで、図11に示す状態Aでは、プレイヤが距離Dbs(後述する基準距離Dbs)となる位置でコントローラ7を把持している。そして、プレイヤPは、コントローラ7をモニタ2に向かって前後に動かすことによって、マーカ8Lおよび8Rの中点からコントローラ7の前面までの距離Dを変化させることができる。例えば、プレイヤPがコントローラ7をモニタ2に向かって前に動かすことによって、距離Dbsから距離Dnの位置へコントローラ7を動かしている(状態B)。また、プレイヤがコントローラ7をモニタ2に向かって後ろに動かすことによって、距離Dbsから距離Dfの位置へコントローラ7を動かしている(状態C)。
図12は、上記状態Bにおいてモニタ2に表示される画面例である。図12において、モニタ2には、状態Bにおいて背景画像に重畳されて画像IMbの一部が表示されている。ここで、画像IMbは、コントローラ7で指し示された位置やコントローラ7の姿勢に応じて、モニタ2の表示領域において移動および/または回転するキャラクタ画像である。また、画像IMbは、状態Aで表示される画像に対して拡大されてモニタ2に表示される。つまり、プレイヤPは、コントローラ7をモニタ2に近づけることによって、モニタ2に表示されたキャラクタ画像(画像IMb)を拡大して表示することができる。さらに、プレイヤPは、コントローラ7をモニタ2に対して上下左右に動かしたり、コントローラ7を左右にひねったりすることよって、モニタ2に表示された画像IMbを移動および/または回転させて表示することができる。なお、図12においては、プレイヤPがコントローラ7で指し示した位置に応じて設定される画像IMbの位置が、画像位置Pimbとして記載されている。
図13は、上記状態Cにおいてモニタ2に表示される画面例である。図13において、モニタ2には、状態Cにおいて背景画像に重畳されて画像IMsが表示されている。ここで、画像IMsは、画像IMbと同様にコントローラ7で指し示された位置やコントローラ7の姿勢に応じて、モニタ2の表示領域において移動および/または回転するキャラクタ画像である。また、画像IMsは、状態Aで表示される画像や図12に示した画像IMbに対して縮小されてモニタ2に表示される。つまり、プレイヤPは、コントローラ7をモニタ2から遠ざけることによって、モニタ2に表示されたキャラクタ画像(画像IMs)を縮小して表示することができる。さらに、プレイヤPは、画像IMbと同様に、コントローラ7をモニタ2に対して上下左右に動かしたり、コントローラ7を左右にひねったりすることよって、モニタ2に表示された画像IMsを移動および/または回転させて表示することができる。なお、図13においては、プレイヤPがコントローラ7で指し示した位置に応じて設定される画像IMsの位置が、画像位置Pimsとして記載されている。
また、図12および図13を比較して明らかなように、画像IMbおよび画像IMsが移動可能な範囲(以下、移動可能範囲と記載する)は、それぞれ異なった大きさで設定される。ここで、画像IMbおよび画像IMsの移動可能範囲は、それぞれの画像位置PimbおよびPimsが配置可能な領域を示している。具体的には、拡大表示されている画像IMbに対して相対的に広い移動可能範囲が設定され、図12に示した一例ではモニタ2の表示領域より広い範囲の移動可能範囲が設定されている。また、縮小表示されている画像IMsに対して相対的に狭い移動可能範囲が設定され、図13に示した一例ではモニタ2の表示領域より狭い範囲の移動可能範囲が設定されている。このように、画像IMの拡大率に応じた移動可能範囲を設定することによって、拡大率が相対的に高い画像IMbであっても移動可能範囲が不足したり、拡大率が相対的に低い画像IMsの移動によって当該画像IMsが表示領域外に消えてしまったりするようなことがなく、画像IMに対して適切な移動制御を行うことができる。
さらに、プレイヤPがコントローラ7をモニタ2に対して上下左右に動かすことによって移動する画像IMの移動速度は、上記距離Dに応じて変化する。具体的には、上記状態B、すなわちモニタ2に近づいてコントローラ7を操作する場合、コントローラ7が指し示す位置を移動させることによって相対的に画像IMの移動速度を速くする。一方、上記状態C、すなわちモニタ2から離れてコントローラ7を操作する場合、コントローラ7が指し示す位置を移動させることによって相対的に画像IMの移動速度を遅くする。
ここで、プレイヤPがコントローラ7を同じ角度で左右に動かしたとしても、モニタ2とコントローラ7との距離によって当該コントローラ7で指し示す位置が変化する。例えば、図14に示すように、プレイヤPがモニタ2に近づいて表示画面の両端をそれぞれコントローラ7Nで指し示すためには、コントローラ7Nの角度をθNだけ動かす必要がある。一方、モニタ2から遠い位置でプレイヤPが同じ表示画面の両端をそれぞれコントローラ7Fで指し示すためには、コントローラ7Fの角度をθFだけ動かす必要がある。そして、この2つの状態を比較すると、図14に示すように操作角度θN>操作角度θFとなる。つまり、プレイヤPがモニタ2に近づいてコントローラ7で指し示す場合、モニタ2から遠い位置で操作する場合と比較するとコントローラ7の移動角度を大きくする必要がある。このような距離Dに応じて変化する操作性の違いを少なくするために、コントローラ7で指し示す位置に対して設定する画像位置Pimの移動量を、距離Dに応じて変化させている。なお、コントローラ7で指し示す位置に対して設定される画像IMの画像位置Pimが、本発明の配置位置に相当する。
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図15を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図15は、ゲーム装置本体5の外部メインメモリ12および/または内部メインメモリ35(以下、2つのメインメモリを総称して、単にメインメモリと記載する)に記憶される主なデータの一例を示す図である。
図15に示すように、メインメモリには、操作情報Da、操作状態情報Db、および表示情報Dc等が記憶される。なお、メインメモリには、図15に示す情報に含まれるデータの他、ゲーム処理に必要なデータが適宜記憶される。
操作情報Daは、コントローラ7から送信データとして送信されてくる一連の操作情報(キーデータ、加速度データ、および処理結果データ)が格納され、最新の操作情報に更新される。操作情報Daには、上述の処理結果データの位置情報に相当する第1座標データDa1および第2座標データDa2が含まれる。第1座標データDa1は、撮像素子743が撮像した撮像画像に対して、2つのマーカ8Lおよび8Rのうちの一方の画像の位置(撮像画像内における位置)を示すデータである。第2座標データDa2は、他方のマーカの画像の位置(撮像画像内における位置)を示すデータである。例えば、撮像画像におけるマーカの画像の位置は、撮像画像におけるxy座標系によって表される。
また、操作情報Daには、撮像画像から得られる処理結果データの一例の座標データ(第1座標データDa1および第2座標データDa2)の他、操作部72から得られるキーデータDa3等が含まれる。なお、ゲーム装置本体5に備える無線コントローラモジュール19は、コントローラ7から所定間隔例えば5msごとに送信される一連の操作情報を受信し、無線コントローラモジュール19に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた最新の操作情報がゲーム処理間隔である1フレーム毎(例えば1/60秒毎)に読み出されて、メインメモリの操作情報Daが更新される。
操作状態情報Dbは、コントローラ7の操作状態を撮像画像に基づいて判断した情報が格納される。操作状態情報Dbは、撮像画像に含まれる対象画像(マーカ)の位置や向きから得られるデータが格納され、具体的には、方向データDb1、中点データDb2、現在距離データDb3、基準距離データDb4、指示座標データDb5、および指示方向データDb6等を含む。方向データDb1は、第1座標データDa1が示す位置から第2座標データDa2が示す位置への方向を示すデータである。ここでは、方向データDb1は、第1座標データDa1が示す位置を始点とし第2座標データDa2が示す位置を終点とするベクトルのデータとする。中点データDb2は、第1座標データDa1が示す位置と第2座標データDa2が示す位置との中点の座標を示す。ここで、2つのマーカ(マーカ8Lおよび8R)の画像を1つの対象画像としてみた場合、中点データDb2は、撮像画像における対象画像の位置を示すことになる。現在距離データDb3は、第1座標データDa1および第2座標データDa2に基づいて算出された、マーカ8Lおよび8Rからコントローラ7までの現在の距離Dを示すデータである。基準距離データDb4は、所定タイミング(例えば、後述する処理を開始したタイミング)におけるマーカ8Lおよび8Rからコントローラ7までの距離Dを基準距離Dbsとして示すデータである。指示座標データDb5は、コントローラ7によって指し示された仮想ゲーム空間内の指示位置(Xt,Yt,Zt)を示すデータである。指示方向データDb6は、コントローラ7の姿勢(例えば、ひねり方向の角度)によって設定される仮想ゲーム空間内の指示方向を示すデータである。
表示情報Dcは、画像スケール値データDc1、移動量スケール値データDc2、移動可能範囲データDc3、画像位置データDc4、画像角度データDc5、および画像データDc6等を含んでいる。画像スケール値データDc1は、距離Dおよび基準距離Dbsに基づいて設定される画像IMのスケール値(Sx,Sy)を示すデータである。移動量スケール値データDc2は、スケール値(Sx,Sy)に基づいて設定される画像IMの移動量のスケール値(STx,STy)を示すデータである。移動可能範囲データDc3は、画像位置Pimを配置できる仮想ゲーム空間内の範囲を示すデータである。画像位置データDc4は、仮想ゲーム空間内における画像位置Pimの座標(Xans,Yans,Zans)を示すデータである。画像角度データDc5は、画像IMを仮想ゲーム空間内に配置する際の画像角度Aimを示すデータである。画像データDc6は、画像IMや背景画像を表示装置(モニタ2)に表示するための画像データである。
次に、図16〜図19を参照して、ゲーム装置本体5において行われる画像処理の詳細を説明する。なお、図16は、ゲーム装置本体5において実行される画像処理の流れを示すフローチャートである。図17は、図16のステップ52およびステップ65における距離算出処理の詳細な動作を示すサブルーチンである。図18は、距離Dを算出する動作を説明するための図である。図19は、仮想ゲーム空間に設定される画像位置および移動可能範囲の概念図である。なお、図16および図17に示すフローチャートにおいては、ゲーム処理のうち、主に画像IMをモニタ2に表示する処理について説明し、本願発明と直接関連しない他の処理については詳細な説明を省略する。また、図16および図17では、CPU10が実行する各ステップを「S」と略称する。
ゲーム装置本体5の電源ボタン24がオンされると、ゲーム装置本体5のCPU10は、ROM/RTC13に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4や他の記録媒体に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が可能となる状態となる。図16に示すフローチャートは、以上の処理が完了した後に行われる画像処理を示すフローチャートである。
図16において、CPU10は、コントローラ7から受信した操作情報を取得し(ステップ50)、処理を次のステップに進める。そして、CPU10は、取得した最新の操作情報を用いて操作情報Daを更新する。ここで、ステップ50で取得される操作情報には、マーカ8Lおよび8Rの撮像画像内における位置を示す処理結果データの他、コントローラ7の操作部72がどのように操作されたか示すキーデータが含まれている。ここでは、通信部75は、所定の時間間隔(例えば5ms間隔)で操作情報をゲーム装置本体5へ送信する。そして、CPU10は、送信された最新の操作情報を1フレーム毎に利用して、第1座標データDa1、第2座標データDa2、およびキーデータDa3を更新する。
次に、CPU10は、所定の画像処理を開始するか否かを判断する(ステップ51)。例えば、CPU10は、キーデータDa3を参照し、上記画像処理の開始を示す選択肢が選択されたことや、上記画像処理の開始を示すボタンが押下されたことを検出することによって、当該画像処理の開始を判断する。そして、CPU10は、上記画像処理を開始する場合、処理を次のステップ52に進める。一方、CPU10は、上記画像処理を開始しない場合、上記ステップ50に戻って処理を繰り返す。
ステップ52において、CPU10は、距離算出処理を行い、処理を次のステップに進める。距離算出処理においては、コントローラ7から送信され記憶された第1座標データDa1および第2座標データDa2に基づいて、コントローラ7とマーカ8Lおよび8Rとの距離Dが算出される。以下、図17および図18を参照して、ステップ52における距離算出処理の詳細な動作について説明する。
図17において、CPU10は、第1座標データDa1および第2座標データDa2を参照し(ステップ71)、距離miを算出する(ステップ72)。図18に示すように、距離miは、コントローラ7の撮像情報演算部74で撮像された撮像画像内での2点間の距離である。この2点は、マーカ8Lおよび8Rを撮像した画像に相当し、それぞれの座標を示すデータがそれぞれ第1座標データDa1および第2座標データDa2に格納されている。したがって、CPU10は、第1座標データDa1および第2座標データDa2を用いれば、距離miを算出することができる。具体的には、第1座標データDa1が位置座標(Lx,Ly)、第2座標データDa2が位置座標(Rx,Ry)であるとすると、
で算出される。
次に、CPU10は、マーカ8Lおよび8Rの設置位置に対する撮像素子743の撮像可能範囲の幅w(図18参照)を算出する(ステップ73)。ここで、幅wは、
w=wi×m/mi
で算出される。ここで、mは、マーカ8Lおよび8Rの設置間隔(実際の設置間隔;例えば、20cm)であり、固定値である。また、wiは、幅wに対応する撮像素子743の撮像画像の幅wiであり、固定値である。これら設置間隔mおよび幅wiは、いずれも固定値であるため、予めゲーム装置本体5内の記憶手段に格納されている。なお、設置間隔mについては、プレイヤの設置環境に応じて任意の間隔でマーカ8Lおよび8Rを設置してもかまわない。この場合、マーカ8Lおよび8Rを設置した間隔を設置間隔mとしてプレイヤが入力するようにすれば、上記数式を同様に扱うことができる。
次に、CPU10は、幅wおよび撮像素子743の視野角θを用いて、マーカ8Lおよび8Rと撮像素子743(コントローラ7)との現在の距離D(図18参照)を算出し、現在距離データDb3を更新して(ステップ74)、当該サブルーチンによる処理を終了する。ここで、距離Dは、
D=(w/2)/{tan(θ/2)}
の関係式から算出することができる。ここで、視野角θは固定値であるため、予めゲーム装置本体5内の記憶手段に格納されている。
図16に戻り、上記ステップ52における距離Dの算出処理の後、CPU10は、現在距離データDb3に記憶されている距離Dを基準距離Dbsに設定して、基準距離データDb4を更新し(ステップ53)、処理を次のステップに進める。つまり、基準距離Dbsは、処理開始時点のマーカ8Lおよび8Rとコントローラ7との距離となる。
次に、CPU10は、指示座標および指示方向を算出し(ステップ54)、処理を次のステップに進める。以下、指示座標および指示方向の算出例について説明する。
例えば、CPU10は、第1座標データDa1が示す位置座標(Lx,Ly)から第2座標データDa2が示す位置座標(Rx,Ry)への方向と、位置座標(Lx,Ly)と位置座標(Rx,Ry)との中点を算出し、方向データDb1および中点データDb2を更新する。具体的には、CPU10は、第1座標データDa1および第2座標データDa2を参照して、上記中点の座標を算出し、中点データDb2を更新する。ここで、上記中点は、撮像画像内における対象画像(マーカ8Lおよび8R)を1つの画像とみなした場合、その画像の位置を示すことになる。そして、上記中点と所定の基準位置との差によって、モニタ2に対するコントローラ7の位置の変化による画像位置の変化を算出することができる。
ここで、マーカ8Lおよび8Rと、モニタ2の表示画面と、コントローラ7との位置関係について考える。例えば、モニタ2の上面に2つのマーカ8Lおよび8Rを設置し(図1参照)、上面が上方向を向いたコントローラ7を用いてプレイヤがモニタ2の表示画面の中央を指し示した場合(すなわち、撮像情報演算部74の撮像画像の中央に表示画面中央が撮像されている状態)を考える。このとき、撮像情報演算部74の撮像画像において、対象画像の中点(マーカ8Lおよび8Rの中点)位置と撮像画像の中央とは一致しない。具体的には、上記撮像画像における対象画像の位置は、撮像画像の中心から上方の位置となる。このような位置に対象画像が位置する場合に、表示画面中央を指し示しているという基準位置の設定を行う。一方、コントローラ7の移動に対応して、撮像画像中の対象画像の位置も移動する(移動方向は逆方向となる)ので、撮像画像中の対象画像の位置の移動に対応させて表示画面を指し示す位置を移動させる処理を行うことによって、コントローラ7で指し示された表示画面基準の位置(xd、yd)を算出することができる。ここで、基準位置の設定は、予めプレイヤが表示画面の所定位置を指し示し、そのときの対象画像の位置を当該所定位置と対応させて記憶しておくようにしてもよいし、対象画像と表示画面との位置関係が固定的であれば、予め設定されていても良い。このような表示画面に対する位置座標(xd、yd)は、上記中点からモニタ2の表示画面基準の座標を算出する関数を用いた線形変換で算出される。この関数は、ある撮像画像から算出される中点座標の値を、当該撮像画像が撮像される時のコントローラ7によって指し示される表示画面上の位置を表す座標(xd、yd)に変換するものである。この関数によって、中点座標から表示画面を基準とした指し示し位置(xd、yd)を算出することができる。なお、上面が上方向以外(例えば、右方向)を向いたコントローラ7を用いてプレイヤがモニタ2の表示画面を指し示した場合、方向データDb1に格納された方向を用いて中点座標を補正して、補正された中点を用いて上述したように表示画面を基準とした指し示し位置(xd、yd)を算出する。
そして、CPU10は、算出した表示画面を基準とした指し示し位置(xd、yd)を、対応する仮想ゲーム空間における位置にさらに変換して、指示座標(Xt,Yt,Zt)を算出して指示座標データDb5を更新する。例えば、図19に示すように、表示画面の中心を原点としたxy座標系が設定されており、指し示し位置(xd、yd)に対応する指示座標(Xt,Yt,Zt)は、モニタ2の表示画面上における位置に表示される仮想ゲーム空間における位置(例えば、仮想ゲーム空間のZ=Zt平面(移動平面)に透視投影される位置)となる。具体的には、CPU10は、指示座標(Xt,Yt,Zt)を
で算出する。また、CPU10は、方向データDb1に格納されている方向(ベクトルデータ)を対応する仮想ゲーム空間における指示方向に同様に変換して、指示方向データDb6を更新する。例えば、CPU10は、方向データDb1に格納されている方向を、仮想ゲーム空間に設定された上記移動平面に投影した指示方向に変換して、指示方向データDb6を更新する。したがって、コントローラ7の姿勢に対応させて直感的に画像IMの姿勢を決定することができる。
次に、CPU10は、画像IMのスケール値(Sx,Sy)を設定して画像スケール値データDc1を更新し(ステップ55)、処理を次のステップに進める。例えば、CPU10は、現在距離データDb3に格納されている距離Dおよび基準距離データDb4に格納されている基準距離Dbsを参照して、スケール値(Sx,Sy)を
Sx = 2.0 + (Dbs−D)/a1
Sy = Sx
で算出する。ここで、a1は定数であり、例えばa1=17.5である。なお、CPU10は、スケール値SxおよびSy共に0.4以上20.0以下の範囲の数値とする。具体的には、CPU10は、上記数式による算出結果でスケール値SxおよびSyが0.4未満の値となったとき、スケール値SxおよびSyを共に0.4に設定する。また、CPU10は、上記数式による算出結果でスケール値SxおよびSyが20.0より大きな値となったとき、スケール値SxおよびSyを共に20.0に設定する。ここで、上記数式から明らかなように、定数a1は、距離Dの変化に応じてスケール値(Sx,Sy)を変化させる感度を調整する値であり、後述する画像IMを拡大/縮小する感度に応じて任意の値に設定すればよい。
次に、CPU10は、移動量のスケール値(STx,STy)を設定して移動量スケール値データDc2を更新し(ステップ56)、処理を次のステップに進める。例えば、CPU10は、画像スケール値データDc1に格納されているスケール値(Sx,Sy)を参照して、スケール値(STx,STy)を
STx = Sx/a2 + a3
STy = Sy/a4 + a5
で算出する。ここで、a2〜a5は定数であり、例えばa2=9.0、a3=1.0、a4=5.0、a5=1.0である。ここで、定数a2〜a5は、画像IMを表示画面上で違和感なく移動させるためのパラメータであり、モニタ2のアスペクト比等に応じて任意の値に設定される。
次に、CPU10は、仮想ゲーム空間内に移動可能範囲を設定して移動可能範囲データDc3を更新し(ステップ57)、処理を次のステップに進める。例えば、CPU10は、移動量スケール値データDc2に格納されているスケール値(STx,STy)を参照して、画像位置Pimが配置可能な移動可能範囲を設定する。具体的には、図19に示すように、仮想ゲーム空間には、Z=Zt平面(移動平面)上に注視点を原点としたXY座標系が設定されている。そして、移動平面上に上記原点を中心として予め設定された基準の移動可能範囲に対して、当該基準の移動可能範囲におけるX軸方向の長さにスケール値STxを乗算し、当該基準の移動可能範囲におけるY軸方向の長さにスケール値STyを乗算して、当該基準の移動可能範囲が上記原点を中心に拡大/縮小した移動可能範囲を算出する。なお、図19に示した一例では、上記基準の移動可能範囲がXY座標の原点を中心に拡大して設定された移動可能範囲を示している。
次に、CPU10は、画像位置Pimを設定して画像位置データDc4を更新し(ステップ58)、処理を次のステップに進める。例えば、CPU10は、指示座標データDb5に格納されている指示座標(Xt,Yt,Zt)および移動量スケール値データDc2に格納されているスケール値(STx,STy)を参照して、画像位置Pimの座標(Xans,Yans,Zans)を
Xans = STx * Xt
Yans = STy * Yt
Zans = Zt
で算出する。例えば、図19に示すように、仮想ゲーム空間には、Z=Zt平面(移動平面)上に注視点を原点としたXY座標系が設定されている。そして、コントローラ7で指し示した位置(xd,yd)に対応する上記移動平面上の指示座標(Xt,Yt,Zt)のX軸座標値およびY軸座標値を、それぞれスケール値(STx,STy)に応じて拡大/縮小した当該移動平面上の位置(Xans,Yans,Zans)に画像位置Pimが設定される。つまり、画像位置Pimは、指示座標(Xt,Yt,Zt)に応じて算出されるが、指示座標(Xt,Yt,Zt)が移動平面上を移動したとき、当該移動距離にスケール値(STx,STy)で拡大/縮小した移動量で、当該移動平面上を画像位置Pimが移動することになる。
なお、上記ステップ58の処理において、算出された画像位置Pimが上記ステップ57で設定された移動可能範囲外に設定された場合、CPU10は、画像位置Pimを当該移動可能範囲内に再設定して画像位置データDc4を更新する。一例として、CPU10は、画像位置Pimが移動可能範囲外に設定された場合、設定された画像位置Pimに最も近い移動可能範囲の境界上に画像位置Pimを再設定する。他の例として、CPU10は、画像位置Pimが移動可能範囲外に設定された場合、設定された画像位置Pimと移動平面上のXY座標の原点(すなわち、注視点)とを結ぶ線分と、移動可能範囲の境界との交点に画像位置Pimを再設定する。この処理によって、画像位置Pimは、必ず上記ステップ57で設定された移動可能範囲内に配置されることになる。
次に、CPU10は、画像角度Aimを設定して画像角度データDc5を更新し(ステップ59)、処理を次のステップに進める。例えば、CPU10は、指示方向データDb6に格納されている指示方向に応じて、上記移動平面に沿った画像IMの表示方向(例えば、画像IMの上方向を示す方向)を示す画像角度Aimを算出する。
次に、CPU10は、スケール値(Sx,Sy)に応じて画像IMを拡大/縮小し(ステップ60)、処理を次のステップに進める。例えば、CPU10は、画像データDc6に格納された画像IMを示す画像データを参照し、当該画像IMの横方向を拡大率Sxで拡大し、当該画像IMの縦方向を拡大率Syで拡大する。ここで、上記ステップ55の処理から明らかなように、基準距離Dbsを基準としてコントローラ7をマーカ8Lおよび8Rに近づけるとスケール値(Sx,Sy)が大きく設定される。したがって、プレイヤがコントローラ7をモニタ2に近づけると画像IMが拡大され、コントローラ7をモニタ2から離すと画像IMが縮小されることになる。
次に、CPU10は、画像位置Pimおよび画像角度Aimに応じて、画像IMを仮想ゲーム空間内に配置し(ステップ61)、処理を次のステップに進める。具体的には、CPU10は、上記ステップ60で拡大/縮小された画像IMを、画像角度Aimに応じた方向に画像位置Pimに基づいて上記移動平面上に配置する。例えば、図12および図13に示したように、画像IMは、プレイヤを模した人物像であり、当該人物像の中心(例えば、腰部付近)に画像位置Pimが位置するように上記移動平面上に配置される。また、画像IMの配置角度は、画像位置Pimを中心として画像角度Aimに応じて回転させる。
次に、CPU10は、所定の視点(図19参照)から仮想ゲーム空間を見た画像をモニタ2に表示する(ステップ62)。そして、CPU10は、上記ステップ51で開始した画像処理を終了するか否かを判断する(ステップ63)。CPU10は、上記画像処理を継続する場合、処理を次のステップ64に進める。一方、CPU10は、上記画像処理を終了する場合、当該フローチャートによる処理を終了する。
ステップ64において、CPU10は、コントローラ7から受信した操作情報を取得する。そして、CPU10は、距離算出処理を行い(ステップ65)、上記ステップ54に戻って処理を繰り返す。なお、ステップ64における動作は上述したステップ50の動作と同様であり、ステップ65における動作は上述したステップ52の動作と同様であるため、詳細な説明を省略する。
このように、本実施形態に係るゲーム装置本体5では、コントローラ7をモニタ2に近づけると画像IMが拡大して表示され、その画像IMが移動可能な範囲も拡大する。一方、コントローラ7をモニタ2から離すと画像IMが縮小して表示され、その画像IMが移動可能な範囲も縮小する。したがって、拡大率が高い画像IMであってもその移動可能範囲が広く設定されるため、拡大率が高い画像に対して移動可能範囲が不十分になるような操作性の悪化を防止することができる。また、拡大率が低い、すなわち縮小して表示される画像IMに対しては、その移動可能範囲が縮小するため、当該画像IMが表示領域外に消えてしまうような状態を防止することができる。
また、本実施形態に係るゲーム装置本体5では、コントローラ7とモニタ2とが離れた場合と比較すると、コントローラ7とモニタ2とが近づいたときに指示される画像位置Pimの移動量が大きくなる。したがって、コントローラ7の指し示し位置の変化量に対して、コントローラ7とモニタ2との距離の違いによって生じる画像位置Pimの移動量の増減を緩和することができる。すなわち、プレイヤがコントローラ7を用いて指し示し位置を移動させる操作をすると、コントローラ7とモニタ2との距離が異なっていてもその操作性が大きく変化せず、違和感のない操作を行うことができる。
さらに、プレイヤは、コントローラ7とモニタ2との距離を変化させるだけで画像の拡大/縮小処理ができるため、簡単な操作で画像の拡大率を変化させて表示することができる。また、コントローラ7をモニタ2に対して上下左右に動かしたり、左右にひねったりすることに応じて、モニタ2に表示された画像IMが移動したり回転したりして表示されるため、簡単な操作で画像を移動/回転させて表示することができる。
なお、上述した画像処理では、画像IMの拡大率に応じて移動可能範囲を設定する例を記載したが、当該拡大率に加えて画像IMの形状(例えば、縦横比)や配置角度をさらに考慮して移動可能範囲を設定してもかまわない。例えば、画像IMの縦横比に応じて、上記定数a2〜a5を調整してもかまわない。これによって、画像IMの縦横比に応じて、移動可能範囲の縦横比を補正することが可能となる。また、画像IMの縦横比に配置角度も考慮して、上記定数a2〜a5を調整してもかまわない。例えば、縦長の画像IMを90°回転させて配置すると横長の画像となる。このような配置角度によって変化する形状を考慮して、画像IMの縦横比および画像角度Aimに応じて、上記定数a2〜a5を変化させて移動可能範囲の縦横比を補正してもかまわない。
また、上述した画像処理では、コントローラ7とモニタ2との距離が大きい場合に画像を小さく、距離が小さい場合に画像を大きくしているが、目的によっては逆にしてもよい。すなわち、コントローラ7とモニタ2との距離が大きい場合に画像を大きく、距離が小さい場合に画像を小さくするような場合であっても、本願発明を適用することができる。その場合、具体的な一例として、上述のステップ55において、
Sx=18.0+(D−Dbs)/a1
のようにすればよい。
また、本願発明は、コントローラ7とモニタ2との距離によって画像の拡大率を制御するものに限らず、画像の拡大縮小と、移動とを行う画像処理に全般的に適用することが可能である。たとえば、マウスで入力された座標に画像を配置し、キー操作やその他の操作によって画像を拡大縮小するものであっても、画像の拡大率に応じてマウスの変位に対する座標移動量および移動範囲を制御することによって、本願発明の効果を得ることが可能である。
また、上述した画像処理では、画像IMのスケール値(Sx,Sy)と移動量のスケール値(STx,STy)とを異なるスケール値に設定している。これによって、画像IMを縦横が等しい拡大率で拡大/縮小しながら、当該画像IMを表示画面のアスペクト比に応じて違和感なく移動させるような、画像の拡大/縮小および移動量の制御をそれぞれ別に調整することが可能となる。しかしながら、このような効果を期待しない場合、移動量のスケール値(STx,STy)を画像IMのスケール値(Sx,Sy)と同じ値に設定してもかまわない。
また、上述した画像処理では3次元の仮想ゲーム空間に配置された画像IMを表示する例を用いたが、他のゲーム世界に配置された画像を表示してもかまわない。例えば、2次元の仮想ゲーム世界に配置された画像IMに対して、2次元の画像IMの拡大/縮小および画像IMの移動/回転を行う画像処理であっても、本発明を実現できることは言うまでもない。
また、上述した説明では、画像処理を開始してから終了するまでの全期間に対して、コントローラ7の位置や姿勢に応じた画像の拡大、縮小、移動、回転等の処理が行われるが、コントローラ7に対して所定の操作が行われている期間のみ当該処理が行われてもかまわない。例えば、プレイヤがコントローラ7の所定ボタン(例えば、操作ボタン72i)を押下している間のみ、画像の拡大、縮小、移動、回転等の処理が行われてもかまわない。この場合、当該所定ボタンの押下が開始された時点の距離Dを基準距離Dbsに設定して、上記画像処理を行えばよい。
また、上述した説明では、撮像素子743で撮像した画像データを解析することによって距離Dを算出したが、それ以外の手段によっても、実空間内に配置された所定の測定対象との距離Dを測ることができれば、上記の発明を実施することが可能である。例えば、距離Dを算出するための手段として、超音波センサによるものや、磁気センサを用いたものなどを用いてもよい。また、撮像素子743と、撮像対象との距離に関連した値を得ることができれば、実際の距離Dを算出しなくとも操作入力は可能であるので、直接的に距離Dを算出することなく、撮像画像内のマーカ8Lと8Rとの間の長さに対応させたデータを予め用意し、当該対応データを用いて画像処理を行うようにしてもよい。
また、撮像素子743で撮像した画像データを解析してマーカ8Lおよび8Rからの赤外光の位置座標やそれらの重心座標等を取得し、それらを処理結果データとしてコントローラ7内で生成してゲーム装置本体5へ送信する態様を説明したが、他の処理段階のデータをコントローラ7からゲーム装置本体5へ送信してもかまわない。例えば、撮像素子743が撮像した画像データをコントローラ7からゲーム装置本体5へ送信し、CPU10において上記解析処理を行って処理結果データを取得してもかまわない。この場合、コントローラ7に設けられた画像処理回路744が不要となる。また、上記画像データの解析途中のデータをコントローラ7からゲーム装置本体5へ送信してもかまわない。例えば、画像データから得られる輝度、位置、および面積等を示すデータをコントローラ7からゲーム装置本体5へ送信し、CPU10において残りの解析処理を行って処理結果データを取得してもかまわない。
また、上述した説明では、2つのマーカ8Lおよび8Rからの赤外光を、コントローラ7の撮像情報演算部74の撮像対象としたが、他のものを撮像対象にしてもかまわない。例えば、1つまたは3つ以上のマーカをモニタ2の近傍に設置し、それらのマーカからの赤外光を撮像情報演算部74の撮像対象としてもかまわない。例えば、所定の長さを有する1つのマーカをモニタ2の近傍に設置し、当該長さの両端を設置間隔m(図18参照)とすれば、本発明を同様に実現することができる。また、モニタ2の表示画面自体や他の発光体(室内灯等)を撮像情報演算部74の撮像対象としてもかまわない。撮像対象とモニタ2の表示画面との配置関係に基づいて、当該表示画面に対するコントローラ7の位置を演算すれば、様々な発光体を撮像情報演算部74の撮像対象として用いることができる。
また、上述した説明では、コントローラ7とゲーム装置本体5とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置本体5の接続端子に接続する。
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等や、画像処理で用いる各数式や定数等は、単なる一例に過ぎず他の形状、数、設置位置、数式、定数であっても、本発明を実現できることは言うまでもない。また、コントローラ7における撮像情報演算部74の位置(撮像情報演算部74の光入射口)は、ハウジング71の前面でなくてもよく、ハウジング71の外部から光を取り入れることができれば他の面に設けられてもかまわない。
また、上記実施例では、ゲーム装置本体5をコントローラ7で操作しているが、撮像手段を備えた入力装置で操作される一般的なパーソナルコンピュータなどの情報処理装置でもかまわない。この場合、この情報処理装置のコンピュータが実行するプログラムは、典型的にゲームに用いられるゲームプログラムに限らず、上記情報処理装置に対する画像処理に用いられる汎用的な画像処理プログラムである。
また、本発明の画像処理プログラムは、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、画像処理プログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、画像処理プログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
以上、本発明を詳細に説明してきたが、上述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。