(57)【特許請求の範囲】
【請求項１】
仮想カメラで撮影した３次元ゲーム空間の様子を示す２次元ゲーム画像を生成して表示装置に表示するゲーム装置のコンピュータに実行させるゲームプログラムであって、
前記コンピュータを、
前記３次元ゲーム空間内における前記仮想カメラの注視点に対応する前記２次元ゲーム画像上の画素である注視点画素から当該２次元ゲーム画像上における所定の画素である目標画素までの直線距離における画素数を算出して前記コンピュータが備える所定の記憶部に記憶する画素数算出手段と、
前記画素数算出手段が算出した画素数を前記所定の記憶部から読み出し、当該読み出した画素数に基づいて前記仮想カメラの移動速度を設定する移動速度設定手段と、
前記３次元ゲーム空間内において、前記移動速度設定手段が設定した移動速度に従って、前記仮想カメラを前記目標画素が新たな注視点画素となるような所定の位置まで移動させるカメラ移動制御手段として機能させる、ゲームプログラム。
【請求項２】
前記ゲームプログラムは、前記コンピュータを、
前記２次元ゲーム画像に表示されるオブジェクトの前記３次元ゲーム空間内における奥行き方向の距離を示す奥行き値を当該２次元ゲーム画像の画素毎に対応づけて前記所定の記憶部に記憶させる奥行き値記憶手段と、
前記３次元ゲーム空間内における前記仮想カメラの注視点に対応する奥行き値を算出する注視点奥行値算出手段と、
前記注視点奥行値算出手段が算出した奥行き値と前記２次元ゲーム画像に対応する奥行き値とを比較し、当該比較した結果に基づいて前記目標画素の位置を検出する目標画素検出手段として更に機能させる、請求項１に記載のゲームプログラム。
【請求項３】
前記ゲームプログラムは、前記コンピュータを、
前記３次元ゲーム空間内において、前記仮想カメラの視点と当該仮想カメラの注視点とを結ぶ直線上に障害物が存在するか否かを判定する障害物存在判定手段として更に機能させ、
前記障害物存在判定手段が前記障害物が存在すると判定したときに、前記画素数算出手段は、前記注視点画素から前記目標画素までの直線距離における画素数を算出する、請求項２に記載のゲームプログラム。
【請求項４】
前記カメラ移動制御手段は、前記３次元ゲーム空間内において、前記仮想カメラの視点と前記注視点とを結ぶ直線上に障害物が存在しなくなる位置に当該仮想カメラを移動させる、請求項３に記載のゲームプログラム。
【請求項５】
前記画素数算出手段は、前記２次元ゲーム画像において、前記注視点画素から真上方向へ延びる直線上の前記目標画素までの画素数を算出し、
前記カメラ移動制御手段は、前記仮想カメラの視点と注視点とを結ぶ直線上に障害物が存在しなくなる位置まで当該仮想カメラを上方向に移動させる、請求項４に記載のゲームプログラム。
【請求項６】
前記注視点は、プレイヤの操作対象となるプレイヤオブジェクトに含まれる所定の点である、請求項３に記載のゲームプログラム。
【請求項７】
前記ゲームプログラムは、前記コンピュータを、
前記２次元ゲーム画像の座標系における前記プレイヤオブジェクトの表示位置を射影変換によって算出する射影位置算出手段と、
前記表示位置の画素において、前記注視点奥行値算出手段で算出された奥行き値と当該表示位置の画素に対応する奥行き値との差分を算出する奥行き値差分算出手段として更に機能させ、
前記障害物存在判定手段は、前記奥行き値差分算出手段で算出した差分が所定値以上のときに前記障害物が存在すると判定する、請求項６に記載のゲームプログラム。
【請求項８】
前記ゲームプログラムは、前記コンピュータを、前記３次元ゲーム空間における前記仮想カメラの視点から前記プレイヤオブジェクトに含まれる所定の点までの距離と前記仮想カメラの視点から前記プレイヤオブジェクトに含まれる所定の点の方向の前記障害物までの距離との差分を算出する距離差分算出手段として更に機能させ、
前記障害物存在判定手段は、前記距離差分算出手段で算出した差分が所定値以上のときに前記障害物が存在すると判定する、請求項６に記載のゲームプログラム。
【請求項９】
前記目標画素検出手段は、前記注視点奥行値算出手段が算出した奥行き値より前記２次元ゲーム画像に対応する奥行き値の方が奥にある画素の位置を検出する、請求項２に記載のゲームプログラム。
【請求項１０】
前記移動速度設定手段は、前記画素数算出手段が算出した画素数が大きくなるに連れて、前記移動速度を速い速度に設定する、請求項１に記載のゲームプログラム。
【請求項１１】
前記移動速度設定手段は、前記画素数算出手段が算出した画素数に基づいて前記仮想カメラの移動加速度を算出する加速度算出手段を含み、
前記移動加速度に基づいて前記移動速度を算出して設定する、請求項１０に記載のゲームプログラム。
【請求項１２】
前記ゲームプログラムは、前記コンピュータを、
前記カメラ移動制御手段が前記移動加速度に基づく移動速度に従って前記仮想カメラを移動し、当該仮想カメラが停止した後、前記注視点画素から前記２次元ゲーム画像上における所定の画素である戻し画素までの直線距離における画素数を算出する戻し画素数算出手段と、
前記戻し画素数算出手段が算出した画素数が所定値以上であるときは、前記カメラ移動制御手段が移動させた仮想カメラの移動方向とは逆の方向に向けて、所定の移動速度で当該仮想カメラを移動させるカメラ戻し制御手段として更に機能させる、請求項１１に記載のゲームプログラム。
【請求項１３】
前記カメラ戻し制御手段は、前記戻し画素数算出手段が算出した画素数が大きいほど、前記仮想カメラを速い移動速度で移動させる、請求項１２に記載のゲームプログラム。
【請求項１４】
前記カメラ戻し制御手段は、前記戻し画素数算出手段が算出した画素数に基づいた前記仮想カメラの移動加速度を算出する戻し加速度算出手段を含み、
前記移動加速度に基づいた前記移動速度で移動させる、請求項１３に記載のゲームプログラム。
【請求項１５】
仮想カメラで撮影した３次元ゲーム空間の様子を示す２次元ゲーム画像を生成して表示装置に表示するゲーム装置であって、
前記３次元ゲーム空間内における前記仮想カメラの注視点に対応する前記２次元ゲーム画像上の画素である注視点画素から当該２次元ゲーム画像上における所定の画素である目標画素までの直線距離における画素数を算出する画素数算出手段と、
前記画素数算出手段が算出した画素数に基づいて前記仮想カメラの移動速度を設定する移動速度設定手段と、
前記３次元ゲーム空間内において、前記移動速度設定手段が設定した移動速度に従って、前記仮想カメラを前記目標画素が新たな注視点画素となるような所定の位置まで移動させるカメラ移動制御手段とを備える、ゲーム装置。
【請求項１６】
仮想カメラで撮影した３次元ゲーム空間の様子を示す２次元ゲーム画像を生成して表示装置に表示するゲームシステムであって、
前記３次元ゲーム空間内における前記仮想カメラの注視点に対応する前記２次元ゲーム画像上の画素である注視点画素から当該２次元ゲーム画像上における所定の画素である目標画素までの直線距離における画素数を算出する画素数算出手段と、
前記画素数算出手段が算出した画素数に基づいて前記仮想カメラの移動速度を設定する移動速度設定手段と、
前記３次元ゲーム空間内において、前記移動速度設定手段が設定した移動速度に従って、前記仮想カメラを前記目標画素が新たな注視点画素となるような所定の位置まで移動させるカメラ移動制御手段とを備える、ゲームシステム。
【請求項１７】
仮想カメラで撮影した３次元ゲーム空間の様子を示す２次元ゲーム画像を生成して表示装置に表示するゲーム処理制御方法であって、
前記３次元ゲーム空間内における前記仮想カメラの注視点に対応する前記２次元ゲーム画像上の画素である注視点画素から当該２次元ゲーム画像上における所定の画素である目標画素までの直線距離における画素数を算出する画素数算出ステップと、
前記画素数算出ステップで算出した画素数に基づいて前記仮想カメラの移動速度を設定する移動速度設定ステップと、
前記３次元ゲーム空間内において、前記移動速度設定ステップで設定した移動速度に従って、前記仮想カメラを前記目標画素が新たな注視点画素となるような所定の位置まで移動させるカメラ移動制御ステップとを備える、ゲーム処理制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想カメラで撮影した３次元ゲーム空間の様子を示す２次元ゲーム画像を生成して表示装置に表示するゲームプログラムに関し、より特定的には、３次元ゲーム空間における仮想カメラの移動に関する。
【背景技術】
【０００２】
近年、ゲームシステムに含まれるコンピュータの高性能化に伴い、３次元コンピュータグラフィックス技術を利用した３次元ゲームが増えている。３次元ゲームでは、プレイヤオブジェクトや地形オブジェクト等のポリゴンによって構成されるオブジェクトを３次元のゲーム空間に配置し、所定の視点によってそのゲーム空間内の様子を３次元ゲーム画面として表示している。
【０００３】
このような３次元ゲーム画面を表示するゲーム装置のひとつに、プレイヤキャラクタの移動に仮想カメラを追従させるゲーム装置が知られている（例えば、特許文献１）。より具体的には、上記のゲームでは、プレイヤキャラクタのキャラクタ位置を目標位置とし、この目標位置に仮想カメラの注視点の位置（注視位置）が所定の割合で近づくように、目標位置までの距離に応じた速度で仮想カメラを移動させている。
【特許文献１】特開２００４−３２９４６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述したような上記特許文献１に開示されたゲーム装置においては、以下に示す問題点があった。すなわち、上記目標位置までの距離に応じた移動速度を算出するために、３次元のゲーム空間を前提とした複雑な計算処理（３次元計算処理）を行っている。そのため、ゲーム装置への処理負荷が高くなるという問題があった。
【０００５】
それ故に、本発明の目的は、仮想カメラの移動速度の算出にかかる処理負荷を軽減することが可能なゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係の一例を示したものであって、本発明を何ら限定するものではない。
【０００７】
第１の発明は、仮想カメラで撮影した３次元ゲーム空間の様子を示す２次元ゲーム画像を生成して表示装置に表示するゲーム装置のコンピュータに実行させるゲームプログラムであって、コンピュータを、画素数算出手段（Ｓ４１、Ｓ４５〜Ｓ４８）と、移動速度設定手段（Ｓ２８）と、カメラ移動制御手段（Ｓ３）として機能させる。画素数算出手段は、３次元ゲーム空間内における仮想カメラの注視点に対応する２次元ゲーム画像上の画素である注視点画素から当該２次元ゲーム画像上における所定の画素である目標画素までの直線距離における画素数を算出する。移動速度設定手段は、画素数算出手段が算出した画素数に基づいて仮想カメラの移動速度を設定する。カメラ移動制御手段は、３次元ゲーム空間内において、移動速度設定手段が設定した移動速度に従って仮想カメラを所定の位置まで移動させる。
【０００８】
第１の発明によれば、２次元ゲーム画像における画素数の算出という処理に基づいて、仮想カメラの移動速度を設定することができる。これにより、複雑な３次元空間での計算処理を用いることなく、仮想カメラの移動速度を決定することができ、コンピュータの処理負荷を軽減することができる。
【０００９】
第２の発明は、第１の発明において、ゲームプログラムは、コンピュータを、奥行き値記憶手段（Ｓ２１）と、注視点奥行値算出手段（Ｓ２４）と、目標画素検出手段（Ｓ２７，Ｓ２９）として更に機能させる。奥行き値記憶手段は、２次元ゲーム画像に表示されるオブジェクトの３次元ゲーム空間内における奥行き方向の距離を示す奥行き値を当該２次元ゲーム画像の画素毎に対応づけて所定の記憶部に記憶させる。注視点奥行値算出手段は、３次元ゲーム空間内における仮想カメラの注視点に対応する奥行き値を算出する。目標画素検出手段は、注視点奥行値算出手段が算出した奥行き値と２次元ゲーム画像に対応する奥行き値とを比較し、当該比較した結果に基づいて目標画素の位置を検出する。
【００１０】
第２の発明によれば、奥行き値を用いて目標画素の位置を検出できる。これにより、複雑な３次元計算処理を用いることなく目標画素が算出でき、処理負荷を軽減できる。
【００１１】
第３の発明は、第２の発明において、ゲームプログラムは、コンピュータを、障害物存在判定手段（Ｓ２１〜Ｓ２６）として更に機能させる。障害物存在判定手段は、３次元ゲーム空間内において、仮想カメラの視点と当該仮想カメラの注視点とを結ぶ直線上に障害物が存在するか否かを判定する。また、画素数算出手段は、障害物存在判定手段が障害物が存在すると判定したときに、注視点画素から目標画素までの直線距離における画素数を算出する。
【００１２】
第３の発明によれば、３次元ゲーム空間において、障害物に隠れて表示されないオブジェクトがあるときに、目標画素と注視点画素との間の画素数に応じて仮想カメラの移動速度を決定することができる。
【００１３】
第４の発明は、第３の発明において、カメラ移動制御手段は、３次元ゲーム空間内において、仮想カメラの視点と注視点とを結ぶ直線上に障害物が存在しなくなる位置まで当該仮想カメラを移動させる。
【００１４】
第４の発明によれば、３次元ゲーム空間内において、障害物に隠れて表示されないオブジェクト（注視点が設定されているオブジェクト）があるときに、目標画素と注視画素との間の画素数に応じた移動速度で仮想カメラを移動させ、当該オブジェクトが表示されるようにすることができる。
【００１５】
第５の発明は、第４の発明において、画素数算出手段は、２次元ゲーム画像において、注視点画素から真上方向へ延びる直線上の目標画素までの画素数を算出する。また、カメラ移動制御手段は、仮想カメラの視点と注視点とを結ぶ直線上に障害物が存在しなくなる位置まで当該仮想カメラを上方向に移動させる。
【００１６】
第５の発明によれば、仮想カメラを障害物の上方に回り込ませるように移動させることができ、プレイヤに違和感を感じさせないゲーム画面を提供することができる。
【００１７】
第６の発明は、第３の発明において、注視点は、プレイヤの操作対象となるプレイヤオブジェクトに含まれる所定の点である。
【００１８】
第６の発明によれば、プレイヤオブジェクトが障害物に隠されて見えない状態になることを防ぐことができる。
【００１９】
第７の発明は、第６の発明において、ゲームプログラムは、コンピュータを、射影位置算出手段（Ｓ２２）と、奥行き値差分算出手段（Ｓ２５）として更に機能させる。射影位置算出手段は、２次元ゲーム画像の座標系におけるプレイヤオブジェクトの表示位置を射影変換によって算出する。奥行き値差分算出手段は、射影位置の画素において、注視点奥行値算出手段で算出された奥行き値と当該射影位置の画素に対応する奥行き値との差分を算出する。また、障害物判定手段は、奥行き値差分算出手段で算出した差分が所定値以上のときに障害物が存在すると判定する。
【００２０】
第７の発明によれば、注視点が設定されたプレイヤオブジェクトと仮想カメラとの間の障害物の有無を、奥行き値を用いることで判定でき、コンピュータの処理負荷を軽減することができる。
【００２１】
第８の発明は、第６の発明において、ゲームプログラムは、コンピュータを、３次元ゲーム空間における仮想カメラの視点からプレイヤオブジェクトに含まれる所定の点までの距離と仮想カメラの視点からプレイヤオブジェクトに含まれる所定の点の方向の障害物までの距離との差分を算出する距離差分算出手段（Ｓ２５）として更に機能させる。また、障害物判定手段は、距離差分算出手段で算出した差分が所定値以上のときに障害物が存在すると判定する。
【００２２】
第８の発明によれば、注視点が設定されたプレイヤオブジェクトと仮想カメラとの間の障害物の有無については、３次元ゲーム空間内における距離の差で判定している。そのため、より精度の高い判定が可能となる。
【００２３】
第９の発明は、第２の発明において、目標画素検出手段は、注視点奥行値算出手段が算出した奥行き値より２次元ゲーム画像に対応する奥行き値の方が奥にある画素の位置を検出する。
【００２４】
第９の発明によれば、奥行き値を用いて目標画素の位置を検出できる。これにより、複雑な３次元計算処理を用いることなく目標画素が算出でき、処理負荷を軽減できる。
【００２５】
第１０の発明は、第１の発明において、移動速度設定手段は、画素数算出手段が算出した画素数が大きくなるに連れて、移動速度を速い速度に設定する。
【００２６】
第１０の発明によれば、仮想カメラの移動距離が長い場合は速度を高め、移動距離が短い場合は移動速度を低下させることができる。これにより、仮想カメラの移動距離の大小に関わらず、同じような時間で仮想カメラの移動を完了させることができる。
【００２７】
第１１の発明は、第１０の発明において、移動速度設定手段は、画素数算出手段が算出した画素数に基づいて仮想カメラの移動加速度を算出する加速度算出手段を含む。そして、移動速度設定手段は、加速度に基づいて移動速度を算出して設定する。
【００２８】
第１１の発明によれば、算出された画素数に基づいて仮想カメラの加速度を算出し、当該加速度に基づいて仮想カメラを移動させる。これにより、仮想カメラの移動によるゲーム画像の変化について、プレイヤに違和感を感じさせないような動きを実現することができる。
【００２９】
第１２の発明は、第１１の発明において、ゲームプログラムは、コンピュータを、戻し画素数算出手段（Ｓ８１、Ｓ８６〜Ｓ８９）と、カメラ戻し制御手段（Ｓ２８）として更に機能させる。戻し画素数算出手段は、カメラ移動制御手段が加速度に基づく移動速度に従って仮想カメラを移動し、当該仮想カメラが停止した後、注視点画素から２次元ゲーム画像上における所定の画素である戻し画素までの直線距離における画素数を算出する。カメラ戻し制御手段は、戻し画素数算出手段が算出した画素数が所定値以上であるときは、カメラ移動制御手段が移動させた仮想カメラの移動方向とは逆の方向に向けて、所定の移動速度で当該仮想カメラを移動させる。
【００３０】
第１２の発明によれば、加速度を用いて仮想カメラを移動させたとき、移動後の仮想カメラの位置を調整することができる。これにより、プレイヤにとって見やすいゲーム画像を提供することができる。
【００３１】
第１３の発明は、第１２の発明において、カメラ戻し制御手段は、戻し画素数算出手段が算出した画素数が大きいほど、仮想カメラを速い移動速度で移動させる。
【００３２】
第１３の発明によれば、仮想カメラの移動距離が長い場合は速度を高め、移動距離が短い場合は移動速度を低下させることができる。これにより、仮想カメラの移動距離の大小に関わらず、同じような時間で仮想カメラの移動を完了させることができる。
【００３３】
第１４の発明は、第１３の発明において、カメラ戻し制御手段は、戻し画素数算出手段が算出した画素数に基づいた仮想カメラの移動加速度を算出する戻し加速度算出手段を含む。そして、カメラ戻し制御手段は、加速度に基づいた移動速度で移動させる。
【００３４】
第１４の発明によれば、仮想カメラの移動によるゲーム画像の変化について、プレイヤに違和感を感じさせないような動きを実現することができる。
【００３５】
第１５の発明は、仮想カメラで撮影した３次元ゲーム空間の様子を示す２次元ゲーム画像を生成して表示装置に表示するゲーム装置であって、画素数算出手段と、移動速度設定手段と、カメラ移動制御手段とを備える。画素数算出手段は、３次元ゲーム空間内における仮想カメラの注視点に対応する２次元ゲーム画像上の画素である注視点画素から当該２次元ゲーム画像上における所定の画素である目標画素までの直線距離における画素数を算出する。移動速度設定手段は、画素数算出手段が算出した画素数に基づいて仮想カメラの移動速度を設定する。カメラ移動制御手段は、３次元ゲーム空間内において、移動速度設定手段が設定した移動速度に従って仮想カメラを所定の位置まで移動させる。
【００３６】
第１５の発明によれば、第１の発明と同様の効果を得ることができる。
【発明の効果】
【００３７】
本発明によれば、仮想カメラの移動速度を決める処理について、２次元画像での計算処理で済ませることができ、ＣＰＵ等の処理負荷を軽減することが可能となる。これにより、処理速度の遅いＣＰＵ等を用いたゲーム装置であっても、プレイヤにとって見やすく、かつ、操作しやすくなる３次元ゲームを提供することができる。
【発明を実施するための最良の形態】
【００３８】
以下、本発明の実施の形態について、図面を参照して説明する。尚、この実施例により本発明が限定されるものではない。
【００３９】
（ゲームシステムの全体構成）
図１を参照して、本発明の実施形態に係るゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置本体３、光ディスク４、コントローラ７、およびマーカ部８を含む。本システムは、コントローラ７を用いたゲーム操作に基づいてゲーム装置本体３でゲーム処理を実行するものである。
【００４０】
ゲーム装置本体３には、当該ゲーム装置本体３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置本体３において実行されるためのゲームプログラムが記憶されている。ゲーム装置本体３の前面には光ディスク４の挿入口が設けられている。ゲーム装置本体３は、挿入口に挿入された光ディスク４に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００４１】
ゲーム装置本体３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２には、ゲーム装置本体３において実行されるゲーム処理の結果得られるゲーム画像が表示される。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部８が設置される。マーカ部８は、その両端に２つのマーカ８Ｒおよび８Ｌを備えている。マーカ８Ｒ（マーカ８Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部８はゲーム装置本体３に接続されており、ゲーム装置本体３はマーカ部８が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００４２】
コントローラ７は、当該コントローラ７自身に対して行われた操作の内容を示す操作データをゲーム装置本体３に与える入力装置である。コントローラ７とゲーム装置本体３とは無線通信によって接続される。本実施形態では、コントローラ７とゲーム装置本体３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ７とゲーム装置本体３とは有線で接続されてもよい。
【００４３】
（ゲーム装置本体３の内部構成）
次に、図２を参照して、ゲーム装置本体３の内部構成について説明する。図２は、ゲーム装置本体３の構成を示すブロック図である。ゲーム装置本体３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００４４】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩの内部構成について後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置本体３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００４５】
また、システムＬＳＩ１１には、入出力プロセッサ１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００４６】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。より具体的には、ＧＰＵ１１ｂは、当該グラフィクスコマンドに従って３Ｄグラフィックスの表示に必要な計算処理、例えば、レンダリングの前処理にあたる３Ｄ座標から２Ｄ座標への座標変換などの処理や、テクスチャの張り込みなどの最終的なレンダリング処理を行うことで、ゲーム画像データを生成する。ここで、ＣＰＵ１０は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをＧＰＵ１１ｂに与える。
【００４７】
ＶＲＡＭ１１ｄは、フレームバッファ１１ｆとＺバッファ１１ｇを含み、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００４８】
フレームバッファ１１ｆは、例えば、テレビ２の１フレーム分の画像データを描画（蓄積）しておくためのメモリであり、ＧＰＵ１１ｂによって１フレーム毎に書き換えられる。後述のＡＶ−ＩＣ１５がフレームバッファ１１ｆのデータを読み出すことによって、テレビ２の画面上に３Ｄゲーム画像が表示される。
【００４９】
また、Ｚバッファ１１ｇは、フレームバッファ１１ｆに対応する画素（記憶位置またはアドレス）数×１画素当たりの奥行データのビット数に相当する記憶容量を有し、フレームバッファ１１ｆの各記憶位置に対応するドットの奥行情報または奥行データ（Ｚ値）を記憶するものである。
【００５０】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。また、内部メインメモリ１１ｅは、外部メインメモリ１２と同様に、プログラムや各種データを記憶したり、ＣＰＵ１０のワーク領域やバッファ領域としても用いられる。
【００５１】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００５２】
入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、および外部メモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００５３】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置本体３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５４】
また、入出力プロセッサ１１ａは、コントローラ７から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００５５】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０および外部メモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０や外部メモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００５６】
ゲーム装置本体３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンにされると、ゲーム装置本体３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。また、一旦電源がオンにされた状態で、再度電源ボタン２４を押すと、低電力スタンバイモードへの移行が行われる。この状態でも、ゲーム装置本体３への通電は行われているため、インターネット等のネットワークに常時接続しておくことができる。なお、一旦電源がオンにされた状態で、電源をオフにしたいときは、電源ボタン２４を所定時間以上長押しすることで、電源をオフとすることが可能である。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置本体３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００５７】
次に、図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００５８】
図３および図４において、コントローラ７は、ハウジング７１と、当該ハウジング７１の表面に設けられた複数個の操作ボタンで構成される操作部７２とを備える。本実施例のハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさであり、例えばプラスチック成型によって形成されている。
【００５９】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００６０】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。
【００６１】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置本体３が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６２】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置本体３本体の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６３】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置本体３へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００６４】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５のスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００６５】
一方、ハウジング７１下面には、凹部が形成されている。後述で明らかとなるが、ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ８Ｌおよび８Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００６６】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００６７】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するｘｙｚ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をｚ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をｚ軸正方向とする。また、コントローラ７の上下方向をｙ軸とし、ハウジング７１の上面（操作ボタン７２ａ等が設けられた面）方向をｙ軸正方向とする。さらに、コントローラ７の左右方向をｘ軸とし、ハウジング７１の左側面（図３では表されずに図４で表されている側面）方向をｘ軸正方向とする。
【００６８】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上ハウジング（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下ハウジング（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００６９】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。マイコン７５１は本願発明のボタンデータ発生手段の一例として、操作ボタン７２ａ等の種類に応じた操作ボタンデータを発生させるように機能する。この仕組みは公知技術であるが、例えばキートップ下側に配置されたタクトスイッチなどのスイッチ機構による配線の接触／切断をマイコン７５１が検出することによって実現されている。より具体的には、操作ボタンが例えば押されると配線が接触して通電するので、この通電がどの操作ボタンにつながっている配線で発生したかをマイコン７５１が検出し、操作ボタンの種類に応じた信号を発生させている。
【００７０】
また、コントローラ７は、図示しない無線モジュール７５３（図７参照）およびアンテナ７５４によって、ワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の回転を良好な感度でゲーム装置本体３等が判定することができる。
【００７１】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置本体３から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００７２】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置本体３から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００７３】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００７４】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００７５】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。後述により明らかとなるが、この撮像情報演算部７４から出力される処理結果データに基づいて、コントローラ７の位置や動きに応じた信号を得ることができる。
【００７６】
コントローラ７は、３軸（ｘ、ｙ、ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、上下および左右方向（または他の対になった方向）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。例えば、この３軸または２軸の加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であってもよい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸または２軸の加速度センサ７０１が提供されてもよい。
【００７７】
当業者には公知であるように、加速度センサ７０１に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、その２軸または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００７８】
しかしながら、加速度センサ７０１から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ（例えばＣＰＵ１０）またはコントローラのプロセッサ（例えばマイコン７５１）などのコンピュータが処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサを搭載するコントローラが静的な状態であることを前提としてコンピュータ側で処理する場合（すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合）、コントローラが現実に静的な状態であれば、検出された加速度に基づいてコントローラの姿勢が重力方向に対して傾いているか否か又はどの程度傾いているかを知ることができる。具体的には、加速度センサの検出軸が鉛直下方向を向いている状態を基準としたとき、１Ｇ（重力加速度）がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサの場合には、さらに各軸の加速度の信号に対して処理を施すことによって、各軸が重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ７０１からの出力に基づいて、プロセッサがコントローラ７の傾き角度のデータを算出する処理をおこなってもよいが、当該傾き角度のデータを算出する処理をおこなうことなく、加速度センサ７０１からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ７０１をプロセッサと組み合わせて用いることによって、コントローラ７の傾き、姿勢または位置を判定することができる。一方、加速度センサが動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ７０１を備えるコントローラ７がユーザの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７のさまざまな動きおよび／または位置を算出することができる。なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向対する傾きを知ることが可能である。他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００７９】
他の実施形態の例では、コントローラ７の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるＭＥＭＳジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ７０１と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転（または角速度）を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
【００８０】
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、２つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロセンサとの基本的な差異と同様にジャイロセンサの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
【００８１】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置本体３からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置本体３から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置本体３から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００８２】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの加速度信号（ｘ、ｙ、およびｚ軸方向加速度データ；以下、単に加速度データと記載する）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、加速度データ、処理結果データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（Ｂｌｕｅｔｏｏｔｈ；登録商標）で構成される通信部７５の送信間隔は例えば５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その電波信号をアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からの加速度データ、および撮像情報演算部７４からの処理結果データが無線モジュール７５３で電波信号に変調されてコントローラ７から送信される。そして、ゲーム装置本体３の無線コントローラモジュール１９でその電波信号を受信し、ゲーム装置本体３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、加速度データ、および処理結果データ）を取得する。そして、ゲーム装置本体３のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００８３】
次に、上記のように構成されたゲーム装置本体３の動作について、以下説明する。図８は、本実施形態が想定するゲームの画面の一例である。図８に示すゲーム画面では、斜め上から見下ろした視点で３次元仮想ゲーム空間（以下、単に仮想空間と呼ぶ）が表示されている。そして、ゲーム画面の略中央には、プレイヤオブジェクト１０１が表示されている。また、プレイヤオブジェクト１０１の右側には、地形オブジェクト１０２（仮想空間内では岩山として扱われる。以下、単に岩山と呼ぶ）も表示されている。
【００８４】
ここで、本実施形態のゲーム画面の描画手法として、いわゆるＺバッファ法を用いている。すなわち、画面を構成する各画素（ピクセル）に色情報（ＲＧＢ値）の他に奥行きに関する情報（Ｚ値）を持たせ、画面に描画する際には同じ座標のピクセルの奥行き情報を比較して、最も手前にあるものだけを画面に書き込む手法である。より具体的には、画面の所定のピクセルに物体を描画する際に、当該物体の表面のＺ値をＺバッファ１１ｇに保存しておく。次に、同じピクセルに別の物体を描画することになった場合、上記保存したＺ値と今回描画する物体のＺ値の大きさを比較する。もし、今回のＺ値の方が大きければ、つまり奥にあれば、手前の描画済み物体に隠されて見えないので新たにピクセルへ描画処理を行わずに済ませる、という手法である。
【００８５】
本ゲームは、プレイヤの操作に応じてプレイヤオブジェクト１０１を移動させるゲームである。そして、本ゲームにおける仮想カメラは、基本的には、プレイヤオブジェクト１０１が略画面中央に表示されるように、プレイヤオブジェクト１０１の移動に併せて仮想カメラが追従移動するように構成されている。より具体的には、本ゲームでは、当該プレイヤオブジェクト１０１の中点を仮想カメラの注視点として設定している。なお、仮想カメラの注視点は、予め定めていれば当該プレイヤオブジェクト１０１のどの点でも構わない。
【００８６】
図９は、図８のようなゲーム画面における仮想カメラとプレイヤオブジェクト１０１の位置関係を模式的に示す図である。この状態の時は、仮想カメラ（視点）とプレイヤオブジェクト１０１（注視点）との間に障害物がなく、プレイヤオブジェクト１０１の姿は仮想カメラで捉えることができている。
【００８７】
図８の状態で、プレイヤオブジェクト１０１を矢印１０３に示すように右方向に移動させる操作を行うと、図１０に示すように、プレイヤオブジェクト１０１が岩山１０２のかげに隠れるような状態となる（なお、図１０では、説明をわかりやすくするため、岩山１０２を透かしてプレイヤオブジェクト１０１を表示している）。図１１は、図１０のようなゲーム画面における仮想カメラとプレイヤオブジェクト１０１の位置関係を模式的に示す図である。図１１に示すように、この状態では、仮想カメラとプレイヤオブジェクト１０１とを結ぶ直線上に岩山１０２が存在する状態となる。そのため、当該状態を表示した図１０のようなゲーム画面では、プレイヤオブジェクト１０１はプレイヤに見えない（ゲーム画面上に描画されない）状態となる。そこで、本ゲームでは、このようにプレイヤオブジェクト１０１が障害物（図１０では岩山１０２）に遮られて仮想カメラから見えなくなるような状態になると、仮想カメラを上方に移動する。その結果、図１２に示すように、仮想カメラが岩山１０２の上から回り込むように移動することによって、ゲーム画面にプレイヤオブジェクト１０１が描画される状態となる。図１３は、図１２のようなゲーム画面における仮想カメラとプレイヤオブジェクト１０１の位置関係を模式的に示す図である。図１３に示すように、プレイヤオブジェクト１０１が岩山１０２に隠れないような角度（仰角）になるよう仮想カメラを移動させている。すなわち、図１３では、仮想カメラの仰角がθ１からθ２になるように仮想カメラを上方に移動させている（θ１は、図８や図１０の状態における仮想カメラの仰角）。
【００８８】
上記のように、本ゲームでは、プレイヤオブジェクト１０１が地形オブジェクト等の障害物に隠れて見えなくなるときは、プレイヤオブジェクト１０１が見えるように仮想カメラを移動させている。このときの仮想カメラの移動速度について、本実施形態では、以下のような処理を行っている。
【００８９】
図１４は、本実施形態における仮想カメラの移動速度の決定処理の原理を説明するための図である。まず、仮想カメラから見てプレイヤオブジェクト１０１が岩山１０２に隠れた状態になると、スクリーン座標系において、プレイヤオブジェクト１０１の中点に対応するピクセル１５１（障害物がないと仮定したら、当該中点が描画されるピクセル）の座標を検出する（以下、当該座標をプレイヤ２Ｄ座標と呼ぶ）。なお、本実施形態におけるスクリーン座標系では、画面の左上座標を（１，１）、右下の座標を（６４０，４８０）であるものとする。すなわち、画面の右に向かう方向がＸ軸の正方向となり、画面の下に向かう方向がＹ軸の正方向となる。
【００９０】
そして、当該プレイヤ２Ｄ座標から、上方向（Ｙ軸の負方向）に向けて１ピクセルずつ、岩山１０２が描画されているか否かを調査していき、岩山１０２が描画されなくなるピクセル１５２が見つかるまでのピクセル数Ｐ１をカウントする。換言すると、当該ピクセル１５２は、岩山１０２の輪郭に相当するピクセル群のうちの一つである。そのため、当該プレイヤ２Ｄ座標から真上方向に向けて、当該輪郭に相当するピクセルが見つかるまでのピクセル数Ｐ１をカウントすることになる。そして、当該ピクセル数Ｐ１の値に応じて、仮想カメラの移動速度（回りこみの速度）を設定する。具体的には、ピクセル数の値が高くなるに連れて、仮想カメラの移動速度も上がるように設定する。例えば、図１５に示すように、スクリーン座標系において、プレイヤオブジェクト１０１が岩山１０２の描画されている領域の上半分内に位置するような場合（プレイヤオブジェクト１０１ａ）よりも、岩山１０２の描画されている領域の下半分内に位置するような場合（プレイヤオブジェクト１０１ｂ）のほうが、仮想カメラの上昇速度（移動速度）が速くなる。つまり、プレイヤオブジェクト１０１ａを基点としたピクセル数Ｐ１よりも、プレイヤオブジェクト１０１ｂを基点としたピクセル数Ｐ２のほうが多くなるため、仮想カメラの移動速度が速くなる。このような処理を行うことで、移動距離の大小にかかわらず、同じような時間で仮想カメラを目標地点まで移動させることが可能となる。
【００９１】
ここで、各ピクセルについて岩山１０２が描画されているか否かについては、上記Ｚバッファ１１ｇに格納されている、調査対象ピクセルのＺ値と上記のプレイヤ２Ｄ座標におけるＺ値とを比較することで行われる。本実施形態では、当該Ｚ値は、０．０〜１．０の範囲をとり、手前側（仮想カメラ側）を０．０、奥行き側を１．０とする。そのため、プレイヤ２Ｄ座標よりもＺバッファに格納されているＺ値の方が小さい値であれば、仮想カメラとプレイヤオブジェクト１０１との間に障害物（図１４の例では岩山１０２）が存在すると判定する。なお、当該判定処理の前提として、当該判定が行われる前に、プレイヤオブジェクト１０１を遮るような障害物（主に地形オブジェクト）の仮想空間への配置（つまり、地形オブジェクト等の障害物に関するＺバッファ１１ｇへの設定）は既に行われているものとする。
【００９２】
つまり、本実施形態では、プレイヤ２Ｄ座標を基点として上方向に１ピクセルずつ、各ピクセルのＺバッファの値を調べていく。そして、各ピクセルのＺバッファのＺ値がプレイヤ２Ｄ座標におけるＺ値よりも大きな値になるまで（つまり、プレイヤオブジェクトを遮るものがなくなるまで）のピクセル数をカウントする。そして、当該カウントしたピクセル数に応じて仮想カメラの回り込み速度を決定して移動させるという処理を行う。
【００９３】
このように、仮想カメラとプレイヤオブジェクト１０１との間の障害物の有無をＺ値の比較によって判定し、上述したようなピクセル数のカウントの結果に基づいて仮想カメラの移動速度を決定する。そのため、仮想カメラの移動速度を決める処理について、仮想空間内におけるプレイヤオブジェクト１０１と岩山１０２との距離を３次元計算を用いて算出し、その算出結果に基づいて仮想カメラの移動速度を決定するような処理に比べて簡易な処理（単にピクセル数をカウントするだけの処理）で済ませることができ、ＣＰＵ等の処理負荷を軽減することが可能となる。これにより、処理速度の遅いＣＰＵ等を用いたゲーム装置であっても、プレイヤにとって見やすく、かつ、操作しやすくなる３次元ゲームを提供することができる。
【００９４】
次に、ゲーム装置本体３によって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理の際に外部メインメモリ１２に記憶されるデータについて説明する。図１６は、図２に示した外部メインメモリ１２（ただし、内部メインメモリ１１ｅでもよいし、両方を使用するようにしてもよい）のメモリマップを示す図である。図１６において、外部メインメモリ１２は、プログラム記憶領域１２０、データ記憶領域１２６、作業領域１３０を含む。プログラム記憶領域１２０およびデータ記憶領域１２６のデータは、ディスク４に予め記憶されたものが、ゲーム処理に際して外部メインメモリ１２にコピーされたものである。
【００９５】
プログラム記憶領域１２０は、ＣＰＵ１０によって実行されるゲームプログラムを記憶し、このゲームプログラムは、メイン処理プログラム１２１と、目標角度算出プログラム１２２と、回り込み速度算出プログラム１２３と、戻し速度算出プログラム１２４と、目標角度設定プログラム１２５などによって構成される。
【００９６】
メイン処理プログラム１２１は、後述する図１７のフローチャートの処理に対応するプログラムである。目標角度算出プログラム１２２、回り込み速度算出プログラム１２３、戻し速度算出プログラム１２４、および目標角度設定プログラム１２５は、上述したような仮想カメラの回り込みの動作を制御する処理をＣＰＵ１０に実行させるためのプログラムである。
【００９７】
データ記憶領域１２６には、オブジェクトデータ１２７、障害物データ１２８、その他画像データ１２９などのデータが記憶される。
【００９８】
オブジェクトデータ１２７は、プレイヤオブジェクト１０１や敵オブジェクト等のノンプレイヤオブジェクトのデータである。各オブジェクトのモデリングデータや、テクスチャデータ（ＲＧＢ値）等が含まれる。
【００９９】
障害物データ１２８は、上述したような岩山１０２等の地形オブジェクトのデータである。仮想カメラから見たプレイヤオブジェクト１０１の姿がこれらのオブジェクトによって遮られるようなときに、上述したような仮想カメラの回り込み処理が発生することになる。
【０１００】
その他画像データ１２９は、ゲーム中に用いられる各種エフェクト（煙や光等）や背景画像のデータである。
【０１０１】
作業領域１３０には、ゲーム処理中に用いられる以下のような各種変数やフラグ等のデータが記憶される。
【０１０２】
カメラ加速度１３１は、仮想カメラの移動速度を決定する際に用いられるパラメータである。
【０１０３】
カメラ目標角度１３２は、仮想カメラの仰角を示すデータであり、仮想カメラの移動先を示すデータとなる。すなわち、カメラ目標角度１３２で示されている仰角となるように仮想カメラを移動する制御処理が行われる。
【０１０４】
プレイヤ２Ｄ座標１３３は、スクリーン座標系におけるプレイヤオブジェクト１０１の中点が描画される位置を示すデータである。
【０１０５】
プレイヤ３Ｄ距離１３４は、仮想空間における、仮想カメラからプレイヤオブジェクト１０１の中点までの奥行き方向の距離を示すデータである。
【０１０６】
最前物３Ｄ距離１３５は、Ｚバッファ１１ｇから取得されるＺ値に基づいて算出されるデータである。具体的には、所定のピクセルに描画されるオブジェクトのＺ値を仮想空間内の奥行き方向の距離（Ｚ座標）に変換したものである。つまり、所定のピクセルに描画されているオブジェクトが、仮想空間内においては仮想カメラからどの程度の距離に位置しているかを示すデータである。
【０１０７】
移動速度１３６は、上述したような、仮想カメラの回り込みを実行する際の仮想カメラの移動速度を示すデータである。
【０１０８】
仮想カメラの位置座標１３７は、仮想カメラの位置を示す３次元ゲーム空間内における座標である。
【０１０９】
中点座標１３８は、３次元ゲーム空間内におけるプレイヤオブジェクトの中点の位置を示す座標である。
【０１１０】
次に、図１７〜図２３を参照して、本実施形態で実行されるゲーム処理の詳細について説明する。ゲーム装置本体３の電源が投入されると、ゲーム装置本体３のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動プログラムを実行し、これによってメインメモリ３３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムが外部メインメモリ１２に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１７に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【０１１１】
まず、ステップＳ１において、以降の処理において用いられるデータの初期化処理が実行される。具体的には、ゲーム開始時における仮想カメラの初期位置および各種オブジェクトの初期配置を示すデータが外部メインメモリ１２に記憶される。また、予め定められている初期角度がカメラ目標角度１３２として設定され、外部メインメモリ１２に記憶される。その他、以降の処理で用いられる作業領域１３０の各種変数やフラグも初期化される。
【０１１２】
続いて、３次元仮想ゲーム空間が構築されてテレビ２に表示される。すなわち、ＣＰＵ１０は、３次元のゲーム空間を構築し、各種オブジェクトの初期配置を示すデータに従って各オブジェクトを配置する。以上のように構築されたゲーム空間を上記仮想カメラで撮影したゲーム画像が生成され、生成されたゲーム画像がテレビ２に表示される。以降、ステップＳ２〜Ｓ９の処理ループが１フレーム（本実施形態では１／６０秒）毎に繰り返されることによって、ゲームが進行していく。
【０１１３】
次に、ステップＳ２において、各種オブジェクトの移動処理が実行される。すなわち、ＣＰＵ１０は、プレイヤオブジェクト１０１以外のオブジェクト（敵オブジェクト等の、ノンプレイヤオブジェクト）を仮想空間内において適宜移動する。次に、プレイヤが行った操作内容を示す操作データをコントローラ７から取得する。そして、ＣＰＵ１０は、仮想空間内において、プレイヤオブジェクト１０１を当該操作データの内容に従って移動する。
【０１１４】
次に、ステップＳ３において、ＣＰＵ１０は、仮想カメラの仰角がカメラ目標角度１３２となるような位置に向けて仮想カメラを移動させる。最初のフレームでは、ＣＰＵ１０は、仰角が上記初期処理で設定された初期角度となるように仮想カメラを移動させ、それ以降の処理では、仰角が後述の目標角度算出処理で算出されたカメラ目標角度１３２になるように仮想カメラを移動させることになる。
【０１１５】
次に、ステップＳ４において、地形オブジェクト等の障害物とみなすオブジェクト（仮想カメラから見てプレイヤオブジェクト１０１を遮るような状態となったときに、上述のような仮想カメラの回り込みの処理が発生するオブジェクト）の描画データが生成される。すなわち、ＣＰＵ１０は、上記カメラ目標角度１３２へ移動した仮想カメラから見た地形オブジェクト等の描画データを生成する。より具体的には、当該地形オブジェクトについて、射影変換およびスクリーン座標系への変換を行う。これにより、スクリーン上における地形オブジェクトの描画位置（ピクセルの座標）が定まるため、当該描画位置に対応するフレームバッファ１１ｆ内のメモリアドレスに当該地形オブジェクトのＲＧＢ値を書き込む。このときに、地形オブジェクトのＺ値（上記変換処理の際に求められているものとする）に基づいて、Ｚバッファ１１ｇの更新も行う。ここでは、一例として、図１０に示した岩山１０２のＺ値は”０．３”となるものとして説明を続ける。
【０１１６】
次に、ステップＳ５において、目標角度の算出処理が実行される。本処理の詳細は後述するが、仮想カメラとプレイヤオブジェクト１０１との間の障害物の判定やカメラ目標角度１３２の設定処理が行われる。
【０１１７】
次に、ステップＳ６において、各オブジェクトの描画データが作成される。具体的には、ＣＰＵ１０は、各オブジェクトの描画データを生成し、フレームバッファ１１ｆに格納する処理を行う（当然、障害物に遮られた状態のプレイヤオブジェクト１０１については、ここではフレームバッファに格納されないことになる）。
【０１１８】
次に、ステップＳ７において、背景画像や画面エフェクト等の、非障害物の描画データが作成される。すなわち、ＣＰＵ１０は、必要に応じて非障害物の描画データを作成し、フレームバッファ１１ｆに格納する。
【０１１９】
続くステップＳ８において、テレビ２への描画処理が実行される。つまり、フレームバッファ１１ｆに格納されているデータ（すなわち、仮想カメラで仮想空間を撮影した画像）が読み出されてゲーム画像としてテレビ２に表示される。ステップＳ８の後、ステップＳ９において、ゲーム終了か否かが判断され、ＹＥＳの場合、ゲーム処理を終了し、ＮＯの場合、ステップＳ２に戻って、ゲーム処理を繰り返す。
【０１２０】
次に、上記ステップＳ５の目標角度算出処理について説明する。まず、図１８および図１９を用いて、目標角度算出処理の処理概要を説明する。図１８は、仮想カメラとプレイヤオブジェクト１０１との間に岩山１０２が存在する場合を例とした図である。つまり、上記図１１で示したような、プレイヤオブジェクト１０１が岩山１０２に隠れて見えない状態を例としている。
【０１２１】
図１８において、本処理では、まず、仮想カメラからプレイヤオブジェクト１０１の中点までの仮想空間内での距離Ｌ１が算出される。次に、上記プレイヤ２Ｄ座標１３３、すなわち、２次元画像（スクリーン座標系）における上記プレイヤオブジェクト１０１の中点の位置に対応するピクセルの座標が算出される。つまり、図１９に示すように、仮想カメラとプレイヤオブジェクト１０１との間に障害物がなければ描画されるであろうプレイヤオブジェクト１０１の中点の座標１９１がプレイヤ２Ｄ座標１３３として算出される。なお、図１９においては、画面の左上座標を（１，１）、右下の座標を（６４０，４８０）としている。
【０１２２】
次に、当該プレイヤ２Ｄ座標１３３におけるＺ値がＺバッファ１１ｇから取得される。本処理が行われる前に、上記のように、地形オブジェクトについての描画データの作成とフレームバッファへの格納、およびＺバッファの更新は終わっている（上述のステップＳ４）。そのため、この処理によって、当該座標において最も手前にある物体のＺ値が取得されることになる。本例では、岩山１０２のＺ値である”０．３”が取得される。
【０１２３】
次に、当該取得したＺ値に対応する仮想空間内の奥行き方向の距離（図１８の距離Ｌ２）が算出される。これは例えば、射影行列を用いることで算出可能である。
【０１２４】
次に、距離Ｌ１と距離Ｌ２との差分が算出され、当該差分が所定値以内（つまり、距離Ｌ１と距離Ｌ２とがほぼ等しい状態）であれば、仮想カメラとプレイヤオブジェクト１０１との間に障害物はないと判定する。一方、差分が所定値以上であれば、障害物がある（図１８のような状態）と判定して、後述する回り込み加速度算出処理を行う。
【０１２５】
図２０は、上記ステップＳ５で示した目標角度算出処理の詳細を示すフローチャートである。図２０において、まず、ステップＳ２１において、ＣＰＵ１０は、ゲーム空間内における仮想カメラの位置座標１３７からプレイヤオブジェクト１０１の中点座標１３８までの距離（図１８の距離Ｌ１）を算出する。以下、この距離のことをプレイヤ３Ｄ距離と呼ぶ。
【０１２６】
次に、ステップＳ２２において、ＣＰＵ１０は、ゲーム空間内のプレイヤオブジェクトの位置座標を、射影行列を用いて変換することにより、上記プレイヤ２Ｄ座標１３３（図１９の座標１９１）を算出する。
【０１２７】
次に、ステップＳ２３において、ＣＰＵ１０は、プレイヤ２Ｄ座標１３３におけるＺ値をＺバッファ１１ｇから取得する。
【０１２８】
次に、ステップＳ２４において、ＣＰＵ１０は、取得したＺ値から仮想空間内の奥行き方向の距離（図１８の距離Ｌ２）を算出する。つまり、０．０〜１．０の範囲で示されるＺバッファ内のＺ値を仮想空間内における３次元の奥行き方向の距離に変換する処理を行う。当該変換は、例えば射影行列を用いて実行される。そして、当該算出された距離を最前物３Ｄ距離１３５として作業領域１３０に記憶する。
【０１２９】
次に、ステップＳ２５において、ＣＰＵ１０は、プレイヤ３Ｄ距離１３４と最前物３Ｄ距離１３５の差分を算出する。続くステップＳ２６において、ＣＰＵ１０は、当該差分が所定値以内であるか否かを判定する。その結果、所定値以内でないときは（つまり、障害物がある場合）、ステップＳ２７において、後述の回り込み加速度算出処理が実行される。一方、所定値以内であれば（つまり、障害物がない場合）、ステップＳ２９において、後述する戻り加速度処理が実行される。
【０１３０】
その後、ステップＳ２８において、後述する目標角度設定処理が実行され、カメラ目標角度１３２が算出、設定される。以上で、目標角度算出処理は終了する。
【０１３１】
次に、上記ステップＳ２７で示した回り込み加速度算出処理について説明する。この処理では、上述したようなピクセル数のカウントを行う。そして、その結果に基づいて、仮想カメラを回り込ませる（上昇させる）ときの移動速度を決めるためのカメラ加速度１３１を算出する。ここで、本実施形態で仮想カメラの回り込み時の速度算出に加速度を用いているのは、他の画像処理、例えば、プレイヤオブジェクト１０１がダメージを受けた際に画面全体をぶれさせるような画面エフェクト処理を行う場合に加速度での制御が必要となるためである。つまり、他の画像処理との兼ね合いから、処理の汎用性を重視して加速度を用いた処理を行っている。そのため、仮想カメラの移動速度の算出に際して必ずしも加速度を用いる必要はなく、後述するように、直接、移動速度を算出するようにしてもよい。
【０１３２】
図２１は、当該回り込み加速度算出処理の詳細を示すフローチャートである。図２１において、まず、ステップＳ４１において、ＣＰＵ１０は、プレイヤ２Ｄ座標の１ピクセル上のピクセルをチェック対象ピクセルとして設定する。続くステップＳ４２において、ＣＰＵ１０は、ピクセル数に１を設定する。
【０１３３】
次に、ステップＳ４３において、ＣＰＵ１０は、チェック対象ピクセルのＺ値をＺバッファ１１ｇから取得する。
【０１３４】
次に、ステップＳ４４において、ＣＰＵ１０は、ステップＳ４３で取得したチェック対象ピクセルのＺ値に対応する仮想空間内の奥行き方向の距離、つまり、最前物３Ｄ距離１３５を算出する。この処理は、上記ステップＳ２４と同様である。
【０１３５】
次に、ステップＳ４５において、プレイヤ３Ｄ距離１３４が最前物３Ｄ距離１３５より大きいか否かを判定する。ステップＳ４５の判定の結果、プレイヤ３Ｄ距離１３４が最前物３Ｄ距離１３５より小さいとき（ステップＳ４５でＮＯ；なお、この時点のチェック対象ピクセルの一つ下のピクセルが岩山１０２の輪郭画素に該当することになる）は、ステップＳ５０において、ＣＰＵ１０は、次の式を用いてカメラ加速度１３１を算出する。
カメラ加速度１３１  ＝  ピクセル数  ／  ３０
その後、ＣＰＵ１０は、回り込み加速度算出処理を終了する。
【０１３６】
一方、ステップＳ４５の判定の結果、プレイヤ３Ｄ距離が最前物３Ｄ距離よりも大きいとき（ステップＳ４５でＹＥＳ：つまり、障害物が途中にあるとき）は、ステップＳ４６において、ＣＰＵ１０は、チェック対象ピクセルのＹ座標が表示領域（スクリーン）の上端座標と一致するか否かを判定する。つまり、画面の上端までチェックし終わったか否かが判定されることになる。当該判定の結果、スクリーンの上端座標と一致したとき（ステップＳ４６でＹＥＳ：つまり、上端までチェックしたとき）は、ＣＰＵ１０は、”０”をカメラ加速度１３１に設定し、回り込み加速度算出処理を終了する。
【０１３７】
一方、ステップＳ４６の判定の結果、上端座標と一致していなければ（ステップＳ４６でＮＯ：つまり、上端までチェックが終わっていない）、ステップＳ４７において、ＣＰＵ１０は、チェック対象ピクセルを１ピクセル上のピクセルに設定する。例えば、上記のようにスクリーン座標の左上の座標を（１，１）、右下の座標を（６４０，４８０）とした場合は、ＣＰＵ１０は、チェック対象ピクセルのＹ座標から１を減算する。
【０１３８】
次に、ステップＳ４８において、ＣＰＵ１０は、ピクセル数に１を加算し、ステップＳ４３に戻って処理を繰り返す。つまり、障害物のないピクセルが見つかるか、スクリーンの上端までチェックが済むまで、処理が繰り返される。以上で、回り込み加速度算出処理の説明を終了する。
【０１３９】
次に、目標角度設定処理について説明する。この処理では、上述のようにして算出された加速度に基づいて仮想カメラの移動速度、および、カメラ目標角度１３２を決定する処理が行われる。図２２は、上記ステップＳ２８で示した目標角度設定処理の詳細を示すフローチャートである。まず、ステップＳ６１において、ＣＰＵ１０は、以下の式を用いて、回り込みを行う際の仮想カメラの移動速度１３６を算出する。
移動速度１３６  ＝  移動速度１３６  ×  ０．９  ＋  カメラ加速度１３１  ×  単位時間ｄｔ
ここで、単位時間ｄｔは定数であり、本実施形態では、１フレーム分の処理時間に相当する”１／６０”が設定される。また、上式の”０．９”は、仮想カメラの動きを自然に見せるため（プレイヤに違和感を感じさせないようにするため）に、移動速度を減衰させるための係数である。
【０１４０】
次に、ステップＳ６２において、ＣＰＵ１０は、以下の式でカメラ目標角度１３２を算出する。
カメラ目標角度１３２  ＝  カメラ目標角度１３２  ＋移動速度１３６  ×  単位時間ｄｔ
これにより、次のフレームにおける処理ループでの仮想カメラの目標角度（つまり、移動させるべき位置）が決定される。以上で、目標角度設定処理は終了する。
【０１４１】
次に、上記ステップＳ２９で示した戻り加速度算出処理について説明する。当該処理は、上述のような仮想カメラの回り込みの結果、上がりすぎた仮想カメラの位置を少し下げるために行われる処理である。本実施形態では、上記のように、加速度を用いて仮想カメラの速度を設定しているため、回り込み時の仮想カメラの動きは若干の慣性がついた動きとなる。その結果、仮想カメラは、プレイヤオブジェクト１０１が見えるような角度まで上がっても、すぐには止まらずに更に少し上がりすぎた位置まで進む。そのため、上がりすぎた仮想カメラの位置を少し戻すという処理を行うものである。これは、プレイヤにとって少しでも見やすい画面を提供するためである。
【０１４２】
図２３は、上記ステップＳ２９で示した戻り加速度算出処理の詳細を示すフローチャートである。図２３において、まず、ステップＳ８１において、ＣＰＵ１０は、プレイヤ２Ｄ座標１３３の１ピクセル下のピクセルをチェック対象ピクセルに設定する。続くステップＳ８２において、ＣＰＵ１０は、ピクセル数に１を設定する。
【０１４３】
次に、ステップＳ８３において、ＣＰＵ１０は、チェック対象ピクセルのＺ値をＺバッファ１１ｇから取得する。続く、ステップＳ８４において、ＣＰＵ１０は、射影行列を用いて、当該Ｚ値から上記最前物３Ｄ距離１３５の算出を行う。
【０１４４】
次に、ステップＳ８５において、ＣＰＵ１０は、プレイヤ３Ｄ距離１３４と最前物３Ｄ距離１３５との差分を算出する。続くステップＳ８６において、ＣＰＵ１０は、当該算出した差分が所定値以内であるか否かを判定する。当該判定の結果、所定値以内ではないときは（ステップＳ８６でＮＯ）、ステップＳ９０において、ＣＰＵ１０は、プレイヤ２Ｄ座標と現在のチェック対象ピクセルとの距離が４５ピクセル以上であるか否かを判定する。ステップＳ９０の判定の結果、当該距離が４５ピクセル以上のときは（ステップＳ９０でＹＥＳ）、ステップＳ９１において、ＣＰＵ１０は、次式でカメラ加速度１３１を算出する。
カメラ加速度１３１  ＝  −（ピクセル数／４０）
【０１４５】
一方、ステップＳ９０の判定の結果、４５ピクセル以上でないときは（ステップＳ９０でＮＯ）、ＣＰＵ１０は、”０”をカメラ加速度１３１に設定し、戻り加速度算出処理を終了する。
【０１４６】
一方、上記ステップＳ８６の判定の結果、上記算出した差分が所定値以内であるときは（ステップＳ８６でＹＥＳ）、ステップＳ８７において、ＣＰＵ１０は、チェック対象ピクセルのＹ座標が表示領域（スクリーン）の下端座標と一致するか否かを判定する。つまり、画面の下端までチェックし終わったか否かが判定されることになる。当該判定の結果、スクリーンの下端座標と一致したとき（ステップＳ８７でＹＥＳ：上端までチェックしたとき）は、ＣＰＵ１０は、”０”をカメラ加速度１３１に設定し、戻り加速度算出処理を終了する。
【０１４７】
一方、ステップＳ８７の判定の結果、下端座標と一致していなければ（ステップＳ８７でＮＯ）、ステップＳ８８において、ＣＰＵ１０は、チェック対象ピクセルを１ピクセル下のピクセルに設定する。例えば、スクリーン座標の左上座標を（０，０）、右下の座標を（６４０，４８０）とした場合は、チェック対象ピクセルのＹ座標に１を加算する。
【０１４８】
次に、ステップＳ８９において、ＣＰＵ１０は、ピクセル数に１を加算し、ステップＳ８３に戻って処理を繰り返す。以上で、戻り加速度算出処理の説明を終了する。
【０１４９】
このように、本実施形態では、スクリーン座標系において、障害物がなければ描画されるであろうプレイヤオブジェクト１０１のピクセルの位置を基点として、当該プレイヤオブジェクト１０１を遮っている障害物が描画されなくなるまでの直線距離でのピクセル数をカウントしている。そして、当該カウントしたピクセル数に基づいて、仮想カメラの回り込み速度を設定している。つまり、２次元的な画像処理によって仮想カメラの回り込み速度の算出を行っている。これにより、複雑な３次元計算を用いて仮想カメラの回り込み速度を算出する場合に比べて処理負荷を軽減することができる。そのため、処理能力の低いＣＰＵ等のプロセッサを搭載したゲーム装置であっても、プレイヤにとって見やすく、操作しやすい３次元ゲームを提供することが可能となる。
【０１５０】
なお、上述の実施形態では、上記のようにカウントされたピクセル数に基づいて一旦カメラ加速度１３１を決定し、当該カメラ加速度１３１を用いて仮想カメラの移動速度１３６を決定していた。これに限らず、上記ピクセル数を直接、仮想カメラの移動速度１３６に反映させるようにしても良い。この場合は、図２１を用いて上述したステップＳ５０の処理において、カメラ加速度１３１を算出する代わりに、以下の式を用いて移動速度１３６を算出すればよい。
移動速度１３６  ＝  ピクセル数  ／  ３０
また、ステップＳ４９の処理においても、カメラ加速度１３１を”０”に設定する代わりに、移動速度１３６を”０”に設定すればよい。更に、図２２を用いて説明した目標角度設定処理におけるステップＳ６１の処理が不要となる。また、ステップＳ６１の処理が不要となる結果、仮想カメラの動きが慣性がつかなくなるような動きとなる。そのため、図２０のステップＳ２９で実行される戻り加速度算出処理も不要となる。
【０１５１】
（変形例）
また、上述した実施形態では、障害物の有無の判定（上記ステップＳ２１〜Ｓ２６の処理）において、Ｚ値から最前物３Ｄ距離を算出を算出していたが（ステップＳ２４）、当該最前物３Ｄ距離の算出処理を省いてもよい。つまり、単純に、プレイヤオブジェクト１０１のＺ値と、プレイヤ２Ｄ座標におけるＺバッファ１１ｇの値の大小を比較して、障害物の有無の判定を行うようにしてもよい。
【０１５２】
図２４は、Ｚ値の大小を比較して障害物の有無の判定を行う場合の目標角度算出処理のフローチャートである。図２４において、まず、ステップＳ１２１において、ＣＰＵ１０は、射影変換を行うことで上記プレイヤ２Ｄ座標およびプレイヤオブジェクト１０１のＺ値を算出する。
【０１５３】
次に、ステップＳ１２２において、ＣＰＵ１０は、上記プレイヤ２Ｄ座標におけるＺ値をＺバッファ１１ｇから取得する。続くステップＳ１２３において、ＣＰＵ１０は、上記ステップＳ１２１で算出した上記プレイヤオブジェクト１０１のＺ値と、ステップＳ１２２でＺバッファ１１ｇから取得したＺ値との差分を算出する。続くステップＳ１２４で、ＣＰＵ１０は、当該差分が所定値以内か否かを判定する。その結果、所定値以内であれば、ステップＳ１２５の回り込み加速度算出処理が実行され、所定値以下であれば、ステップＳ１２６の戻り加速度算出処理が実行される。
【０１５４】
なお、当該ステップＳ１２４の判定で用いられる所定値に関しては、プレイヤオブジェクト１０１のＺ値に応じて適宜変化させることが好ましい。一般に、仮想空間内の奥行き距離が深くなるほど、射影変換で得られるＺ値の精度は落ちる。例えば、仮想空間内における奥行き方向の座標（Ｚ座標）が１５００〜２０００の範囲であれば、Ｚ値を０．０〜０．５の精度で取得することができるが、Ｚ座標が２５００〜３０００の範囲では、Ｚ値を０．８〜１．０の精度でしか取得できない。そのため、障害物の有無の判定精度を高めるためには、例えば、プレイヤオブジェクト１０１のＺ値が大きくなるに伴って、当該判定で用いる所定値を大きい値に設定するような処理を加えることが好ましい。
【０１５５】
次に、ステップＳ１２７において目標角度設定処理が実行される。当該目標角度設定処理は、上記ステップＳ２８における処理と同様であるため、説明は省略する。
【０１５６】
図２５は、上記ステップＳ１２５で示した回り込み加速度算出処理の詳細を示すフローチャートである。なお、このフローチャートのうちステップＳ４１〜Ｓ４３、および、ステップＳ４６〜Ｓ５０は、図２１に示したフローチャートと同一であり、両フローチャートにおいて同一のステップには同一の符号が付されている。以下では、本実施形態におけるステップＳ４３以降の処理を中心に説明する。
【０１５７】
図２５において、ステップＳ４３でチェック対象ピクセルのＺ値がＺバッファ１１ｇから取得されると、続くステップＳ１３１において、ＣＰＵ１０は、上記ステップＳ１２１で算出されたプレイヤオブジェクト１０１のＺ値が当該チェック対象ピクセルのＺ値より大きいか否かを判定する。その結果、大きいとき（つまり、プレイヤオブジェクト１０１の手前に障害物があるとき：ステップＳ１３１でＹＥＳ）は、上記ステップＳ４６の処理へと進む。一方、大きくないとき（つまり、プレイヤオブジェクト１０１を遮る障害物がないとき：ステップＳ１３１でＮＯ）は、上記ステップＳ５０の処理へと進む。ステップＳ４６以降の処理の説明は既に上述したため、省略する。
【０１５８】
図２６は、上記ステップＳ１２６で示した戻り加速度算出処理の詳細を示すフローチャートである。このフローチャートのうちステップＳ８１〜Ｓ８３、および、ステップＳ８６以降の処理は、図２３に示したフローチャートと同一であり、両フローチャートにおいて同一のステップには同一の符号が付されている。以下では、本実施形態におけるステップＳ８３以降の処理を中心に説明する。
【０１５９】
図２６において、ステップＳ８３でチェック対象ピクセルのＺ値がＺバッファ１１ｇから取得されると、続くステップＳ１４１において、ＣＰＵ１０は、上記ステップＳ１２１で算出されたプレイヤオブジェクト１０１のＺ値と当該チェック対象ピクセルのＺ値との差分を算出する。続くステップＳ８６において、ＣＰＵ１０は、当該差分が所定値以内であるか否かを判定する。その結果、所定値以内であるときは（ステップＳ８６でＹＥＳ）、上記ステップＳ８７の処理へと進む。一方、所定値以内ではないとき（ステップＳ８６でＮＯ）は、上記ステップＳ９０の処理へと進む。ステップＳ８７以降の処理は上述した処理と同様であるため、説明は省略する。
【０１６０】
上記のように、Ｚ値の大小を比較して障害物の存在の判定を行う場合は、３次元計算にかかる処理（例えば、図２０のステップＳ２４やＳ２５等）が不要になるため、より処理負荷を軽くすることができる点で有利である。一方、上述したように、一般に、仮想空間内の奥行き距離が深くなるほど、射影変換で得られるＺ値の精度は落ちる。そのため、図２０を用いて説明したような処理を行う場合は、プレイヤオブジェクト１０１と障害物の前後関係について、より正確で精度の高い判定ができる点で有利である。つまり、３次元計算を併用して仮想空間内の距離に基づいて判定することで、プレイヤオブジェクト１０１と岩山１０２等の障害物との前後関係をより正確に検出することができる点で有利となる。
【産業上の利用可能性】
【０１６１】
本発明にかかるゲームプログラムおよびゲーム装置は、仮想カメラの移動速度を決定するための処理負荷を軽減することができ、据置型ゲーム装置、携帯型ゲーム装置、パーソナルコンピュータで実行されるゲーム処理等の用途に有用である。
【図面の簡単な説明】
【０１６２】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体３の機能ブロック図
【図３】図１のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面前方から見た斜視図
【図５】図３のコントローラ７の上ハウジングを外した状態を示す斜視図
【図６】図３のコントローラ７の下ハウジングを外した状態を示す斜視図
【図７】図３のコントローラ７の構成を示すブロック図
【図８】本実施形態で想定するゲームの画面の一例
【図９】図８のゲーム画面における仮想カメラとプレイヤオブジェクト１０１の位置関係を模式的に示す図
【図１０】本実施形態で想定するゲームの画面の一例
【図１１】図１０のゲーム画面における仮想カメラとプレイヤオブジェクト１０１の位置関係を模式的に示す図
【図１２】本実施形態で想定するゲームの画面の一例
【図１３】図１２のゲーム画面における仮想カメラとプレイヤオブジェクト１０１の位置関係を模式的に示す図
【図１４】本実施形態における仮想カメラの移動速度の決定処理の原理を説明するための図
【図１５】本実施形態における仮想カメラの移動速度の決定処理の原理を説明するための図
【図１６】図２に示した外部メインメモリ１２のメモリマップを示す図
【図１７】本発明の実施形態に係るゲーム処理を示すフローチャート
【図１８】目標角度算出処理の処理概要を説明するための図
【図１９】目標角度算出処理の処理概要を説明するための図
【図２０】図１７のステップＳ５で示した目標角度算出処理の詳細を示したフローチャート
【図２１】図２０のステップＳ２７で示した回り込み加速度算出処理の詳細を示すフローチャート
【図２２】図２０のステップＳ２８で示した目標角度設定処理の詳細を示すフローチャート
【図２３】図２０のステップＳ２９で示した戻り加速度算出処理の詳細を示すフローチャート
【図２４】Ｚ値の大小を比較して障害物の有無の判定を行う場合の目標角度算出処理のフローチャート
【図２５】図２４のステップＳ１２５で示した回り込み加速度算出処理の詳細を示すフローチャート
【図２６】図２４のステップＳ１２６で示した戻り加速度算出処理の詳細を示すフローチャート
【符号の説明】
【０１６３】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置本体
４…光ディスク
７…コントローラ
１０…ＣＰＵ
１１…システムＬＳＩ
１１ａ…入出力プロセッサ
１１ｂ…ＧＰＵ
１１ｃ…ＤＳＰ
１１ｄ…ＶＲＡＭ
１１ｅ…内部メインメモリ
１１ｆ…フレームバッファ
１１ｇ…Ｚバッファ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２…アンテナ
２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０３…水晶振動子
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
【図１】
0005390093.tif 000002
【図２】
0005390093.tif 000003
【図３】
0005390093.tif 000004
【図４】
0005390093.tif 000005
【図５】
0005390093.tif 000006
【図６】
0005390093.tif 000007
【図７】
0005390093.tif 000008
【図８】
0005390093.tif 000009
【図９】
0005390093.tif 000010
【図１０】
0005390093.tif 000011
【図１１】
0005390093.tif 000012
【図１２】
0005390093.tif 000013
【図１３】
0005390093.tif 000014
【図１４】
0005390093.tif 000015
【図１５】
0005390093.tif 000016
【図１６】
0005390093.tif 000017
【図１７】
0005390093.tif 000018
【図１８】
0005390093.tif 000019
【図１９】
0005390093.tif 000020
【図２０】
0005390093.tif 000021
【図２１】
0005390093.tif 000022
【図２２】
0005390093.tif 000023
【図２３】
0005390093.tif 000024
【図２４】
0005390093.tif 000025
【図２５】
0005390093.tif 000026
【図２６】
0005390093.tif 000027