(57)【特許請求の範囲】
【請求項１】
撮像対象を撮像するための撮像手段を備える操作装置から、当該撮像手段によって得られる撮像画像のデータまたは当該データに所定の演算を行ったデータを操作データとして取得し、当該操作データを用いたゲーム処理によって操作対象オブジェクトが動作する仮想ゲーム空間内の様子をゲーム画像として表示装置に表示させるゲーム装置のコンピュータで実行されるゲームプログラムであって、
前記撮像画像内における撮像対象の位置を示す座標が検出可能か否かを判定する検出判定ステップと、
前記検出判定ステップによって前記座標が検出不可能と判定されたときに、前記表示装置の画面上における所定位置に基準画像を表示させる基準画像表示ステップと、
前記検出判定ステップによって前記座標が検出不可能と判定されたときに、前記操作装置によって指し示される画面上の位置に指示画像を表示させる指示画像表示ステップと、
前記指示画像の位置が前記基準画像の少なくとも一部を含む所定範囲内に達したとき、それ以降、前記操作データに基づいて前記撮像画像内における前記撮像対象の位置を示す座標に応じた動作を前記操作対象オブジェクトに行わせるオブジェクト制御ステップと、
前記指示画像の位置が前記基準画像の位置に基づく所定範囲内に達したとき、前記指示画像を消去する消去ステップとを前記コンピュータに実行させる、ゲームプログラム。
【請求項２】
前記検出判定ステップにおいては、前記撮像画像に前記撮像対象の画像の一部または全部が含まれていないとき、前記座標が検出不可能と判定される、請求項１に記載のゲームプログラム。
【請求項３】
前記基準画像表示ステップにおいては、前記操作対象オブジェクトが前記基準画像として表示され、
前記オブジェクト制御ステップにおいては、前記座標が検出不可能と判定されたとき、前記所定位置に前記操作対象オブジェクトが表示されるように操作対象オブジェクトの位置が制御される、請求項１に記載のゲームプログラム。
【請求項４】
前記指示画像表示ステップにおいては、前記撮像画像内における前記撮像対象の位置を示す座標に基づいて、前記操作装置によって指し示される画面上の位置が算出される、請求項１に記載のゲームプログラム。
【請求項５】
前記オブジェクト制御ステップは、
前記指示画像の画面上の位置を示す座標と、前記基準画像の画面上の位置を示す座標とを比較することによって、前記指示画像の位置が前記基準画像の位置に基づく所定範囲内に達したか否かを判定する位置判定ステップと、
前記位置判定ステップにおいて前記指示画像の位置が前記基準画像の位置に基づく所定範囲内に達したと判定されたとき、前記操作対象オブジェクトの動作制御を実行する制御実行ステップとを含む、請求項１に記載のゲームプログラム。
【請求項６】
前記基準画像表示ステップにおいては、前記操作対象オブジェクトが前記基準画像として表示され、
前記オブジェクト制御ステップにおいては、前記基準画像表示ステップにおいて表示された前記操作対象オブジェクトの動作が制御される、請求項１に記載のゲームプログラム。
【請求項７】
前記オブジェクト制御ステップにおいては、３次元の仮想ゲーム空間内において前記操作対象オブジェクトを移動する制御が実行される、請求項１に記載のゲームプログラム。
【請求項８】
前記撮像手段による撮像画像内に含まれる前記撮像対象の画像における所定の２点の距離を算出する距離算出ステップを前記コンピュータにさらに実行させ、
前記オブジェクト制御ステップにおいては、３次元の仮想ゲーム空間内における前記画面の奥行き方向に関して前記操作対象オブジェクトを移動する制御が前記座標および前記距離に基づいて実行される、請求項６に記載のゲームプログラム。
【請求項９】
撮像対象を撮像するための撮像手段を備える操作装置と、当該撮像手段によって得られる撮像画像のデータまたは当該データに所定の演算を行ったデータを操作データとして取得し、当該操作データを用いたゲーム処理によって操作対象オブジェクトが仮想ゲーム空間内において動作するゲーム画像を表示装置に表示させるゲーム装置とを含むゲームシステムであって、
前記撮像画像内における撮像対象の位置を示す座標が検出可能か否かを判定する検出判定手段と
前記検出判定手段により前記座標が検出不可能と判定されたときに、前記表示装置の画面上における所定位置に基準画像を表示させる基準画像表示制御手段と、
前記検出判定手段により前記座標が検出不可能と判定されたときに、前記操作装置によって指し示される画面上の位置に指示画像を表示させる指示画像表示制御手段と、
前記指示画像の位置が前記基準画像の位置に基づく所定範囲内に達したとき、前記操作データに基づいて、前記撮像画像内における前記撮像対象の位置を示す座標に応じた動作を前記操作対象オブジェクトに行わせるオブジェクト制御手段と、
前記指示画像の位置が前記基準画像の位置に基づく所定範囲内に達したとき、前記指示画像を消去する消去手段とを備える、ゲームシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲームプログラムおよびゲームシステムに関し、より特定的には、光学式ポインティングデバイスを用いたゲームを実行するためのゲームプログラムおよびゲームシステムに関する。
【背景技術】
【０００２】
従来、光学式のポインティングデバイスを用いたゲームシステムが提案されている。例えば、特許文献１では、ガン型のコントローラを用いた射撃ゲーム装置が開示されている。ガン型コントローラはＣＣＤカメラを備え、ビデオ画面の周囲に撮像対象として配設された発光体をＣＣＤカメラによって撮像する。これによって、ゲーム装置は、画面とガン型コントローラの距離、ガン型コントローラの回転、およびガン型コントローラの位置を検出することができる。特許文献１では、特に、ガン型コントローラが指している画面上の座標を算出するための射撃ゲーム装置が開示されている。
【０００３】
また、特許文献２には、特許文献１とほぼ同様の構成を用いた射撃ゲーム装置の例が開示されている（段落００２０等参照）。この射撃ゲーム装置は、ガン型コントローラが有する撮像手段によって撮影された撮影画像を用いて、画面上の位置が算出される。そして、算出された位置をガン型コントローラの照準位置として用いた射撃ゲームが行われる。以上のように、ガン型コントローラによって指し示される画面上の位置を算出し、この位置を照準として利用するゲームが公知である。
【０００４】
上記の両ゲーム装置では、ガン型コントローラが指し示している画面上の位置が算出できるので、この画面上の位置に照準の画像を表示している。このため、プレイヤは、銃口の向き、すなわち、ガン型コントローラが指し示している画面上の位置を容易に認識することができる。なお、ガン型コントローラが有する撮像手段の撮像領域からマーカ（発光体）が外れた場合には、ガン型コントローラの照準が画面から外れているので照準の画像は動かなくなり、操作不能になる。ただし、撮像手段によってマーカが再度撮像されれば、ガン型コントローラが指し示している画面上の位置に照準の画像が表示される。
【特許文献１】特開平８−７１２５２号公報
【特許文献２】特開２００２−８１９０９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来、上記のような光学式ポインティングデバイスを用いたコントローラは、シューティングゲームのためのガンの照準位置を指定するために主に用いられた。しかしながら、昨今のゲームは多種多様化しているため、画面上の照準だけでなくゲーム空間内におけるオブジェクトを操作するために用いることが想定される。例えば、コントローラを用いて３次元のゲーム空間内におけるオブジェクトを移動させるような使い方が少なくとも二つ考えられる。第１番目は、コントローラによって指示した画面上の位置に対応させた３次元のゲーム空間の位置にオブジェクトを配置し、当該画面上に平面的な動きに対応させて、当該ゲーム空間においてオブジェクトを平面的に移動させる使い方である。しかしながら、ゲーム空間が三次元というだけで、当該ゲーム空間におけるオブジェクトを平面的にしか動かすことができず、従来の照準を動かす場合と何ら違いがない。
【０００６】
第２番目の使い方では、プレイヤがコントローラを上下に動かすことによって、ＸＹＺ座標系で表される３次元のゲーム空間に配置されているオブジェクトの配置座標のＹ方向成分を変更して、当該ゲーム空間における上下方向にオブジェクトを移動させる。また、コントローラを左右に動かすことによって、ゲーム空間のＸ方向成分を変更して、当該ゲーム空間における左右方向にオブジェクトを移動させる。さらに、コントローラを前後に動かすことによって、ゲーム空間のＺ方向成分を変更して、当該ゲーム空間における前後方向にオブジェクトを動かす。
【０００７】
上述の第２番目の使い方では、例えばコントローラによって指示した画面上の位置（指示位置と呼ぶ。従来の射撃ゲーム装置で言えば、画面上の照準の位置に相当する。）に３次元のゲーム空間におけるオブジェクトが必ず表示されるわけではない。つまり、上記のように、一般的な３次元のゲーム空間では、当該ゲーム空間を仮想カメラによって俯瞰的な視点で捉えるため、ゲーム空間の上下・左右・前後の動きが必ずしも、仮想カメラから見た上下・左右・前後の動きと一致しない。具体的には、ゲーム空間内において例えば１０の幅だけ上下運動したとしても、仮想カメラはその動きは俯瞰的に捕らえるため、その俯瞰的な画像を表示する画面上ではそれよりも小さい幅しか動かない。さらに、ゲーム空間において仮想カメラから離れる方向である奥行き方向にオブジェクトを動かした場合、仮想カメラで捕らえた画面上のオブジェクトは画面中央方向に向かって移動する。このように、コントローラによって指し示す画面上の位置と、画面におけるオブジェクトの表示位置とが一致しなくなる。
【０００８】
したがって、従来の射撃ゲーム装置ではコントローラの指示位置に照準の画像が表示されるので、プレイヤはコントローラがどの方向を向いているのかを容易に認識することができるが、操作対象のオブジェクトが指示位置に表示されない場合、プレイヤは、コントローラがどの方向を向いているのかを認識することができない。このように、画面の表示を見てもプレイヤは指示位置を認識できないことから、コントローラの撮像手段がマーカを撮像することができない状態にまでプレイヤがコントローラを動かしてしまい、オブジェクトが操作不能になる場合がある。特に、オブジェクト操作の開始時において、コントローラの現在の方向（指示位置）がわからなければ、その後にオブジェクトを操作する間、プレイヤは、コントローラがどの方向を向いているのかが全くわからないまま操作をしなければならない。そのため、コントローラの撮像手段がマーカを撮像することができない状態にまでコントローラを動かしてしまう可能性が高くなる。また、コントローラの操作性が非常に悪くなる。
【０００９】
以上のように、上記のコントローラを用いてオブジェクトを操作する場合に、オブジェクトの表示位置と指示位置とが一致しないとき、オブジェクトの操作中において、オブジェクトが操作不能になる状態までプレイヤがコントローラを動かしてしまうという問題がある。
【００１０】
それ故、本発明は、光学式ポインティングデバイスを用いたオブジェクト操作の操作性を向上することができるゲームプログラムおよびゲームシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【００１２】
第１の発明は、ゲーム装置（３）のコンピュータ（ＣＰＵ１０等）で実行されるゲームプログラムである。ゲーム装置は、撮像対象（マーカ８ａおよび８ｂ）を撮像するための撮像手段（撮像素子４０）を備える操作装置（コントローラ７）から、当該撮像手段によって得られる撮像画像のデータまたは当該データに所定の演算を行ったデータを操作データとして取得する。そして、当該操作データを用いたゲーム処理によって操作対象オブジェクト（釣竿５４）が仮想ゲーム空間内において動作するゲーム画像を表示装置に表示させる。ゲームプログラムは、基準画像表示ステップ（Ｓ１、Ｓ９またはＳ１８）と、指示画像表示ステップ（Ｓ１１）と、オブジェクト制御ステップ（Ｓ１４）とをコンピュータに実行させる。基準画像表示ステップにおいては、表示装置の画面上における所定位置に基準画像（例えば図１１に示す釣竿５４の画像、またはマーク画像）を表示させる。指示画像表示ステップにおいては、操作装置によって指し示される画面上の位置に指示画像（カーソル５５）を表示させる。オブジェクト制御ステップにおいては、指示画像の位置が基準画像の位置に基づく所定範囲内に達したとき、操作データに基づいて、撮像画像内における撮像対象の位置を示す座標（第２中点座標）に応じた動作を操作対象オブジェクトに行わせる。
【００１３】
第２の発明においては、ゲームプログラムは、消去ステップ（Ｓ４）をさらにコンピュータに実行させてもよい。消去ステップにおいては、指示画像の位置が基準画像の位置に基づく所定範囲内に達したとき、指示画像を消去する。
【００１４】
第３の発明においては、ゲームプログラムは、検出判定ステップ（Ｓ４）をさらにコンピュータに実行させてもよい。検出判定ステップにおいては、撮像画像内における撮像対象の位置を示す座標が検出可能か否かを判定する。このとき、基準画像表示ステップおよび指示画像表示ステップは、座標が検出不可能と判定されたときに実行される。
【００１５】
第４の発明においては、検出判定ステップにおいて、撮像画像に撮像対象の画像の一部または全部が含まれていないとき、座標が検出不可能と判定されてもよい。
【００１６】
第５の発明においては、基準画像表示ステップにおいて、操作対象オブジェクトが基準画像として表示されてもよい。このとき、オブジェクト制御ステップにおいては、座標が検出不可能と判定されたとき、所定位置に操作対象オブジェクトが表示されるように操作対象オブジェクトの位置が制御される。
【００１７】
第６の発明においては、指示画像表示ステップにおいて、撮像画像内における撮像対象の位置を示す座標（第２中点座標）に基づいて、操作装置によって指し示される画面上の位置が算出されてもよい。
【００１８】
第７の発明においては、オブジェクト制御ステップは、位置判定ステップ（Ｓ１２）と、制御実行ステップ（Ｓ１３およびＳ７）とを含んでいてもよい。このとき、位置判定ステップにおいては、指示画像の画面上の位置を示す座標と、基準画像の画面上の位置を示す座標とを比較することによって、指示画像の位置が基準画像の位置に基づく所定範囲内に達したか否かを判定する。制御実行ステップにおいては、位置判定ステップにおいて指示画像の位置が基準画像の位置に基づく所定範囲内に達したと判定されたとき、操作対象オブジェクトの動作制御を実行する。
【００１９】
第８の発明においては、基準画像表示ステップにおいて、操作対象オブジェクトが基準画像として表示されてもよい。このとき、オブジェクト制御ステップにおいては、基準画像表示ステップにおいて表示された操作対象オブジェクトの動作が制御される。
【００２０】
第９の発明においては、オブジェクト制御ステップにおいて、３次元の仮想ゲーム空間内において操作対象オブジェクトを移動する制御が実行されてもよい。
【００２１】
第１０の発明においては、ゲームプログラムは、距離算出ステップ（Ｓ６）をコンピュータにさらに実行させてもよい。距離算出ステップにおいては、撮像手段による撮像画像内に含まれる撮像対象の画像における所定の２点の距離（マーカ画像距離）を算出する。このとき、オブジェクト制御ステップにおいては、３次元の仮想ゲーム空間内における画面の奥行き方向に関して操作対象オブジェクトを移動する制御が座標および距離に基づいて実行される。
【００２２】
第１１の発明は、操作装置（コントローラ７）と、ゲーム装置（３）とを含むゲームシステムである。操作装置は、撮像対象（マーカ８ａおよび８ｂ）を撮像するための撮像手段（撮像素子４０）を備える。ゲーム装置は、当該撮像手段によって得られる撮像画像のデータまたは当該データに所定の演算を行ったデータを操作データとして取得し、当該操作データを用いたゲーム処理によって操作対象オブジェクト（釣竿５４）が仮想ゲーム空間内において動作するゲーム画像を表示装置に表示させる。ゲームシステムは、基準画像表示制御手段（Ｓ１、Ｓ９またはＳ１８を実行するＣＰＵ１０等。以下、単位ステップ番号のみを記載する。）と、指示画像表示制御手段（Ｓ１１）と、消去手段（Ｓ１２、Ｓ７およびＳ１５）と、オブジェクト制御手段（Ｓ１４）とを備える。基準画像表示制御手段は、表示装置の画面上における所定位置に基準画像（例えば図１１に示す釣竿５４の画像、またはマーク画像）を表示させる。指示画像表示制御手段は、操作装置によって指し示される画面上の位置に指示画像（カーソル５５）を表示させる。消去手段は、指示画像の位置が基準画像の位置に基づく所定範囲内に達したとき、指示画像を消去する。オブジェクト制御手段は、指示画像の位置が基準画像の位置に基づく所定範囲内に達したとき、操作データに基づいて、撮像画像内における撮像対象の位置を示す座標に応じた動作を操作対象オブジェクトに行わせる。
【発明の効果】
【００２３】
第１の発明によれば、オブジェクト制御ステップによって、プレイヤは操作対象オブジェクトを操作することが可能となる。ただし、オブジェクト制御ステップは、基準画像の位置の少なくとも一部を含む所定範囲内に指示画像が位置したことを条件として実行されるので、プレイヤは、操作対象オブジェクトを操作する前に、指示画像を操作して指示画像と基準画像との位置合わせを行うことになる。これによって、プレイヤは、オブジェクトの操作を開始する時点での指示位置を知ることができる。オブジェクトを操作する直前に指示位置を確認できるので、オブジェクトを操作する際に指示位置をある程度イメージしながらオブジェクトを操作することができる。したがって、第１の発明によれば、オブジェクトの操作中に、撮像手段が撮像対象を検出できない範囲にプレイヤが操作装置を動かしてしまい、オブジェクトが操作不能になることを抑止することができる。そのため、撮像手段を備えた操作装置を用いたオブジェクト操作の操作性を向上することができる。
【００２４】
第２の発明によれば、指示画像の位置が基準画像の位置に基づく所定範囲内に達したとき、消去ステップにおいて指示画像が消去される。つまり、操作対象オブジェクトの操作が行われるときには、指示画像は消去されて表示されない。したがって、オブジェクトの操作とは無関係な指示画像が表示されないので、オブジェクト操作時のゲーム画面を見やすくすることができる。
【００２５】
第３の発明によれば、検出判定ステップにより、撮像画像内における撮像対象の位置を示す座標が検出不可能と判定された場合に、基準画像および指示画像が表示される。したがって、撮像手段が撮像対象を検出できない範囲にまでプレイヤが操作装置を実際に動かしてしまったときに、指示画像と基準画像との位置合わせの操作をプレイヤに行わせることができる。したがって、指示位置の確認がプレイヤにとって必要であると考えられるタイミングで位置合わせの操作を行わせることができるので、プレイヤに指示位置の確認を効率良く行わせることができる。
【００２６】
第４の発明によれば、撮像画像に撮像対象の画像の一部または全部が含まれていない場合、撮像画像内における撮像対象の位置を示す座標が検出不可能と判定される。実際に撮像された撮像画像を用いて判定を行うことによって、判定を正確に行うことができる。
【００２７】
第５の発明によれば、撮像手段が撮像対象を検出できない範囲にまでプレイヤが操作装置を実際に動かしてしまったときに、操作対象オブジェクトは、操作前の表示位置に戻るように制御される。そのため、オブジェクトが操作不能なったことをプレイヤは直感的に認識することができる。また、第４の発明によれば、操作対象オブジェクト自体を基準画像として用いるので、操作対象オブジェクトの画像とは別に基準画像を用意する必要がない。
【００２８】
第６の発明によれば、撮像画像内における撮像対象の位置を示す座標に基づいて指示位置が算出されるので、指示位置を容易かつ正確に算出することができる。
【００２９】
第７の発明によれば、２次元平面上において指示画像の位置と基準画像の位置とを比較することができるので、例えば３次元空間における位置を用いて比較を行う場合に比べて位置判定ステップの処理を簡易化することができる。
【００３０】
第８の発明によれば、操作対象オブジェクトが基準画像として表示されるので、プレイヤは、指示画像を操作対象オブジェクトの位置に合わせることによって操作対象オブジェクトの操作が可能となる。これによって、操作対象オブジェクトを操作するまでのゲーム操作は、操作対象オブジェクトを指示画像で選択して操作対象オブジェクトの操作を開始するという操作になる。プレイヤにとって、操作対象オブジェクトを操作するまでのゲーム操作を一連の流れで行うような感覚となるので、指示画像と基準画像との位置合わせ操作を自然な操作感覚で行うことができる。
【００３１】
第９の発明によれば、操作装置に対する操作によって３次元の仮想ゲーム空間内において操作対象オブジェクトが移動される。３次元の仮想ゲーム空間を操作対象オブジェクトに移動させる制御を行う場合には、操作装置の指示位置と操作対象オブジェクトの表示位置とを一致させることが非常に困難であるので、撮像手段が撮像対象を検出できない範囲にプレイヤが操作装置を動かしてしまいやすくなる。しかし、第８の発明によれば、撮像手段が撮像対象を検出できない範囲にプレイヤが操作装置を動かしてしまい、オブジェクトが操作不能になることを抑止することができる。
【００３２】
第１０の発明によれば、操作装置に対する操作によって３次元の仮想ゲーム空間内の画面の奥行き方向に関して操作対象オブジェクトが移動される。画面の奥行き方向に関して操作対象オブジェクトが移動される場合には、操作装置の指示位置と操作対象オブジェクトの表示位置とを一致させることが非常に困難であるので、撮像手段が撮像対象を検出できない範囲にプレイヤが操作装置を動かしてしまいやすくなる。しかし、第９の発明によれば、撮像手段が撮像対象を検出できない範囲にプレイヤが操作装置を動かしてしまい、オブジェクトが操作不能になることを抑止することができる。
【発明を実施するための最良の形態】
【００３３】
図１を参照して、本発明の一実施形態に係る情報処理システムの一例であるゲームシステム１について説明する。なお、図１は、当該ゲームシステム１を説明するための外観図である。以下、据置型ゲーム装置を一例にして、本発明のゲームシステム１について説明する。
【００３４】
図１において、当該ゲームシステム１は、家庭用テレビジョン受像機等のスピーカ２２を備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作データを与えるコントローラ７によって構成される。また、モニタ２の周辺（図では画面の上側）には、２つのマーカ８ａおよび８ｂが設置される。マーカ８ａおよび８ｂは、具体的には赤外ＬＥＤであり、それぞれモニタ２の前方に向かって赤外光を出力する。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される操作データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。また、ゲーム装置１には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００３５】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００３６】
コントローラ７は、その内部に備える通信部３６（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて操作データを無線送信する。コントローラ７は、操作対象（モニタ２に表示されるオブジェクト）を操作するための操作手段である。コントローラ７は、複数の操作ボタンからなる操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像するための撮像情報演算部３５（後述）を備えている。すなわち、撮像情報演算部３５は、モニタ２の周辺に配置された各マーカ８ａおよび８ｂを撮像対象として、各マーカ８ａおよび８ｂの画像を撮像する。ゲーム装置３は、この画像を用いてコントローラ７の位置および姿勢に対応した操作信号を得る。
【００３７】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００３８】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）１０を備える。ＣＰＵ１０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ１３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。ＣＰＵ１０には、メモリコントローラ１１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１２、メインメモリ１３、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３４、およびＡＲＡＭ（Ａｕｄｉｏ  ＲＡＭ）３５が接続される。また、メモリコントローラ１１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）１６、ビデオＩ／Ｆ１７、外部メモリＩ／Ｆ１８、オーディオＩ／Ｆ１９、およびディスクＩ／Ｆ２１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２２、およびディスクドライブ２０が接続されている。
【００３９】
ＧＰＵ１２は、ＣＰＵ１０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ１２は、図示しない画像処理専用のメモリやメインメモリ１３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ１２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービー映像を生成し、適宜メモリコントローラ１１およびビデオＩ／Ｆ１７を介してモニタ２に出力する。
【００４０】
メインメモリ１３は、ＣＰＵ１０で使用される記憶領域であって、ＣＰＵ１０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ１３は、ＣＰＵ１０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ１３に記憶されたゲームプログラムや各種データ等がＣＰＵ１０によって実行される。
【００４１】
ＤＳＰ１４は、ゲームプログラム実行時にＣＰＵ１０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ１５が接続される。ＡＲＡＭ１５は、ＤＳＰ１４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ１４は、ＡＲＡＭ１５に記憶されたサウンドデータを読み出し、メモリコントローラ１１およびオーディオＩ／Ｆ１９を介してモニタ２に備えるスピーカ２２に出力させる。
【００４２】
メモリコントローラ１１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ１６は、例えば４つのコントローラＩ／Ｆで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ１６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの操作データを受信し、コントローラＩ／Ｆ１６を介して当該操作データをＣＰＵ１０へ出力する。なお、他の実施形態においては、ゲーム装置３は、受信ユニット６に代えて、コントローラ７から送信されてくる操作データを受信する受信モジュールをその内部に設ける構成としてもよい。この場合、受信モジュールが受信した送信データは、所定のバスを介してＣＰＵ１０に出力される。ビデオＩ／Ｆ１７には、モニタ２が接続される。外部メモリＩ／Ｆ１８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ１９にはモニタ２に内蔵されるスピーカ２２が接続され、ＤＳＰ１４がＡＲＡＭ１５から読み出したサウンドデータやディスクドライブ２０から直接出力されるサウンドデータをスピーカ２２から出力可能に接続される。ディスクＩ／Ｆ２１には、ディスクドライブ２０が接続される。ディスクドライブ２０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ１９に出力する。
【００４３】
次に、図３〜図７を参照して、コントローラ７について説明する。図３〜図５は、コントローラ７の外観構成を示す斜視図である。図３（ａ）は、コントローラ７の上面後方から見た斜視図であり、図３（ｂ）は、コントローラ７を下面後方から見た斜視図である。図４は、コントローラ７を前方から見た図である。
【００４４】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ７を用いることによって、それに設けられたボタンを押下するゲーム操作を行うことと、コントローラ７自体の位置や向きを変えることとによってゲーム操作を行うことができる。例えば、プレイヤは、長手方向を軸としてコントローラ７を回転させることによって、操作対象に移動動作を行わせることができる。また、プレイヤは、コントローラ７によって指し示される画面上の位置を変える操作によって、ゲーム空間に登場するオブジェクトを移動させることができる。ここで、「コントローラ７によって指し示される画面上の位置」とは、理想的には、コントローラ７の前端部から上記長手方向に延ばした直線とモニタ２の画面とが交わる位置であるが、厳密に当該位置である必要はなく、その周辺の位置をゲーム装置３によって算出することができればよい。以下では、コントローラ７によって指し示される画面上の位置を「指示位置」と呼ぶ。また、コントローラ７（ハウジング３１）の長手方向を、「コントローラ７の指示方向」と呼ぶことがある。
【００４５】
ハウジング３１には、複数の操作ボタンが設けられる。ハウジング３１の上面には、十字キー３２ａ、Ｘボタン３２ｂ、Ｙボタン３２ｃ、Ｂボタン３２ｄ、セレクトスイッチ３２ｅ、メニュースイッチ３２ｆ、およびスタートスイッチ３２ｇが設けられる。一方、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＡボタン３２ｉが設けられる。これらの各ボタン（スイッチ）は、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。また、ハウジング３１の上面には、遠隔からゲーム装置３本体の電源をオン／オフするための電源スイッチ３２ｈが設けられる。
【００４６】
また、コントローラ７は撮像情報演算部３５（図５）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射口３５ａが設けられる。一方、ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、例えば３２ピンのエッジコネクタであり、コントローラ７に他の機器を接続するために利用される。また、ハウジング３１上面の後面側には複数のＬＥＤ３４が設けられる。ここで、コントローラ７には、他のコントローラ７と区別するためにコントローラ種別（番号）が付与される。ＬＥＤ３４は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置３へ操作データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ３４のいずれか１つが点灯する。
【００４７】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。図５は、コントローラ７の内部構造を示す図である。なお、図５（ａ）は、コントローラ７の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５（ｂ）は、コントローラ７の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５（ｂ）に示す基板３００は、図５（ａ）に示す基板３００の裏面から見た斜視図となっている。
【００４８】
図５（ａ）において、ハウジング３１の内部には基板３００が固設されており、当該基板３００の上主面上に操作ボタン３２ａ〜３２ｈ、加速度センサ３７、ＬＥＤ３４、水晶振動子４６、無線モジュール４４、およびアンテナ４５等が設けられる。そして、これらは、基板３００等に形成された配線（図示せず）によってマイコン４２（図６参照）に接続される。また、無線モジュール４４およびアンテナ４５によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子４６は、後述するマイコン４２の基本クロックを生成する。
【００４９】
一方、図５（ｂ）において、基板３００の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ７の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１によって構成されおり、それぞれ基板３００の下主面に取り付けられる。また、基板３００の下主面上の後端縁にコネクタ３３が取り付けられる。そして、撮像情報演算部３５の後方であって基板３００の下主面上に操作ボタン３２ｉが取り付けられていて、それよりさらに後方に、電池４７が収容される。電池４７とコネクタ３３との間の基板３００の下主面上には、バイブレータ４８が取り付けられる。このバイブレータ４８は、例えば振動モータやソレノイドであってよい。バイブレータ４８が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームを実現することができる。
【００５０】
図６は、コントローラ７の構成を示すブロック図である。コントローラ７は、上述した操作部３２（各操作ボタン）および撮像情報演算部３５の他に、その内部に通信部３６および加速度センサ３７を備えている。
【００５１】
撮像情報演算部３５は、撮像手段が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ７の動きでも追跡して解析することができる。
【００５２】
具体的には、撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ７の前方から入射する光から赤外線のみを通過させる。ここで、モニタ２の表示画面近傍に配置されるマーカ８ａおよび８ｂは、モニタ２の前方に向かって赤外光を出力する赤外ＬＥＤである。したがって、赤外線フィルタ３８を設けることによってマーカ８ａおよび８ｂの画像をより正確に撮像することができる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ出射する。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ３９が集光した赤外線を撮像する。したがって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ８ａおよび８ｂ）の位置を算出する。画像処理回路４１は、各マーカ８ａおよび８ｂの撮像画像内における位置を示す各座標値を撮像データとして通信部３６へ出力する。なお、画像処理回路４１における処理の詳細については後述する。
【００５３】
加速度センサ３７は、コントローラ７の上下方向（図３に示すＹ軸方向）、左右方向（図３に示すＸ軸方向）および前後方向（図３に示すＺ軸方向）の３軸でそれぞれ加速度を検知する。この加速度センサによって、コントローラ７のＸ軸方向、Ｙ軸方向およびＺ軸方向に関する傾きを検知することが可能である。つまり、ゲーム装置３は、上記撮像画像からコントローラ７のＺ軸周りの回転角度を検出するだけでなく、加速度センサ３７によっても当該回転角度を検出することが可能である。なお、加速度センサ３７は、必要な操作信号の種類によっては、上下方向および左右方向の２軸でそれぞれ加速度を検出する加速度センサが用いられてもかまわない。加速度センサ３７が検知した加速度を示すデータは、通信部３６へ出力される。なお、加速度センサ３７は、典型的には静電容量式の加速度センサが用いられるが、他の方式の加速度センサやジャイロセンサを用いてもかまわない。この加速度センサ３７から出力される加速度データに基づいて、コントローラ７の傾きを検出することができる。
【００５４】
通信部３６は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理の際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータを無線送信する無線モジュール４４を制御する。
【００５５】
操作部３２、加速度センサ３７、および撮像情報演算部３５からマイコン４２へ出力されたデータは、一時的にメモリ４３に格納される。ここで、通信部３６から受信ユニット６への無線送信は所定の周期毎に行われるが、ゲームの処理は１／６０を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。マイコン４２は、受信ユニット６への送信タイミングが到来すると、メモリ４３に格納されているデータを操作データとして無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ７から送信される。微弱電波信号はゲーム装置３側の受信ユニット６で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。
【００５６】
なお、図３〜図５に示したコントローラ７の形状や、各操作スイッチの形状、数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができることは言うまでもない。また、コントローラ７における撮像情報演算部３５の位置（撮像情報演算部３５の光入射口３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。このとき、上記「コントローラ７の指示方向」は、光入射口に垂直な方向となる。
【００５７】
上記コントローラ７を用いることによって、プレイヤは、各操作スイッチを押下する従来の一般的なゲーム操作に加えて、コントローラ７自身の位置を動かしたり、コントローラ７を回転させたりするというゲーム操作を行うことができる。以下、上記コントローラ７を用いたゲーム操作について説明する。
【００５８】
図７は、コントローラ７を用いてゲーム操作するときの状態を概説する図解図である。図７に示すように、ゲームシステム１でコントローラ７を用いてゲームをプレイする際、プレイヤは、一方の手でコントローラ７を把持する。ここで、マーカ８ａおよび８ｂは、モニタ２の画面の横方向と平行に配置されている。プレイヤは、コントローラ７の前面（撮像情報演算部３５が撮像する光の入射口側）がマーカ８ａおよび８ｂの方向を向く状態でコントローラ７を把持する。この状態で、プレイヤは、コントローラ７が指し示す画面上の位置を変更したり、コントローラ７と各マーカ８ａおよび８ｂとの距離を変更したりすることによってゲーム操作を行う。
【００５９】
図８は、マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図である。図８に示すように、各マーカ８ａおよび８ｂは、それぞれ視野角θ１の範囲で赤外光を放射する。また、撮像情報演算部３５の撮像素子４０は、上記コントローラ７の視線方向を中心とした視野角θ２の範囲で入射する光を受光することができる。例えば、各マーカ８ａおよび８ｂの視野角θ１は共に３４°（半値角）であり、撮像素子４０の視野角θ２は４１°である。プレイヤは、撮像素子４０が２つのマーカ８ａおよび８ｂからの赤外光を受光することが可能な位置および向きとなるように、コントローラ７を把持する。具体的には、撮像素子４０の視野角θ２の中に少なくとも一方のマーカ８ａおよび８ｂが存在し、かつ、マーカ８ａまたは８ｂの少なくとも一方の視野角θ１の中にコントローラ７が存在する状態となるように、プレイヤはコントローラ７を把持する。この状態にあるとき、コントローラ７は、マーカ８ａおよび／または８ｂを検知することができる。プレイヤは、この状態を満たす範囲でコントローラ７の位置および向きを変化させることによってゲーム操作を行うことができる。なお、コントローラ７の位置および向きがこの範囲外となった場合、コントローラ７の位置および向きに基づいたゲーム操作を行うことができなくなる。以下では、上記範囲を「操作可能範囲」と呼ぶ。
【００６０】
操作可能範囲内でコントローラ７が把持される場合、撮像情報演算部３５によって各マーカ８ａおよび８ｂの画像が撮像される。すなわち、撮像素子４０によって得られる撮像画像には、撮像対象である各マーカ８ａおよび８ｂの画像（対象画像）が含まれる。図９は、対象画像を含む撮像画像の一例を示す図である。対象画像を含む撮像画像の画像データを用いて、画像処理回路４１は、各マーカ８ａおよび８ｂの撮像画像における位置を表す座標（マーカ座標）を算出する。
【００６１】
撮像画像の画像データにおいて対象画像は高輝度部分として現れるので、画像処理回路４１は、まず、この高輝度部分を対象画像の候補として検出する。次に、検出された高輝度部分の大きさに基づいて、その高輝度部分が対象画像であるか否かを判定する。撮像画像には、対象画像である２つのマーカ８ａおよび８ｂの画像８ａ’および８ｂ’の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。上記の判定処理は、対象画像であるマーカ８ａおよび８ｂの画像８ａ’および８ｂ’とそれ以外の画像とを区別し、対象画像を正確に検出するための処理である。具体的には、当該判定処理においては、検出された高輝度部分が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度部分が所定範囲内の大きさである場合、当該高輝度部分は対象画像を表すと判定され、高輝度部分が所定範囲内の大きさでない場合、当該高輝度部分は対象画像以外の画像を表すと判定される。
【００６２】
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度部分について、画像処理回路４１は当該高輝度部分の位置を算出する。具体的には、当該高輝度部分の重心位置を算出する。ここでは、当該重心位置の座標をマーカ座標と呼ぶ。また、重心位置は撮像素子４０の解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子４０によって撮像された撮像画像の解像度が１２６×９６であるとし、重心位置は１０２４×７６８のスケールで算出されるものとする。つまり、マーカ座標は、（０，０）から（１０２４，７６８）までの整数値で表現される。なお、撮像画像における位置は、撮像画像の左上を原点とし、下向きをｙ軸正方向とし、右向きをｘ軸正方向とする座標系（ｘｙ座標系）で表現されるものとする。また、対象画像が正しく検出される場合には上記判定処理によって２つの高輝度部分が対象画像として判定されるので、上記算出処理によって２箇所のマーカ座標が算出される。画像処理回路４１は、上記算出処理によって算出された２箇所のマーカ座標を示すデータを出力する。出力されたマーカ座標のデータは、上述したように、マイコン４２によって操作データとしてゲーム装置３に送信される。なお、本実施例では、撮像画像からマーカ座標の算出までをコントローラ７の画像処理回路４１及び／又はマイコン４２で行ったが、例えば撮像画像をゲーム装置３に送ることで同等の処理をゲーム装置３のＣＰＵ１０等で行わせることもできる。
【００６３】
ゲーム装置３は、受信した操作データに含まれる上記マーカ座標のデータを用いて、上記指示位置と、コントローラ７から各マーカ８ａおよび８ｂまでの距離を算出することができる。図１０は、コントローラ７の位置および／または向きを変化させた場合における撮像画像の変化を示す図である。図１０は、コントローラの状態と、その状態にあるときに得られる撮像画像との対応を示している。図１０において、コントローラ７が状態Ａにあるときの撮像画像を撮像画像Ｉ１とする。撮像画像Ｉ１では、対象画像である各マーカ８ａおよび８ｂの画像８ａ’および８ｂ’は、撮像画像Ｉ１の中央付近に位置している。状態Ａは、コントローラ７がマーカ８ａとマーカ８ｂとの中間の位置を指し示している状態である。
【００６４】
図１０に示す状態Ｂは、状態Ａを基準としてコントローラ７を右方向（Ｘ軸正方向）に平行移動させた状態である。この状態Ｂにおいては、撮像情報演算部３５によって撮像画像Ｉ３が得られる。撮像画像Ｉ３においては、対象画像８ａ’および８ｂ’は、撮像画像Ｉ１を基準として左方向（ｘ軸負方向）に平行移動している。なお、状態Ｂは、コントローラ７の指示方向を状態Ａから右方向に向けた状態である。ここで、コントローラ７を右方向に平行移動させる場合だけでなく、コントローラ７をＹ軸周りに回転させることによっても、コントローラ７の指示方向を右方向に向けることができる。したがって、コントローラ７をＹ軸周りに回転させる場合にも撮像画像Ｉ３と同様の撮像画像が得られる。以上より、コントローラ７の指示方向を右方向に向けるようにコントローラ７を移動（回転）させた場合、撮像画像Ｉ３と同様の撮像画像が得られる、すなわち、対象画像８ａ’および８ｂ’が平行移動した画像が得られる。したがって、撮像画像内における対象画像の位置（後述する例では、画像８ａ’と画像８ｂ’の中点の位置）を検出することによって、コントローラ７が指し示す方向を知ることができる。
【００６５】
図１０に示す状態Ｃは、状態Ａを基準としてコントローラ７を各マーカ８ａおよび８ｂから遠ざけた（すなわち、後方向に平行移動させた）状態である。この状態Ｃにおいては、撮像情報演算部３５によって撮像画像Ｉ４が得られる。撮像画像Ｉ４においては、画像８ａ’と画像８ｂ’との距離が、撮像画像Ｉ１よりも短くなっている。したがって、撮像画像内における２つのマーカ画像の間の長さ（画像８ａ’と画像８ｂ’との間の長さ。２つの対象画像を一体と見れば、対象画像の大きさ）を検出することによって、コントローラ７と各マーカ８ａおよび８ｂとの距離を知ることができる。
【００６６】
次に、以上のようなゲームシステムを用いて行われるゲーム例について説明する。本実施形態では、仮想の３次元のゲーム空間内においてオブジェクト（釣竿）を移動させるゲーム（釣りゲーム）を例として説明する。図１１は、本実施形態におけるゲーム画面の一例を示す図である。図１１において、モニタ２の画面には、地面５１および池５２が存在する地形が表示される。池５２の中には、魚５３ａ〜５３ｃが存在する。池５２の上方には釣竿５４が表示されている。地面５１、池５２、魚５３ａ〜５３ｃ、および釣竿５４は、３次元のゲーム空間内に存在するオブジェクトである。さらに、画面上には、コントローラ７による指示位置を示す指示画像の一例のカーソル５５が表示される。本ゲームは、コントローラ７を用いて操作対象オブジェクトの一例の釣竿５４を移動させる操作をプレイヤに行わせ、釣竿５４によって魚５３ａ〜５３ｃを釣り上げて遊ぶゲームである。なお、釣竿５４は、操作対象オブジェクトの一例でもあり、基準画像の一例でもある。もちろん、操作対象オブジェクトと基準画像とを異なる画像にしてもよい。また、例えば、釣竿５４を同じ３次元オブジェクトを利用した場合でも、操作対象オブジェクトとして利用する場合と基準画像として利用する場合とで、当該オブジェクトに貼り付けるテクスチャの色を変えるようにしてもよい。
【００６７】
図１１は、ゲーム開始直後のゲーム画面を示す図である。ゲーム開始直後においては、釣竿５４は、予め定めれた位置例えば画面の中央付近に表示される。ただし、ゲーム開始直後においては、プレイヤは釣竿５４の操作を行うことができない。ゲーム開始直後においては、プレイヤは、カーソル５５を操作しなければならない。プレイヤは、コントローラ７の指示位置を変化させることでカーソル５５を移動させることができる。カーソル５５はコントローラ７の指示位置に表示されるので、プレイヤは、カーソル５５を見ることによって指示位置を確認することができる。ゲーム開始直後においては、プレイヤは、カーソル５５が釣竿５４の少なくとも一部を含む範囲（例えば釣竿５４に重なるように）カーソル５５を移動させる。図１２は、カーソル５５が釣竿５４に重なった場合のゲーム画面を示す図である。カーソル５５を移動させて図１２に示す状態にすることによって、プレイヤは釣竿５４の操作を行うことができる。
【００６８】
図１３は、釣竿５４の操作が可能となった状態のゲーム画面を示す図である。カーソル５５が釣竿５４に重なると、図１３に示すように、カーソル５５は画面から消去される。なお、カーソル５５を必ず消去する必要はなく、また、別の形態のカーソルに置き換えてもよい。そして、操作可能状態であることがわかるように、釣竿５４の画像は、手で持った状態を示す画像に変化する。この後、プレイヤは、３次元のゲーム空間内において釣竿５４を移動させることができる。図１４は、釣竿５４を移動させたときのゲーム画面を示す図である。プレイヤは、コントローラ７によって、釣竿５４を３次元空間内において自由に移動させることができる。プレイヤは、画面の上下左右方向だけでなく、画面の奥行き方向についても釣竿を移動させることができる。
【００６９】
図１５は、３次元のゲーム空間の様子を示す図である。図１５に示すように、本実施形態では、ゲーム空間であるワールド座標系には、各種の３次元オブジェクトである例えば地面５１及び池５２を含む地形５０、竿５４、図示しない魚などが配置される。地形５０は、ゲーム空間のＸ’Ｚ’平面が地面５１と平行となり、Ｙ’軸が地面５１と垂直になるように配置される。また、ゲーム空間を撮影するための仮想カメラは地面５１の上方に設置される。そして、その仮想カメラの視線方向は、地面５１を見下ろすような俯角に設定される（図１５に示す矢印５６参照）。なお、図１５において、仮想カメラの視線方向５６は図面手前から奥側を向いている。
【００７０】
ここで、上述した図１３及び図１４で説明したように釣竿５４の操作が可能となった状態において、コントローラ７をマーカ８ａ、８ｂに対して左右方向（本実施形態ではマーカ８ａ，８ｂの並び方向に平行）に移動させると、釣竿５４はＸ’軸方向に移動する。コントローラ７をマーカ８ａ，８ｂに対して上下方向（マーカ８ａ，８ｂの並び方向に上下の垂直）に移動させると、釣竿５４はＹ’軸方向に移動する。また、コントローラ７をマーカ８ａ，８ｂに対して前後方向（マーカ８ａ，８ｂの並び方向に前後の垂直）に移動させると、釣竿はＺ’軸方向に移動する。なお、コントローラ７を左右方向や上下方向に動かしすぎると、コントローラ７の撮像素子４０の範囲からマーカ８ａ，８ｂが外れる。その結果、コントローラ７の動きが演算できなくなり、釣竿５４が操作できない状態となる。
【００７１】
ここで、３次元のゲーム空間の様子を二次元のゲーム画像にする場合には、仮想カメラの視線方向５６に垂直に二次元のスクリーン平面が設定され、このスクリーン平面にビューボリューム内の各オブジェクトが透視投影変換されることにより、ゲーム空間内の様子が二次元の画像として設定される。このとき、このスクリーン平面とゲーム空間の水平面とは平行になっていない。さらに、通常は、立体感を出すために透視投影変換を行うため、２次元の画像にはパースがかかった状態となっている。したがって、釣竿５４は３次元空間を移動するので、コントローラ７の指示位置と釣竿５４の画面上の表示位置は必ずしも一致しない。例えば、コントローラ７を前後方向に移動させても指示位置は変化しないが、釣竿５４はＺ’軸方向に移動する結果、表示位置が変化するので、コントローラ７の指示位置と釣竿５４の表示位置とが一致しなくなる。
【００７２】
ここで、もし、ゲーム開始後すぐに釣竿５４の操作を開始させるとすれば、カーソル５５が画面に表示されないので、プレイヤは、指示位置がどこであるかわからないまま釣竿を操作しなければならない。そのため、プレイヤは、コントローラ７を操作可能範囲を超えて動かしてしまう可能性が高く、釣竿５４が操作不能になる状態が頻繁に生じてしまう。そこで、本実施形態では、釣竿５４の操作を行う前に、カーソル５５を用いてプレイヤに指示位置を確認させるようにしている。カーソル５５を指示位置に従って移動させてカーソル５５と釣竿５４とを合わせる操作をプレイヤに行わせることで、プレイヤは、釣竿５４の操作を開始する時の指示位置を認識することができる。また、プレイヤは、カーソル５５を移動させる際に、どの程度までコントローラ７を動かしてもよいか（操作可能範囲を外れないか）を確認することができる。このように、釣竿５４の操作を開始する前に指示位置をプレイヤに確認させることによって、プレイヤは、釣竿５４の操作中も指示位置をある程度イメージすることができる。そのため、コントローラ７を操作可能範囲を超えて動かしてしまう可能性が低くなり、釣竿５４が頻繁に操作不能となることを防止することができる。また、釣竿５４の操作中も指示位置をある程度イメージすることができることから、コントローラ７を用いた操作の操作性を向上させることができる。
【００７３】
なお、本実施形態では、コントローラ７が操作可能範囲を外れると、ゲーム画面はゲーム開始直後の状態（図１１に示す状態）に戻る。すなわち、釣竿５４は、初期位置に戻り、操作できない状態となる。また、画面上にはカーソル５５が再度表示される。したがって、コントローラ７が操作可能範囲を外れた場合、プレイヤは、カーソル５５を釣竿５４に合わせる操作を再度行わなければならない。これによって、コントローラ７が操作可能範囲を外れた場合には、プレイヤに指示位置を再度確認させることができる。
【００７４】
なお、他の実施形態においては、カーソル５５を用いた指示位置の確認操作は、ゲーム開始直後にのみ行わせるようにしてもよいし、コントローラ７が操作可能範囲を外れた場合にのみ行わせるようにしてもよい。
【００７５】
次に、ゲーム装置３において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図１６を用いて説明する。図１６は、ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図である。図１６に示すように、メインメモリ１３には、操作データ６１、基準データ６２、指示位置算出用データ６３、奥行き算出用データ６４、操作結果データ６５、カーソルデータ６６、オブジェクトデータ６７、および操作フラグデータ６８等が記憶される。なお、メインメモリ１３には、図１６に示すデータの他、ゲームに登場するキャラクタに関するデータ（魚５３ａ〜５３ｃの画像データや位置データ等）やゲーム空間に関するデータ（地面５１や池５２等の地形データ）等、ゲーム処理に必要なデータが記憶される。
【００７６】
操作データ６１は、コントローラ７から取得される、コントローラ７に対する操作情報を示すデータである。操作データ６１には、マーカ座標データ６１１が含まれる。マーカ座標データ６１１は、撮像画像に含まれるマーカの画像の位置を表す座標（マーカ座標）を示す。なお、撮像画像に２つのマーカの画像が含まれる場合、当該２つのマーカの画像の位置を表す２つの座標値がマーカ座標データ６１１として格納される。撮像画像に１つのマーカの画像のみが含まれる場合、当該１つのマーカの画像の位置を表す１つの座標値がマーカ座標データ６１１として格納される。なお、操作データ６１は、上述のように所定時間毎にコントローラ７から取得され、取得された操作データ６１はメインメモリ１３に更新して記憶される。また、操作データ６１には、操作部３２に対する操作状態（操作部３２に含まれる各操作スイッチが押下されたか否か）を示すデータ、および、加速度センサ３７による検知結果を示すデータが含まれる。
【００７７】
基準データ６２は、コントローラ７が基準状態にあるときの撮像画像に関するデータである。ここでは、コントローラ７の基準状態は、後述するキャリブレーション処理においてプレイヤによって設定される。基準データ６２には、基準方向ベクトルデータ６２１、基準中点座標データ６２２、および最小距離データ６２３が含まれる。基準方向ベクトルデータ６２１は、コントローラ７が基準状態にあるときに得られる２つのマーカ座標の一方を始点とし、他方を終点とするベクトル（基準方向ベクトル）を示す。基準中点座標データ６２２は、コントローラ７が基準状態にあるときに得られる２つのマーカ座標の中点の座標（基準中点座標）を示す。最小距離データ６２３は、コントローラ７が基準状態にあるときに得られる２つのマーカ座標から撮像画像の端部までの距離のうち、最小となる距離（最小距離）を示す（後述する図１９参照）。最小距離データ６２３は、撮像画像のｘｙ座標系におけるｘ軸方向に関する最小距離と、ｙ軸方向に関する最小距離という２種類の最小距離を示す。
【００７８】
指示位置算出用データ６３は、コントローラ７の指示位置を算出するために用いられるデータである。指示位置算出用データ６３には、第１中点座標データ６３１、方向ベクトルデータ６３２、回転角度データ６３３、第２中点座標データ６３４、および移動ベクトルデータ６３５が含まれる。第１中点座標データ６３１は、マーカ座標データ６１１により示される２つのマーカ座標の中点の座標（第１中点座標）を示す。方向ベクトルデータ６３２は、マーカ座標データ６１１により示される２つのマーカ座標の一方を始点とし、他方を終点とするベクトル（方向ベクトル）を示す。回転角度データ６３３は、現在の方向ベクトルと基準方向ベクトルとのなす角度を示す。第２中点座標データ６３４は、撮像画像の中心を軸として回転角度データ６３３により示される角度だけ第１中点座標の位置を回転させた位置を表す座標（第２中点座標）を示す。移動ベクトルデータ６３５は、現在の第２中点座標と基準中点座標との差分を示すベクトル（移動ベクトル）のデータである。移動ベクトルは、現在の指示位置が基準状態における指示位置からどれだけ移動しているかを示すベクトルである。
【００７９】
奥行き算出用データ６４は、後述する奥行値を算出するために用いられるデータである。奥行値は、コントローラ７の前後方向の移動状態を示す指標であり、コントローラ７からマーカ８ａおよび８ｂまでの距離に対応した大きさとなる値である。奥行き算出用データ６４には、マーカ画像距離データ６４１および実距離データ６４２が含まれる。マーカ画像距離データ６４１は、マーカ座標データ６１１により示される２つのマーカ座標の間の距離（マーカ画像距離）を示す。実距離データ６４２は、コントローラ７からマーカ８ａおよび８ｂまでの距離（実距離）を示す。
【００８０】
操作結果データ６５は、上記指示位置算出用データ６３および奥行き算出用データ６４から得られる、コントローラ７の操作結果を示すデータである。操作結果データ６５には、指示座標データ６５１および奥行値データ６５２が含まれる。指示座標データ６５１は、画面上の上記指示位置を表す座標（指示座標）を示す。ゲーム装置３は、指示位置算出用データ６３を用いて指示座標データ６５１を算出する。奥行値データ６５２は奥行き算出用データ６４を用いて算出され、上記奥行値を示す。
【００８１】
カーソルデータ６６は、画面上に表示されるカーソル（図１１等に示すカーソル５５）に関するデータである。カーソルデータ６６には、カーソル画面座標データ６６１が含まれる。カーソル画面座標データ６６１は、カーソルの画面上の位置を示す座標を示す。
【００８２】
オブジェクトデータ６７は、プレイヤの操作対象となるオブジェクト（釣竿５４）に関するデータである。オブジェクトデータ６７には、オブジェクト画面座標データ６７１およびオブジェクト空間座標データ６７２が含まれる。オブジェクト画面座標データ６７１は、釣竿の画面上の位置を表す２次元座標を示す。オブジェクト空間座標データ６７２は、釣竿のゲーム空間内の位置を表す３次元座標を示す。
【００８３】
操作フラグデータ６８は、操作フラグの内容を示すデータである。操作フラグは、釣竿が操作可能な状態であるか否かを示すフラグである。具体的には、釣竿が操作可能な状態である場合、操作フラグはオンに設定され、釣竿が操作不可能な状態である場合、操作フラグはオフに設定される。
【００８４】
次に、ゲーム装置３において行われるゲーム処理の詳細を、図１７〜図を用いて説明する。図１７は、ゲーム装置３において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ１３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ１３に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１７に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図１７〜図３２に示すフローチャートにおいては、ゲーム処理のうち、コントローラ７を用いてカーソルまたは釣竿を移動させるゲーム処理について詳細に示し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。
【００８５】
まず、ステップＳ１において、３次元のゲーム空間が構築されてモニタ２に表示される。ＣＰＵ１０は、地面５１および池５２等からなるゲーム空間を構築する。さらに、池５２の中に魚５３ａ〜５３ｃを配置し、釣竿を予め定められた初期位置に配置する。釣竿は、画面の中央付近に表示されるように配置されることが好ましい。以上のように構築されたゲーム空間を、仮想カメラの位置から視線方向に見たゲーム画像が生成され、生成されたゲーム画像がモニタ２に表示される。
【００８６】
続くステップＳ２において、キャリブレーション処理が実行される。キャリブレーション処理は、コントローラ７の基準状態をプレイヤに設定させるための処理である。この処理によってコントローラ７の基準状態が決定し、メインメモリ１３に基準データ６２が記憶される。以下、図１８〜図２０を用いてキャリブレーション処理を説明する。
【００８７】
図１８は、図１７に示すステップＳ２の処理の詳細を示すフローチャートである。ステップＳ２のキャリブレーション処理においては、まずステップＳ３１において、コントローラ７からの操作データ６１が取得される。上述したように、この操作データ６１にはマーカ座標データ６１１が含まれる。続くステップＳ３２において、マーカが検出されたか否かが判定される。具体的には、ＣＰＵ１０は、ステップＳ３１で取得された操作データ６１に含まれるマーカ座標データ６１１が、１つまたは２つの座標値を示すデータであるか否かを判定する。ここで、コントローラ７が操作可能範囲を外れていてマーカが検出されない場合、マーカ座標データ６１１は、座標値のデータを含まず、マーカ座標が検出されなかったことを示す。一方、コントローラ７が操作可能範囲内にありマーカが検出される場合、マーカ座標データ６１１は、１つまたは２つの座標値を示す。ステップＳ３２の判定において、マーカが検出されたと判定される場合、ステップＳ３３の処理が実行される。一方、マーカが検出されないと判定される場合、ステップＳ３２の処理が再度実行される。つまり、ＣＰＵ１０は、マーカが検出されるまでステップＳ３２の処理を繰り返す。
【００８８】
ステップＳ３３においては、プレイヤに対してトリガー入力を促すコメントが画面に表示される。トリガー入力とは、コントローラ７の基準状態を決めるための入力であり、ここでは、コントローラ７のＡボタン３２ｉに対する入力とする。ステップＳ３３では、具体的には、「コントローラを画面の中央に向けてＡボタンを押して下さい。」といったコメントが画面に表示される。このコメントに応じて、プレイヤは、コントローラ７を画面の中央に向けてＡボタンを押下する。Ａボタンを押下した時点におけるコントローラ７の位置および向きが基準状態として設定されることとなる。
【００８９】
続くステップＳ３４において、上記トリガー入力が検出されたか否かが判定される。具体的には、ＣＰＵ１０は、コントローラ７からの操作データ６１を取得し、トリガー入力に対応するＡボタン３２ｉに対する入力があったか否かを判定する。ステップＳ３４の判定において、トリガー入力が検出されたと判定される場合、ステップＳ３５の処理が実行される。一方、トリガー入力が検出されないと判定される場合、ステップＳ３４の処理が再度実行される。つまり、ＣＰＵ１０は、トリガー入力が検出されるまでステップＳ３４の処理を繰り返す。
【００９０】
ステップＳ３５においては、トリガー入力が行われた時点におけるマーカ座標が取得される。すなわち、ＣＰＵ１０は、トリガー入力に対応するＡボタン３２ｉに対する入力があったことを示す操作データ６１に含まれるマーカ座標データ６１１を取得する。図１９は、トリガー入力が行われた時点で取得されたマーカ座標の２次元座標系を示す図である。図１９に示すように、マーカ座標は、（０，０）から（１０２４，７６８）までの整数値をとるｘｙ座標系の座標値によって表される。図１９では、２つのマーカ座標Ｍｉ１およびＭｉ２が撮像画像に含まれている。
【００９１】
続くステップＳ３６において、ステップＳ３５で取得されたマーカ座標に基づいて基準方向ベクトルが算出される。具体的には、ＣＰＵ１０は、ステップＳ３５で取得されたマーカ座標Ｍｉ１およびＭｉ２の一方を始点とし、他方を終点とするベクトルＶｉを基準方向ベクトルとして算出する（図１９参照）。なお、ここでは、２つのマーカ座標Ｍｉ１およびＭｉ２のうちのいずれをベクトルの始点とし、いずれを終点とするかを、所定の条件に従って決定する。所定の条件はどのようなものであってもよいが、例えば、２つのマーカ座標のうちでｘ座標値の小さい方を始点とし、ｘ座標値の大きい方を終点とする。ステップＳ３６で算出された基準方向ベクトルのデータは、基準方向ベクトルデータ６２１としてメインメモリ１３に記憶される。なお、基準方向ベクトルデータ６２１は、基準方向ベクトルの始点から終点までを表す２次元ベクトルを示すものでもよいし、基準方向ベクトルの方向を角度によって表現するものであってもよい。
【００９２】
続くステップＳ３７においては、マーカ座標から撮像画像の端までの最小距離が算出される。具体的には、ＣＰＵ１０は、各マーカ座標から撮像画像の端までの距離をｘ軸方向およびｙ軸方向についてそれぞれ算出する。そして、ｘ軸方向に関する距離が最も小さいものと、ｙ軸方向に関する距離が最も小さいものとを選出し、それぞれを最小距離とする。図１９を例にとって説明すると、ｘ軸方向に関して、マーカ座標Ｍｉ１から撮像画像の右端（ｘ＝１０２４）までの距離、マーカ座標Ｍｉ１から撮像画像の左端（ｘ＝０）までの距離、マーカ座標Ｍｉ２から撮像画像の右端（ｘ＝１０２４）までの距離、マーカ座標Ｍｉ２から撮像画像の左端（ｘ＝０）までの距離をＣＰＵ１０は算出する。そして、これらの距離の内で最小のもの（ここでは、マーカ座標Ｍｉ２から撮像画像の右端までの距離とする）をｘ軸方向に関する最小距離Ｌｘとする。ｙ軸方向についてもｘ軸方向と同様にしてｙ軸方向に関する最小距離Ｌｙを算出することができる。以上のようにして算出されたｘ軸方向およびｙ軸方向に関する最小距離を示すデータは、最小距離データ６２３としてメインメモリ１３に記憶される。
【００９３】
続くステップＳ３８において、ステップＳ３５で取得されたマーカ座標に基づいて基準中点座標が算出される。具体的には、ＣＰＵ１０は、ステップＳ３５で取得されたマーカ座標Ｍｉ１およびＭｉ２の中点の座標を基準中点座標Ｃｉとして算出する（図１９参照）。ステップＳ３８で算出された基準中点座標のデータは、基準中点座標データ６２２としてメインメモリ１３に記憶される。
【００９４】
続くステップＳ３９において、座標系の変換が行われる。ここで、図１９に示した（０，０）から（１０２４，７６８）までの整数値をとる座標系を検出座標系と呼ぶ。ステップＳ３９においては、この検出座標系から演算座標系への変換が行われる。図２０は、撮像画像上の２次元領域を演算座標系で表す図である。図２０に示すように、演算座標系は、撮像画像の中心を原点とし、撮像画像の上下左右の端の座標値が１または−１となるように設定される座標系（ｘ’ｙ’座標系）である。また、演算座標系のｘ’軸は検出座標系のｘ軸と同じ向きであり、演算座標系のｙ’軸は検出座標系のｙ軸と同じ向きである。ＣＰＵ１０は、ステップＳ３７で算出された最小距離、および、ステップＳ３８で算出された基準中点座標の値を、検出座標系から演算座標系へ変換する。このとき、メインメモリ１３に記憶されている基準中点座標データ６２２および最小距離データ６２３の値は、変換後の値に更新される。なお、ステップＳ３９の処理は、座標系を変換するのみであって、撮像画像における基準中点座標の位置を変化させるものではない。検出座標系は撮像手段の解像度によってスケールが変化するのに対して、演算座標系は撮像手段の解像度とは無関係である。したがって、ステップＳ３９の処理によって検出座標系を演算座標系へ変換することによって、基準中点座標および最小距離を用いた処理を、撮像手段の解像度に依存しない形で行うことができる。以上のステップＳ３９の後、ＣＰＵ１０はキャリブレーション処理を終了する。なお、基準データ６２に相当するデータを予め用意しておけば、キャリブレーション処理の必要はない。また、マーカ８ａ，８ｂ間の間隔やマーカからコントローラまでの距離を入力させるようにしてもよい。
【００９５】
図１７の説明に戻り、ステップＳ２の後、ステップＳ３〜Ｓ２０の処理が実行される。このステップＳ３〜Ｓ２０の処理において、プレイヤは、カーソルまたは釣竿を操作することができる。なお、このステップＳ３〜Ｓ２０の処理ループは、１フレーム毎に１回実行される。
【００９６】
まず、ステップＳ３において、コントローラ７からの操作データ６１が取得される。上述したように、この操作データ６１にはマーカ座標データ６１１が含まれる。続くステップＳ４において、マーカが検出されたか否かが判定される。ステップＳ４の判定処理は、上述したステップＳ３２の判定処理と同様である。ステップＳ４の判定において、マーカが検出されたと判定される場合、ステップＳ５の処理が実行される。一方、マーカが検出されないと判定される場合、後述するステップＳ１６の処理が実行される。ここで、マーカが検出されない場合とは、コントローラ７が操作可能範囲から外れている場合である。
【００９７】
ステップＳ５においては、中点座標算出処理が実行される。以下、図２１〜図２７を用いて中点座標算出処理の詳細を説明する。図２１は、図１７に示すステップＳ５の処理の詳細を示すフローチャートである。また、図２２は、ステップＳ３で取得されたマーカ座標の座標系（検出座標系）を示す図である。以下では、図２２に示すマーカ座標Ｍ１およびＭ２がステップＳ３で取得された場合を例として、ステップＳ５の処理を説明する。
【００９８】
ステップＳ５の中点座標算出処理においては、まずステップＳ４１において、ステップＳ３で取得されたマーカ座標に基づいて方向ベクトルが算出される。具体的には、ＣＰＵ１０は、ステップＳ３で取得されたマーカ座標Ｍ１およびＭ２の一方を始点とし、他方を終点とするベクトルＶ１を方向ベクトルとして算出する（図２２参照）。なお、ここでは、２つのマーカ座標Ｍ１およびＭ２のうちのいずれをベクトルの始点とし、いずれを終点とするかを、所定の条件に従って決定する。この所定の条件は、上記ステップＳ３６で用いられる条件と同じ条件である。ステップＳ４１で算出された方向ベクトルのデータは、方向ベクトルデータ６３２としてメインメモリ１３に記憶される。なお、方向ベクトルデータ６３２は、方向ベクトルの始点から終点までを表す２次元ベクトルを示すものでもよいし、方向ベクトルの方向を角度によって表現するものであってもよい。
【００９９】
続くステップＳ４２において、ステップＳ３で取得されたマーカ座標に基づいて第１中点座標が算出される。具体的には、ＣＰＵ１０は、ステップＳ３で取得されたマーカ座標Ｍ１およびＭ２の中点の座標を第１中点座標Ｃ１として算出する（図２２参照）。ステップＳ４２で算出された第１中点座標のデータは、第１中点座標データ６３１としてメインメモリ１３に記憶される。続くステップＳ４３において、第１中点座標の値が検出座標系から上記演算座標系に変換される。このとき、メインメモリ１３に記憶されている第１中点座標データ６３１の値は、変換後の値に更新される。
【０１００】
続くステップＳ４４において、ステップＳ４１で算出された方向ベクトルと、上記ステップＳ２で算出された基準方向ベクトルとに基づいて、基準方向ベクトルと方向ベクトルとのなす角の大きさ（回転角度）θが算出される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている基準方向ベクトルデータ６２１および方向ベクトルデータ６３２を参照して上記回転角度θを算出する。算出された回転角度θのデータは、回転角度データ６３３としてメインメモリ１３に記憶される。この回転角度θは、コントローラ７が基準状態から前後方向を軸としてどれくらい回転しているかを示す指標である。つまり、この回転角度θを検出することによって、コントローラ７の前後方向を軸とした回転の度合いを検出することができる。
【０１０１】
続くステップＳ４５において、ステップＳ４３で算出された第１中点座標と、ステップＳ４４で算出された回転角度とに基づいて、第２中点座標が算出される。図２３は、図２１のステップＳ４５の処理を説明するための図である。図２３に示すように、第２中点座標Ｃ２の位置は、撮像画像の中心（演算座標系の原点）を軸として回転角度θだけ第１中点座標Ｃ１の位置を回転させた位置として算出される。算出された第２中点座標のデータは、第２中点座標データ６３４としてメインメモリ１３に記憶される。
【０１０２】
ここで、コントローラ７の指示位置が一定であっても、コントローラ７の前後方向を軸とした回転状態によって、マーカ座標の値が変化してしまう。そのため、マーカ座標から単純に算出される第１中点座標では、正しい指示位置を算出することができない。そこで、本実施形態では、ステップＳ４４およびＳ４５の処理によって、コントローラ７の前後方向を軸とした回転の影響を考慮し、第１中点座標の値を補正して第２中点座標の値を算出している。すなわち、ステップＳ４４においてコントローラ７が基準状態から回転した度合いを算出し、ステップＳ４５において回転の度合いに応じて第１中点座標の位置を回転させることによって、コントローラ７の回転によって生じる中点座標のずれを補正している。
【０１０３】
ステップＳ４５の次のステップＳ４６において、基準中点座標と第２中点座標との差分を示すベクトル（差分ベクトル）が算出される。図２４は、図２１のステップＳ４６の処理を説明するための図である。図２４に示すように、差分ベクトルＶ２は、基準中点座標Ｃｉを始点とし、第２中点座標Ｃ２を終点とするベクトルである。ＣＰＵ１０は、メインメモリ１３に記憶されている基準中点座標データ６２２および第２中点座標データ６３４を参照して、差分ベクトルを算出する。
【０１０４】
続くステップＳ４７において、ステップＳ４６で算出された差分ベクトルに対してスケーリング処理が行われる。具体的には、ＣＰＵ１０は、差分ベクトルのｘ’軸成分を、ｘ’軸方向に関する最小距離Ｌｘで除算し、差分ベクトルのｙ’軸成分を、ｙ’軸方向に関する最小距離Ｌｙで除算する。図２５は、図２１のステップＳ４７の処理を説明するための図である。図２５は、スケーリング処理前後の差分ベクトルの大きさを一定とした場合のｘ’ｙ’座標系の変化を示す図である。スケーリング処理によって、図２５に示す点線の内側の領域が−１≦ｘ’≦１かつ−１≦ｙ’≦１の領域となるように差分ベクトルの大きさが変化する。すなわち、図２４に示す差分ベクトルにスケーリング処理を行った結果、図２６に示すベクトルＶ２’が得られる。ＣＰＵ１０は、スケーリング処理によって得られたベクトルＶ２’を移動ベクトルとし、ベクトルＶ２’のデータを移動ベクトルデータ６３５としてメインメモリ１３に記憶させる。以上のステップＳ４７の後、ＣＰＵ１０は中点座標算出処理を終了する。
【０１０５】
図２７は、操作可能範囲と差分ベクトルの値との関係を示す図である。図２７において、点線で示される領域Ａ１は、コントローラ７が操作可能範囲にあるときの指示位置の範囲を示している。また、位置Ｐ１は、基準状態における指示位置を示している。ここで、一点鎖線で示される領域Ａ２は、スケーリング処理によって得られる移動ベクトルの値が−１≦ｘ’≦１かつ−１≦ｙ’≦１となるときの指示位置の範囲である。図２７より、移動ベクトルの値が−１≦ｘ’≦１かつ−１≦ｙ’≦１となる範囲では、コントローラ７が操作可能範囲内にあり、かつ、操作可能範囲を有効に利用できることがわかる。したがって、−１≦ｘ’≦１かつ−１≦ｙ’≦１となる範囲で移動ベクトルをオブジェクトの操作に用いることによって、操作可能範囲を有効に利用できることがわかる。また、オブジェクトの移動範囲に制限がある場合には、当該移動範囲と、移動ベクトルの値が−１≦ｘ’≦１かつ−１≦ｙ’≦１となる範囲とを対応付けることによって、移動ベクトルとオブジェクトの移動範囲とを容易に対応付けることができる。
【０１０６】
図１７の説明に戻り、ステップＳ５の次のステップＳ６において、奥行値算出処理が実行される。以下、図２８および図２９を用いて奥行値算出処理の詳細を説明する。図２８は、図１７に示すステップＳ６の処理の詳細を示すフローチャートである。また、図２９は、図１７に示すステップＳ６の処理を説明するための図である。
【０１０７】
ステップＳ６の奥行値算出処理においては、まず、ステップＳ５１において、ステップＳ３で取得されたマーカ座標に基づいてマーカ画像距離ｍｉ（図２９（ａ）参照）が算出される。具体的には、ＣＰＵ１０は、ステップＳ３で取得された２つのマーカ座標Ｍ１およびＭ２の間の距離ｍｉを算出する。算出された距離のデータは、マーカ画像距離データ６４１としてメインメモリ１３に記憶される。
【０１０８】
続くステップＳ５２において、マーカ８ａおよび８ｂの設置位置に対する撮像素子４０の撮像可能範囲の幅ｗ（図２９（ｂ）参照）が算出される。具体的には、ＣＰＵ１０は、次の式から幅ｗを算出する。
ｗ＝ｗｉ×ｍ／ｍｉ
上式において、ｍは、マーカ８ａおよび８ｂの設置間隔（例えば、３０ｃｍ）であり、固定値である。また、ｗｉは、幅ｗに対応する撮像素子４０の撮像画像の幅ｗｉであり、固定値である。これら設置間隔ｍおよび幅ｗｉは、いずれも固定値であるため、予めゲーム装置３内の記憶手段に格納される。なお、設置間隔ｍについては、プレイヤの設置環境に応じて任意の間隔でマーカ８ａおよび８ｂを設置してもかまわない。この場合、マーカ８ａおよび８ｂを設置した間隔を設置間隔ｍとしてプレイヤが入力するようにすればよい。
【０１０９】
続くステップＳ５３において、幅ｗおよび撮像素子４０の視野角θ２に基づいて、マーカ８ａおよび８ｂと撮像素子４０（コントローラ７）との距離ｄが算出される。具体的には、ＣＰＵ１０は、次の式から距離ｄを算出する。
ｔａｎ（θ２／２）＝（ｗ／２）／ｄ＝ｗ／２ｄ
なお、視野角θ２は固定値であるため、予めゲーム装置３内の記憶手段に格納される。上式によって算出された距離ｄのデータは、実距離データ６４２としてメインメモリ１３に記憶される。
【０１１０】
続くステップＳ５４において、距離ｄに対応した大きさの奥行値が算出される。奥行値は、距離ｄが大きいほど大きい値をとるように算出されるが、上限値および下限値が設定されていてもよい。算出された奥行値のデータは、奥行値データ６５２としてメインメモリ１３に記憶される。以上のステップＳ５４の後、ＣＰＵ１０は奥行値算出処理を終了する。
【０１１１】
図１７の説明に戻り、ステップＳ６の次のステップＳ７において、操作フラグがオンに設定されているか否かが判定される。ステップＳ７の判定処理は、操作対象であるオブジェクト（釣竿）が操作可能な状態であるか否かを判定するための処理である。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている操作フラグデータ６８を参照して、操作フラグがオンに設定されているか否かを判定する。判定の結果、操作フラグがオンに設定されている場合、すなわち、オブジェクトが操作可能な状態である場合、ステップＳ１４およびＳ１５の処理が実行される。一方、操作フラグがオフに設定されている場合、すなわち、オブジェクトが操作可能な状態でない場合、ステップＳ８〜Ｓ１３の処理が実行される。具体的には、プレイヤが画面上に表示されるカーソルを操作している状態（図１１）ではステップＳ８の処理が実行され、カーソルをオブジェクトに合わせた後の状態（図１３および図１４）ではステップＳ１４の処理が実行される。
【０１１２】
まず、ステップＳ８〜Ｓ１３の処理について説明する。ステップＳ８〜Ｓ１３の処理は、プレイヤがコントローラ７を用いて画面上のカーソルを移動させるための処理である。ステップＳ８においては、指示座標算出処理が実行される。以下、図３０および図３１を用いて指示座標算出処理の詳細を説明する。図３０は、図１７に示すステップＳ８の処理の詳細を示すフローチャートである。また、図３１は、図１７に示すステップＳ８の処理を説明するための図である。なお、ここでは、図３１（ａ）に示すように、画面上の位置を表すための座標系をＸＹ座標系とする。ＸＹ座標系は、画面の左上を原点とし、画面の右方向をＸ軸正方向、画面の下方向をＹ軸正方向とした座標系である。また、ＸＹ座標系の座標値は、（０，０）から（６４０，４８０）までの整数値をとる。
【０１１３】
まず、図３１を用いて指示座標算出処理の概要を説明する。図３１（ａ）は、ステップＳ５で算出された移動ベクトルＶ２’の一例を示す図である。図３１（ａ）に示す移動ベクトルが算出された場合、指示座標（Ｘｆ，Ｙｆ）は、図３１（ｂ）に示す位置に算出される。ここで、図３１（ｂ）に示すベクトルＶ２”は、Ｖ２”＝−Ｖ２’×３２０である。すなわち、指示座標の位置は、画面上の中心位置（３２０，２４０）を基点とし、ベクトルＶ２”だけ移動した位置となる。
【０１１４】
具体的に、指示座標算出処理においては、まずステップＳ５６において、ステップＳ５で算出された移動ベクトルのｘ’座標値に基づいて画面上のＸ座標値が算出される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている移動ベクトルデータ６３５により示される移動ベクトルを参照し、次の式に従って指示座標のＸ座標値Ｘｆを算出する。
Ｘｆ＝−ｘｆ×３２０＋３２０
なお、上式において、ｘｆは移動ベクトルのｘ’座標値である。また、移動ベクトルのｘ’座標値は、ステップＳ２で設定されるコントローラ７の基準状態によっては−１よりも小さい値または１よりも大きい値をとる場合がある。このような場合、ＣＰＵ１０は、ｘ’座標値が−１よりも小さい場合はｘ’座標値を−１として上式を計算し、ｘ’座標値が１よりも大きい場合はｘ’座標値を１として上式を計算する。
【０１１５】
続くステップＳ５７において、ステップＳ５で算出された移動ベクトルのｙ’座標値に基づいて画面上のＹ座標値が算出される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている移動ベクトルデータ６３５により示される移動ベクトルを参照し、次の式に従って指示座標のＹ座標値Ｙｆを算出する。
Ｙｆ＝−ｙｆ×２４０＋２４０
なお、上式において、ｙｆは移動ベクトルのｙ’座標値である。また、ステップＳ５６と同様、ＣＰＵ１０は、ｙ’座標値が−１よりも小さい場合はｙ’座標値を−１として上式を計算し、ｙ’座標値が１よりも大きい場合はｙ’座標値を１として上式を計算する。
【０１１６】
以上のステップＳ５６およびＳ５７によって、指示座標の値（Ｘｆ，Ｙｆ）が算出される。算出された指示座標のデータは、指示座標データ６５１としてメインメモリ１３に記憶される。以上のステップＳ５６およびＳ５７の後、ＣＰＵ１０は指示座標算出処理を終了する。
【０１１７】
図１７の説明に戻り、ステップＳ８の次のステップＳ９において、予め定められた初期位置に釣竿が配置されたゲーム空間の画像が生成される。すなわち、ＣＰＵ１０は、仮想カメラから見たゲーム空間の画像を生成する。続くステップＳ１０において、釣竿の画面上の表示位置が算出される。釣竿の表示位置は、３次元のゲーム空間における位置を画面に対応する投影面に投影した位置を算出し、さらに、投影面上の位置をそれに対応する画面上の位置に変換することによって得られる。このようにして得られた釣竿の画面上の位置は、オブジェクト画面座標データ６７１としてメインメモリ１３に記憶される。なお、本実施形態では、ステップＳ１０が実行される時点における釣竿の画面上の位置は一定であるので、当該位置を表す座標を予め記憶しておき、ステップＳ１０の処理を省略するようにしてもよい。
【０１１８】
続くステップＳ１１においては、ステップＳ９で算出された指示座標の位置にカーソルが配置される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されているカーソル画面座標データ６６１の値を、指示座標データ６５１により示される値に更新する。さらに、ステップＳ９で生成されたゲーム画像に対して、指示座標の位置にカーソルの画像を重ねたゲーム画像を生成する。このように生成されたゲーム画像が、後述する表示処理によって画面に表示される。
【０１１９】
続くステップＳ１２においては、カーソルの位置が釣竿の画面上の位置と重なっているか否かが判定される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されているカーソル画面座標データ６６１およびオブジェクト画面座標データ６７１を参照し、カーソルの画面上の位置が釣竿の画面上の位置から所定距離内にあるか否かを判定する。そして、カーソルの位置が釣竿の位置から所定距離内にある場合、カーソルの位置が釣竿の画面上の位置と重なっていると判定される。ステップＳ１２の判定において、カーソルの位置が釣竿の画面上の位置と重なっていると判定される場合、ステップＳ１３の処理が実行される。一方、カーソルの位置が釣竿の画面上の位置と重なっていないと判定される場合、ステップＳ１３の処理がスキップされてステップＳ１９の処理が実行される。
【０１２０】
ステップＳ１３においては、操作フラグがオンに設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている操作フラグデータ６８の内容をオンに設定する。これによって、ステップＳ１３以降の処理においては、操作対象フラグがオフになるまでの間、操作対象であるオブジェクトをコントローラ７によって操作することが可能となる。ステップＳ１３の次に、後述するステップＳ１９の処理が実行される。
【０１２１】
次に、ステップＳ１４およびＳ１５の処理を説明する。ステップＳ９〜Ｓ１３の処理は、プレイヤがコントローラ７を用いてゲーム空間内のオブジェクト（釣竿）を移動させるための処理である。ステップＳ１４においては、オブジェクト位置算出処理が実行される。
【０１２２】
図３２は、図１７に示すステップＳ１４の処理の詳細を示すフローチャートである。オブジェクト位置算出処理においては、まずステップＳ６１において、ステップＳ５で算出された移動ベクトルのｘ’座標値に基づいて、ゲーム空間のＸ’Ｙ’Ｚ’座標系（図１５参照）のＸ’座標値が算出される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている移動ベクトルデータ６３５により示される移動ベクトルを参照し、次の式に従ってオブジェクトの位置を示すＸ’座標値Ｏｘを算出する。
Ｏｘ＝ｘｆ×α＋ａ
なお、上式において、ｘｆは移動ベクトルのｘ’座標値であり、αおよびａは予め定められた定数である。ここで、ＣＰＵ１０は、上記ステップＳ５６およびＳ５７と同様、ｘ’座標値の大きさを−１≦ｘｆ≦１の範囲に制限して上式を計算してもよい。すなわち、ｘ’座標値が−１よりも小さい場合はｘ’座標値を−１として上式を計算し、ｘ’座標値が１よりも大きい場合はｘ’座標値を１として上式を計算してもよい。
【０１２３】
続くステップＳ６２において、ステップＳ５で算出された移動ベクトルのｙ’座標値に基づいて、ゲーム空間のＸ’Ｙ’Ｚ’座標系（図１５参照）のＹ’座標値が算出される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている移動ベクトルデータ６３５により示される移動ベクトルを参照し、次の式に従ってオブジェクトの位置を示すＹ’座標値Ｏｙを算出する。
Ｏｙ＝ｙｆ×β＋ｂ
なお、上式において、ｙｆは移動ベクトルのｙ’座標値であり、βおよびｂは予め定められた定数である。また、ステップＳ６１と同様、ＣＰＵ１０は、ｙ’座標値の大きさを−１≦ｙｆ≦１の範囲に制限して上式を計算してもよい。
【０１２４】
続くステップＳ６３において、ステップＳ６で算出された奥行値に基づいて、ゲーム空間のＸ’Ｙ’Ｚ’座標系（図１５参照）のＺ’座標値が算出される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている奥行値データ６５２を参照し、次の式に従ってオブジェクトの位置を示すＺ’座標値Ｏｚを算出する。
Ｏｚ＝ｚｆ×γ＋ｃ
なお、上式において、ｚｆは奥行値であり、γおよびｃは予め定められた定数である。以上のステップＳ６１〜Ｓ６３によって、釣竿のゲーム空間内における位置が算出される。算出されたＸ’Ｙ’Ｚ’座標系の座標値のデータは、オブジェクト空間座標データ６７２としてメインメモリ１３に記憶される。
【０１２５】
ステップＳ６３の次に、ステップＳ６４〜Ｓ６６において、釣竿を引き上げるアクションを行わせるための処理が実行される。このアクションは、魚を釣り上げるためのアクションであり、釣竿に魚がかかった状態で引き上げのアクションを行うことによって、魚を釣り上げることができる。本実施形態においては、コントローラ７の指示位置が画面の上下方向に所定速度以上で移動した場合、上記アクションが行われる。
【０１２６】
ステップＳ６４においては、移動ベクトルのｙ’座標値の前回の値からの変化量が算出される。具体的には、ＣＰＵ１０は、１フレーム前に算出された移動ベクトルのｙ’座標値と、今回算出された移動ベクトルのｙ’座標値との差分を算出する。続くステップＳ６５において、上記変化量が予め定められた所定値以上であるか否かが判定される。変化量が所定値以上である場合、ステップＳ６６の処理が実行される。ステップＳ６６においては、釣竿を引き上げるアクションが実行される。これによって、当該アクションを表現するための数フレーム分のアニメーションが後述の表示処理において画面に表示される。一方、変化量が所定値よりも小さい場合、ステップＳ６６の処理がスキップされて、ＣＰＵ１０はオブジェクト位置算出処理を終了する。
【０１２７】
図１７の説明に戻り、ステップＳ１４の次のステップＳ１５において、ステップＳ１４で算出された位置に釣竿が配置されたゲーム空間の画像が生成される。すなわち、ＣＰＵ１０は、仮想カメラから見たゲーム空間の画像を生成する。これによって、後述するステップＳ１９の表示処理において、コントローラ７によって操作された位置に釣竿が移動する様子が画面に表示されることとなる。なお、ステップＳ１４およびＳ１５では、カーソルは表示されないので、ステップＳ１４およびＳ１５が実行されるフレームでは、カーソルが消去されることとなる。ステップＳ１５の次に、後述するステップＳ１９の処理が実行される。
【０１２８】
次に、ステップＳ１６〜Ｓ１８の処理を説明する。ステップＳ１６〜Ｓ１８の処理は、カーソルまたは釣竿の操作中にコントローラ７が操作可能範囲から外れた場合、すなわち、ステップＳ４の判定結果が否定であった場合に実行される。まず、ステップＳ１６においては、操作フラグがオフに設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている操作フラグデータ６８の内容をオフに設定する。これによって、ステップＳ１６以降の処理においては、操作対象フラグがオンになるまでの間、操作対象であるオブジェクトをコントローラ７によって操作することができなくなる。
【０１２９】
続くステップＳ１７においては、釣竿がゲーム空間内の初期位置に配置される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されているオブジェクト空間座標データ６７２の内容を、予め定められた上記初期位置を表す座標に更新する。これによって、コントローラ７が操作可能範囲から外れた場合、釣竿が初期位置に戻ることとなる。続くステップＳ１８においては、ステップＳ１７で算出された位置に釣竿が配置されたゲーム空間の画像が生成される。ステップＳ１８の次に、ステップＳ１９の処理が実行される。
【０１３０】
ステップＳ２０においては、ステップＳ１１，Ｓ１５またはＳ１９で生成されたゲーム画像がモニタ２の画面に表示される。続くステップＳ２０において、ＣＰＵ１０はゲームを終了するか否かを判定する。ステップＳ２０の判定は、例えば、プレイヤがゲームをクリアしたか（魚を全て釣り上げたか）否かや、ゲームに制限時間が設けられている場合には当該制限時間が経過したか否かによって行われる。ステップＳ２０の判定において、ゲームを終了しないと判定される場合、ステップＳ３の処理が再度実行され、以降、ゲームを終了すると判定されるまでステップＳ３〜Ｓ２０の処理ループが実行される。一方、ゲームを終了しないと判定される場合、ＣＰＵ１０は図１７に示すゲーム処理を終了する。
【０１３１】
なお、上記ステップＳ３において取得されたマーカ座標データにより示されるマーカ座標が１つである場合、ステップＳ５においては、第１中点座標を算出することができない。そのため、この場合、前回のフレームで算出された方向ベクトルデータ６３２を用いてもう１つのマーカ座標を推定する。具体的には、検出されたマーカ座標が（１０００，５００）であり、前回のフレームで算出された方向ベクトルが（１００，０）であった場合、もう一つのマーカ座標は（１１００，５００）と推定することができる。これによって、検出されなかったもう１つのマーカ座標をある程度正確に算出することができるので、撮像情報演算部３５によってマーカが１つしか検出されない場合でも第１中点座標を算出することができる。ただし、前回のフレームでマーカ座標が１つも検出されていない場合において、今回のフレームでマーカ座標が１つのみ検出された場合には、マーカ座標の推定は行わない。推定を正確に行うことができないからである。
【０１３２】
なお、上記実施形態においては、コントローラ７の撮像情報演算部３５が少なくとも１つのマーカを検出することができれば、撮像画像内における撮像対象の位置を示す座標（上記実施形態の第２中点座標）が算出可能であると判断した。ここで、他の実施形態においては、２つのマーカを検出することができた場合にのみ、撮像対象の位置を示す座標を算出可能と判断してもよい。すなわち、上記ステップＳ４の判定において、２つのマーカ座標を検出することができた場合にのみステップＳ５の処理を実行するようにしてもよい。
【０１３３】
また、上記実施形態においては、コントローラ７の撮像情報演算部３５がマーカを検出できなくなると、釣竿は初期位置に戻るように制御された。ここで、他の実施形態においては、マーカを検出できなくなってからすぐに釣竿を初期位置に戻すのではなく、マーカを検出できなくなった状態が所定期間連続した場合に釣竿を初期位置に戻すようにしてもよい。例えば上記釣りゲームでは、釣竿を釣り上げるアクションを行う際、プレイヤは、指示位置が上方に移動するように急激にコントローラ７を動かすと考えられ、このとき、コントローラ７が操作可能範囲から外れてしまうおそれがある。このような場合に、コントローラ７が操作可能範囲から外れてからすぐに釣竿を初期位置に戻すようにすると、釣り上げのアクションを行わせる操作が難しくなり、プレイヤにとって操作性が悪くなってしまう。そのため、釣り上げアクションの操作のためにコントローラ７が操作可能範囲から少しの間外れてしまっても、釣竿の位置を維持することによって操作性を向上することができる。
【０１３４】
また、上記実施形態においては、操作対象の操作を行う前の時点で、操作対象自体である釣竿の画像を画面の中央付近に表示した。そして、釣竿の画像とカーソルとの位置を合わせる操作をプレイヤに行わせることによって、プレイヤに指示位置を確認させた。ここで、他の実施形態においては、プレイヤに指示位置を確認させるためにカーソルとの位置合わせを行う対象となる画像は、操作対象自体の画像に限らず、他の画像であってもよい。例えば、画面の中央付近に目印となるマーク画像を表示して、マーク画像とカーソルとの位置合わせをプレイヤに行わせるようにしてもよい。また、マーク画像の表示位置は、画面中央付近に限らず、画面上のどこに表示されてもよい。また、ゲーム装置は、カーソルの位置がマーク画像の少なくとも一部を含む所定範囲内に達したとき、マーク画像を消去するようにしてもよい。これによって、オブジェクト（釣竿）の操作が開始された後は、マーク画像が画面に表示されなくなるので、必要のなくなったマーク画像を消去することによって画面が見やすくなる。
【０１３５】
また、カーソルとの位置合わせのためにマーク画像を表示する場合には、操作開始前に釣竿を画面中央付近に表示する必要がない。したがって、この場合には、釣竿の操作中にコントローラ７が操作可能範囲から外れてしまった場合でも、釣竿を画面中央に戻す必要がない。例えば、ゲーム装置３は、コントローラ７が操作可能範囲から外れる直前の位置に釣竿を配置されたままにしてもよい。さらにこのとき、操作不可能な状態であることをプレイヤにわかりやすくするため、釣竿の画像を変化させる（例えば、釣竿の色や形状を変化させる）ようにしてもよい。
【０１３６】
また、上記実施形態においては、コントローラ７の動きに応じて得られるＸＹＺの３成分をゲーム空間におけるオブジェクトの座標に直接与えることにより当該オブジェクトを動かしたが、例えば、図２６及び図３１で説明したベクトルＶ２’やベクトルＶ２”を、いわゆるアナログスティックの方向入力の代わりに利用してもよい。まず、従来、アナログスティックの入力はスティックの傾き方向と傾き量とがゲームプログラムに渡される。ゲームプログラムでは、ゲーム空間におけるキャラクタの現在の位置や向きに基づいて、受け取った傾き方向と傾き量に基づいた新たな移動距離と移動方向が算出され、その方向にキャラクタが移動される。ここで、本発明では、アナログスティックの傾き方向と量の変わりに、図３１のベクトルＶ２”を利用する。これによって、現在のキャラクタの位置を基準に、ベクトルＶ２”に基づいた移動方向と移動量が計算され、その方向に当該キャラクタを移動させる。したがって、コントローラ７が操作可能範囲にあるときは、コントローラ７を左右上下に動かせばそれに応じたベクトルによってキャラクタがゲーム空間内を移動する。しかし、この場合、コントローラ７の動きをアナログスティックの入力として利用しているため、コントローラ７に基づく指示位置とキャラクタの表示位置とは一致しない。これによって、上述の実施例と同様の問題が生ずる。このような場合でも、本発明を適用することができる。
【０１３７】
具体的には、ゲーム装置３は、画面のほぼ中央に位置合わせ対象となる位置合せ画像を表示させる。そして、上述の実施例と同様に、コントローラ７の指示位置にカーソルを表示させる。このときの位置合せ画像は、プレイヤキャラクタ自身の画像であってもよいし、別の画像であってもよい。そして、プレイヤの操作によってカーソルと当該位置合せ画像とが重なった又は近傍にきたとき、コントローラ７を用いたプレイヤキャラクタの操作を可能とする。これによって、プレイヤは、プレイヤキャラクタの操作を開始する時点の指示位置を認識することができる。
【産業上の利用可能性】
【０１３８】
本発明は、光学式ポインティングデバイスを用いたオブジェクト操作の操作性を向上すること等を目的として、ゲームシステム等において利用することが可能である。
【図面の簡単な説明】
【０１３９】
【図１】本発明の一実施形態に係る情報処理システムの一例であるゲームシステム１の外観図
【図２】ゲーム装置３の機能ブロック図
【図３】コントローラ７の斜視図
【図４】コントローラ７を前方から見た図
【図５】コントローラ７の内部構造を示す図
【図６】コントローラ７の構成を示すブロック図
【図７】コントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図８】マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図
【図９】対象画像を含む撮像画像の一例を示す図
【図１０】コントローラ７の位置および／または向きを変化させた場合における撮像画像の変化を示す図
【図１１】本実施形態におけるゲーム画面の一例を示す図
【図１２】カーソル５５が釣竿５４に重なった場合のゲーム画面を示す図
【図１３】釣竿５４の操作が可能となった状態のゲーム画面を示す図
【図１４】釣竿５４を移動させたときのゲーム画面を示す図
【図１５】ゲーム空間を示す図
【図１６】ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図
【図１７】ゲーム装置３において実行されるゲーム処理の流れを示すフローチャート
【図１８】図１７に示すステップＳ２の処理の詳細を示すフローチャート
【図１９】トリガー入力が行われた時点で取得されたマーカ座標の２次元座標系を示す図
【図２０】撮像画像上の２次元領域を演算座標系で表す図
【図２１】図１７に示すステップＳ５の処理の詳細を示すフローチャート
【図２２】ステップＳ３で取得されたマーカ座標の座標系（検出座標系）を示す図
【図２３】図２１のステップＳ４５の処理を説明するための図
【図２４】図２１のステップＳ４６の処理を説明するための図
【図２５】図２１のステップＳ４７の処理を説明するための図
【図２６】図２１のステップＳ４７の処理を説明するための図
【図２７】操作可能範囲と差分ベクトルの値との関係を示す図
【図２８】図１７に示すステップＳ６の処理の詳細を示すフローチャート
【図２９】図１７に示すステップＳ６の処理を説明するための図
【図３０】図１７に示すステップＳ８の処理の詳細を示すフローチャート
【図３１】図１７に示すステップＳ８の処理を説明するための図
【図３２】図１７に示すステップＳ１４の処理の詳細を示すフローチャート
【符号の説明】
【０１４０】
１  ゲームシステム
２  モニタ
３  ゲーム装置
４  光ディスク
５  外部メモリカード
７  コントローラ
８ａ，８ｂ  マーカ
１０  ＣＰＵ
１３  メインメモリ
３２  操作部
３５  撮像情報演算部
３６  通信部
３７  加速度センサ
４０  撮像素子
５４  釣竿
５５  カーソル
【図１】
0004773170.tif 000002
【図２】
0004773170.tif 000003
【図３】
0004773170.tif 000004
【図４】
0004773170.tif 000005
【図５】
0004773170.tif 000006
【図６】
0004773170.tif 000007
【図７】
0004773170.tif 000008
【図８】
0004773170.tif 000009
【図９】
0004773170.tif 000010
【図１０】
0004773170.tif 000011
【図１１】
0004773170.tif 000012
【図１２】
0004773170.tif 000013
【図１３】
0004773170.tif 000014
【図１４】
0004773170.tif 000015
【図１５】
0004773170.tif 000016
【図１６】
0004773170.tif 000017
【図１７】
0004773170.tif 000018
【図１８】
0004773170.tif 000019
【図１９】
0004773170.tif 000020
【図２０】
0004773170.tif 000021
【図２１】
0004773170.tif 000022
【図２２】
0004773170.tif 000023
【図２３】
0004773170.tif 000024
【図２４】
0004773170.tif 000025
【図２５】
0004773170.tif 000026
【図２６】
0004773170.tif 000027
【図２７】
0004773170.tif 000028
【図２８】
0004773170.tif 000029
【図２９】
0004773170.tif 000030
【図３０】
0004773170.tif 000031
【図３１】
0004773170.tif 000032
【図３２】
0004773170.tif 000033