(57)【要約】    【構成】  ゲーム装置１２はＣＰＵ（４０）を含み、このＣＰＵ（４０）はコントローラ２２から送信される加速度データおよび角速度データに基づいて、仮想空間内の移動オブジェクト（１０４）を制御する。たとえば、角速度データが所定の大きさを超えるまでは、当該角速度データに基づいて移動オブジェクト（１０４）の位置および姿勢を制御する。角速度データが所定の大きさを超えると、加速度データに基づいて、移動オブジェクト（１０４）の初速度を決定し、角速度データに基づいて、移動オブジェクト（１０４）の移動方向（姿勢）を決定する。その後、一般的な物理挙動に従って移動オブジェクト（１０４）は仮想空間内を移動する。    【効果】  ジャイロ信号を用いて多彩な処理を実行することができる。【選択図】  図１
2010012041.tif 000002
【特許請求の範囲】
【請求項１】
入力装置の位置および姿勢の少なくとも一方を含む状態を検出する検出手段から出力される状態信号に基づいて、仮想空間内のオブジェクトの動作を制御する情報処理装置のコンピュータに実行させる情報処理プログラムであって、
前記コンピュータを、
前記状態信号に基づいて、前記仮想空間内で前記オブジェクトが第１の動作を行うように制御する第１動作制御手段と、
前記状態信号の大きさに関する情報が所定の条件を満たしたか否かを判定する条件判定手段と、
前記条件判定手段によって、前記状態信号の大きさに関する情報が所定の条件を満たしたと判定された場合に、前記状態信号に基づいて、前記仮想空間内で前記オブジェクトが前記第１の動作とは異なる第２の動作を行うように制御する第２動作制御手段として機能させる、情報処理プログラム。
【請求項２】
前記検出手段は、ジャイロセンサを含み、
前記状態信号は、ジャイロ信号である、請求項１記載の情報処理プログラム。
【請求項３】
前記条件判定手段は、
前記ジャイロ信号の大きさを算出するジャイロ大きさ算出手段と、
前記ジャイロ大きさ算出手段によって算出されたジャイロ信号の大きさが第１の所定値を超えたか否かを判定する第１ジャイロ大きさ判定手段とを含み、
前記第２動作制御手段は、前記第１ジャイロ大きさ判定手段によって、前記ジャイロ信号の大きさが前記第１の所定値を超えたと判定された場合に、前記オブジェクトが前記第２の動作を行うように制御する、請求項２記載の情報処理プログラム。
【請求項４】
前記第２制御手段は、
前記ジャイロ信号の大きさが前記第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、前記オブジェクトの移動速度および移動方向を制御する移動制御手段を含む、請求項３記載の情報処理プログラム。
【請求項５】
前記入力装置は、加速度センサをさらに備え、
前記情報処理プログラムは、前記コンピュータを、
前記加速度センサの出力に基づいて前記入力装置に生じる加速度に対応する加速度信号を算出する加速度算出手段としてさらに機能させ、
前記第２動作制御手段は、
前記ジャイロ信号の大きさが前記第１の所定値を超えたと判定された場合に、前記加速度算出手段によって算出された加速度信号に基づいて、前記オブジェクトの移動速度を制御する移動速度制御手段と、
前記ジャイロ信号の大きさが前記第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、前記オブジェクトの移動方向を制御する移動方向制御手段を含む、請求項３記載の情報処理プログラム。
【請求項６】
前記情報処理プログラムは、前記コンピュータを、
前記ジャイロ信号の大きさに対応する大きさデータを記憶手段に順次記憶するジャイロ大きさ記憶手段と、
前記記憶手段に記憶された大きさデータが示す複数のジャイロ信号の大きさに基づいて、当該ジャイロ信号の大きさの極値を算出する極値算出手段と、
前記極値算出手段によって算出されたジャイロ信号の大きさの極値が第２の所定値を超えたか否かを判定する第２ジャイロ大きさ判定処理手段としてさらに機能させ、
前記第２動作制御手段は、前記第２ジャイロ大きさ判定処理手段によって、前記極値が前記第２の所定値を超えたと判定された場合に、前記ジャイロ信号に基づいて、前記仮想空間内で前記オブジェクトが前記第２の動作を行うように制御する、請求項３記載の情報処理プログラム。
【請求項７】
前記情報処理装置は、前記仮想空間内の前記オブジェクトの動作を制御するゲーム装置である、請求項３記載の情報処理プログラム。
【請求項８】
前記第２動作制御手段は、前記ジャイロ信号の大きさが前記第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、前記オブジェクトの移動速度および移動方向を制御する移動制御手段を含む、請求項７記載の情報処理プログラム。
【請求項９】
前記入力装置は、加速度センサをさらに備え、
前記情報処理プログラムは、前記コンピュータを、
前記加速度センサの出力に基づいて前記入力装置に生じる加速度に対応する加速度信号を算出する加速度算出手段としてさらに機能させ、
前記第２動作制御手段は、
前記ジャイロ信号の大きさが前記第１の所定値を超えたと判定された場合に、前記加速度算出手段によって算出された加速度信号に基づいて、前記オブジェクトの移動速度を制御する移動速度制御手段と、
前記ジャイロ信号の大きさが前記第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、前記オブジェクトの移動方向を制御する移動方向制御手段を含む、請求項７記載の情報処理プログラム。
【請求項１０】
前記情報処理プログラムは、前記コンピュータを、
前記ジャイロ信号の大きさに対応する大きさデータを記憶手段に順次記憶するジャイロ大きさ記憶手段と、
前記記憶手段に記憶された大きさデータが示す複数のジャイロ信号の大きさに基づいて、当該ジャイロ信号の大きさの極値を算出する極値算出手段と、
前記極値算出手段によって算出されたジャイロ信号の大きさの極値が第２の所定値を超えたか否かを判定する第２ジャイロ大きさ判定手段としてさらに機能させ、
前記第２動作制御手段は、前記第２ジャイロ大きさ判定処理手段によって、前記極値が前記第２の所定値を超えたと判定された場合に、前記ジャイロ信号に基づいて、前記仮想空間内で前記オブジェクトが前記第２の動作を行うように制御する、請求項７記載の情報処理プログラム。
【請求項１１】
前記第１動作制御手段は、前記状態信号に基づいて決定した位置および姿勢の少なくとも一方に従って前記オブジェクトを前記仮想空間内に配置する配置制御手段を含む、請求項１に記載の情報処理プログラム。
【請求項１２】
入力装置の位置および姿勢の少なくとも一方を含む状態を検出する検出手段から出力される状態信号に基づいて、仮想空間内のオブジェクトの動作を制御する情報処理装置であって、
前記状態信号に基づいて、前記仮想空間内で前記オブジェクトが第１の動作を行うように制御する第１動作制御手段と、
前記状態信号の大きさに関する情報が所定の条件を満たしたか否かを判定する条件判定手段と、
前記条件判定手段によって、前記状態信号の大きさに関する情報が所定の条件を満たしたと判定された場合に、前記状態信号に基づいて、前記仮想空間内で前記オブジェクトが前記第１の動作とは異なる第２の動作を行うように制御する第２動作制御手段を備える、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は情報処理プログラムおよび情報処理装置に関し、特にたとえば、入力装置の位置および姿勢の少なくとも一方を含む状態を検出する検出手段から出力される状態信号に基づいて、仮想空間内のオブジェクトの動作を制御するための、情報処理プログラムおよび情報処理装置に関する。
【背景技術】
【０００２】
従来のこの種の情報処理装置の一例が特許文献１に開示されている。この特許文献１のゲーム装置の入力制御装置は、多軸加速度センサーおよび多軸ジャイロセンサーを備えている。この入力制御装置を用いたゲーム装置では、刀を回す（ひねる）姿勢のデータや刀を前後左右に傾ける姿勢のデータを作成するために多軸ジャイロセンサーの出力を用いている。また、刀を振る動作、たとえば、強弱、前後左右上下の移動のデータを作成するために多軸加速度センサーの出力を用いている。
【特許文献１】特開２０００−３０８７５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
この特許文献１の入力制御装置では、多軸ジャイロセンサーから得られる回転運動の角速度情報を用いて入力制御装置の姿勢を算出している。しかし、特許文献１には、入力制御装置の姿勢を算出する方法の詳細は記載されておらず、ジャイロセンサを備えた装置の姿勢を算出するには、角速度情報を積算する方法が一般的である。しかし、この多軸ジャイロセンサーを備えた入力制御装置では、多軸ジャイロセンサーから得られる情報を入力制御装置の姿勢を算出することにしか利用されておらず、仮想空間内に存在するオブジェクトを投げる（移動させる）など、多様な範囲での利用がされていなかった。また、その他の動作を認識するためには、別途多軸加速度センサーを備えることが必要となり、入力制御装置自体が高価なものになっていた。
【０００４】
それゆえに、この発明の主たる目的は、新規な、情報処理プログラムおよび情報処理装置を提供することである。
【０００５】
この発明の他の目的は、ジャイロ信号に基づいて多彩な処理を実行できる、情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００７】
第１の発明は、入力装置の位置および姿勢の少なくとも一方を含む状態を検出する検出手段から出力される状態信号に基づいて、仮想空間内のオブジェクトの動作を制御する情報処理装置のコンピュータに実行させる情報処理プログラムであって、コンピュータを、状態信号に基づいて、仮想空間内でオブジェクトが第１の動作を行うように制御する第１動作制御手段と、状態信号の大きさに関する情報が所定の条件を満たしたか否かを判定する条件判定手段と、条件判定手段によって、状態信号の大きさに関する情報が所定の条件を満たしたと判定された場合に、状態信号に基づいて、仮想空間内でオブジェクトが第１の動作とは異なる第２の動作を行うように制御する第２動作制御手段として機能させる、情報処理プログラムである。
【０００８】
第１の発明では、情報処理プログラムは、入力装置（２２）の位置および姿勢の少なくとも一方を含む状態を検出する検出手段（２４，９２）からの状態信号に基づいて、仮想空間内のオブジェクト（１０４）の動作を制御する情報処理装置（１２）のコンピュータ（４０,４２など）によって実行される。情報処理プログラムは、このコンピュータを、第１動作制御手段（４０，Ｓ５，Ｓ１５）は、状態信号に基づいて、仮想空間内でオブジェクトが第１の動作を行うように制御する。条件判定手段（４０，Ｓ２１，Ｓ６３，Ｓ７３）は、状態信号の大きさに関する情報が所定の条件を満たしたか否かを判定する。第２動作制御手段（４０，Ｓ２９）は、条件判定手段によって状態信号の大きさに関する情報が所定の条件を満たしたと判定された場合に、状態信号に基づいて、仮想空間内でオブジェクトが第１の動作とは異なる第２の動作を行うように制御する。
【０００９】
第１の発明によれば、状態信号の大きさに基づいて３次元仮想空間内でオブジェクトに異なる動作を実行させるので、コントローラの位置および姿勢についての状態信号に基づいて多彩な処理を実行することができる。
【００１０】
第２の発明は第１の発明に従属し、検出手段は、ジャイロセンサを含み、状態信号は、ジャイロ信号である。
【００１１】
第２の発明では、検出手段はジャイロセンサを含み、このジャイロセンサのジャイロ信号に基づいて、入力装置の位置および姿勢の少なくとも一方を含む状態が検出される。
【００１２】
第２の発明によれば、ジャイロセンサのような汎用のセンサを用いることにより、入力装置の位置および姿勢を検出するので、簡単な構成で入力装置の位置および姿勢を検出して、それによって仮想空間内のオブジェクトの動作を制御することができる。
【００１３】
第３の発明は第２の発明に従属し、条件判定手段は、ジャイロ信号の大きさを算出するジャイロ大きさ算出手段と、ジャイロ大きさ算出手段によって算出されたジャイロ信号の大きさが第１の所定値を超えたか否かを判定する第１ジャイロ大きさ判定手段とを含み、第２動作制御手段は、第１ジャイロ大きさ判定手段によって、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、オブジェクトが第２の動作を行うように制御する。
【００１４】
第３の発明では、条件判定手段は、ジャイロ大きさ算出手段（４０，Ｓ５）および第１ジャイロ大きさ判定手段（４０，Ｓ７３）を含む。ジャイロ大きさ算出手段は、ジャイロ信号の大きさを算出する。また、第１ジャイロ大きさ判定手段は、ジャイロ大きさ算出手段によって算出されたジャイロ信号の大きさが第１の所定値を超えたか否かを判定する。第２動作制御手段は、第１ジャイロ大きさ判定手段によって、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に（Ｓ７３で“ＹＥＳ”）、たとえば、ジャイロ信号に基づいて決定した姿勢に従って、オブジェクトの移動を制御する。
【００１５】
第３の発明によれば、ジャイロ信号の大きさが第１の所定値を超える場合に、当該ジャイロ信号に基づいて３次元仮想空間におけるオブジェクトの移動を制御することができる。
【００１６】
第４の発明は第３の発明に従属し、第２制御手段は、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、オブジェクトの移動速度および移動方向を制御する移動制御手段を含む。
【００１７】
第４の発明では、移動制御手段（４０）は、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、オブジェクトの移動速度および移動方向を制御する。たとえば、オブジェクトの初速度とその方向とが決定され、その後、通常の物理計算により、オブジェクトが移動される。
【００１８】
第４の発明によれば、ジャイロ信号に基づいて、オブジェクトの移動を制御することができる。
【００１９】
第５の発明は第３の発明に従属し、入力装置は、加速度センサをさらに備え、情報処理プログラムは、コンピュータを、加速度センサの出力に基づいて入力装置に生じる加速度に対応する加速度信号を算出する加速度算出手段としてさらに機能させ、第２動作制御手段は、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、加速度算出手段によって算出された加速度信号に基づいて、オブジェクトの移動速度を制御する移動速度制御手段と、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、オブジェクトの移動方向を制御する移動方向制御手段を含む。
【００２０】
第５の発明では、入力装置は、加速度センサ（７４）をさらに備える。情報処理プログラムは、コンピュータを、加速度算出手段（４０）としてさらに機能させる。加速度算出手段は、加速度センサの出力に基づいて入力装置に生じる加速度に対応する加速度信号を算出する。移動速度制御手段（４０，Ｓ１０３）は、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に（Ｓ７３で“ＹＥＳ”）、加速度算出手段によって算出された加速度信号に基づいて、オブジェクトの移動速度を制御する。たとえば、オブジェクトの初速度が算出される。また、移動方向制御手段（４０，Ｓ８５）は、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に（Ｓ７３で“ＹＥＳ”）、当該ジャイロ信号に基づいて、オブジェクトの移動方向を制御する。たとえば、オブジェクトの初速度の向き、すなわち移動開始時の移動方向が算出される。
【００２１】
第５の発明によれば、コントローラに備えられた加速度センサの出力に基づいて算出した加速度に基づいてオブジェクトの移動速度を制御するとともに、ジャイロ信号に基づいてオブジェクトの移動方向を制御するので、ジャイロ信号のみを用いる場合よりもさらに多彩な処理を実行することができる。
【００２２】
第６の発明は第３の発明に従属し、情報処理プログラムは、コンピュータを、ジャイロ信号の大きさに対応する大きさデータを記憶手段に順次記憶するジャイロ大きさ記憶手段と、記憶手段に記憶された大きさデータが示す複数のジャイロ信号の大きさに基づいて、当該ジャイロ信号の大きさの極値を算出する極値算出手段と、極値算出手段によって算出されたジャイロ信号の大きさの極値が第２の所定値を超えたか否かを判定する第２ジャイロ大きさ判定処理手段としてさらに機能させ、第２ジャイロ大きさ判定手段は、極値算出手段によって算出されたジャイロ信号の大きさの極値が第２の所定値を超えた場合に実行される。
【００２３】
第６の発明では、情報処理プログラムは、コンピュータを、ジャイロ大きさ記憶手段（４０，５０２，Ｓ５，Ｓ１３）と、極値算出手段（４０，Ｓ５７−Ｓ７１）と、第２ジャイロ大きさ判定処理手段（４０，Ｓ７３）としてさらに機能させる。ジャイロ大きさ記憶手段は、ジャイロ信号の大きさに対応する大きさデータ（５０２ｂ）を記憶手段に順次記憶する。極値算出手段は、記憶手段に記憶された大きさデータが示す複数のジャイロ信号の大きさに基づいて、当該ジャイロ信号の大きさの極値を算出する。第２ジャイロ大きさ判定処理手段は、極値算出手段によって算出されたジャイロ信号の大きさの極値が第２の所定値を超えたか否かを判定する。第２動作制御手段は、第２ジャイロ大きさ判定処理手段によって、極値が第２の所定値を超えたと判定された場合に（Ｓ７３で“ＹＥＳ”）、ジャイロ信号に基づいて、仮想空間内でオブジェクトが第２の動作を行うように制御する。
【００２４】
第６の発明によれば、ジャイロ信号の大きさの極値が第２の所定値を超える場合に、第２動作制御手段によってオブジェクトを動作させるので、誤検出による誤動作を防止することができる。
【００２５】
第７の発明は第３の発明に従属し、情報処理装置は、仮想空間内のオブジェクトの動作を制御するゲーム装置である。
【００２６】
第７の発明では、情報処理装置は、仮想空間内のオブジェクトの動作を制御するゲーム装置（１２）である。
【００２７】
第７の発明によれば、ジャイロ信号に基づいてゲームの仮想空間内のオブジェクトに多彩な処理を実行させることができる。
【００２８】
第８の発明は第７の発明に従属し、第２動作制御手段は、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、オブジェクトの移動速度および移動方向を制御する移動制御手段を含む。
【００２９】
第８の発明においても、第４の発明と同様に、ジャイロ信号に基づいて、オブジェクトの移動を制御することができる。
【００３０】
第９の発明は第７の発明に従属し、入力装置は、加速度センサをさらに備え、情報処理プログラムは、コンピュータを、加速度センサの出力に基づいて入力装置に生じる加速度に対応する加速度信号を算出する加速度算出手段としてさらに機能させ、第２動作制御手段は、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、加速度算出手段によって算出された加速度信号に基づいて、オブジェクトの移動速度を制御する移動速度制御手段と、ジャイロ信号の大きさが第１の所定値を超えたと判定された場合に、当該ジャイロ信号に基づいて、オブジェクトの移動方向を制御する移動方向制御手段を含む。
【００３１】
第９の発明においても、第５の発明と同様に、ジャイロ信号のみを用いる場合よりもさらに多彩な処理を実行することができる。
【００３２】
第１０の発明は第７の発明に従属し、情報処理プログラムは、コンピュータを、ジャイロ信号の大きさに対応する大きさデータを記憶手段に順次記憶するジャイロ大きさ記憶手段と、記憶手段に記憶された大きさデータが示す複数のジャイロ信号の大きさに基づいて、当該ジャイロ信号の大きさの極値を算出する極値算出手段と、極値算出手段によって算出されたジャイロ信号の大きさの極値が第２の所定値を超えたか否かを判定する第２ジャイロ大きさ判定手段としてさらに機能させ、第２動作制御手段は、第２ジャイロ大きさ判定処理手段によって、極値が第２の所定値を超えたと判定された場合に、ジャイロ信号に基づいて、仮想空間内でオブジェクトが第２の動作を行うように制御する。
【００３３】
第１０の発明にもいても第６の発明と同様に、誤検出による誤動作を防止することができる。
【００３４】
第１１の発明は第１の発明に従属し、第１動作制御手段は、状態信号に基づいて決定した位置および姿勢の少なくとも一方に従ってオブジェクトを仮想空間内に配置する配置制御手段を含む。
【００３５】
第１１の発明では、配置制御手段（４０，Ｓ１７）は、状態信号に基づいて決定した位置および姿勢の少なくとも一方に従ってオブジェクトを仮想空間内に配置する。
【００３６】
第１１の発明よれば、入力装置の位置や姿勢に応じて、オブジェクトを仮想空間内に配置することができる。したがって、入力装置の位置や姿勢の変化に応じて、オブジェクトの配置位置も変化させる。つまり、オブジェクトの動作が制御される。
【００３７】
第１２の発明は、入力装置の位置および姿勢の少なくとも一方を含む状態を検出する検出手段から出力される状態信号に基づいて、仮想空間内のオブジェクトの動作を制御する情報処理装置であって、状態信号に基づいて、仮想空間内でオブジェクトが第１の動作を行うように制御する第１動作制御手段と、状態信号の大きさに関する情報が所定の条件を満たしたか否かを判定する条件判定手段と、条件判定手段によって、状態信号の大きさに関する情報が所定の条件を満たしたと判定された場合に、状態信号に基づいて、仮想空間内でオブジェクトが第１の動作とは異なる第２の動作を行うように制御する第２動作制御手段を備える、情報処理装置である。
【００３８】
第１２の発明においても、第１の発明と同様に、入力装置の位置や姿勢についての状態信号に基づいて多彩な処理を実行することができる。
【発明の効果】
【００３９】
この発明によれば、入力装置の位置や姿勢に基づく状態信号が所定の条件を満たすか否かで、３次元仮想空間内でオブジェクトに異なる動作を実行させるので、多彩な処理を実行することができる。
【００４０】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【００４１】
図１を参照して、この発明の一実施例であるゲームシステム１０は、情報処理装置として機能するビデオゲーム装置（以下、単に「ゲーム装置」という。）１２およびコントローラ２２を含む。なお、図示は省略するが、この実施例のゲーム装置１２は、最大４つのコントローラ２２と通信可能に設計されている。また、ゲーム装置１２と各コントローラ２２とは、無線によって接続される。たとえば、無線通信は、Ｂｌｕｅｔｏｏｔｈ（登録商標）規格に従って実行されるが、赤外線や無線ＬＡＮなど他の規格に従って実行されてもよい。さらには、有線で接続されてもよい。また、この実施例では、コントローラ２２には、ジャイロユニット２４が接続（連結）されている。
【００４２】
ゲーム装置１２は、略直方体のハウジング１４を含み、ハウジング１４の前面にはディスクスロット１６が設けられる。ディスクスロット１６から、ゲームプログラム等を記憶した情報記憶媒体の一例である光ディスク１８が挿入されて、ハウジング１４内のディスクドライブ５４（図２参照）に装着される。図示は省略するが、ディスクスロット１６の周囲には、ＬＥＤと導光板とが配置され、様々な処理に応答させて、ディスクスロット１６を点灯または点滅させることが可能である。
【００４３】
また、ゲーム装置１２のハウジング１４の前面であり、その上部には、電源ボタン２０ａおよびリセットボタン２０ｂが設けられ、その下部には、イジェクトボタン２０ｃが設けられる。さらに、リセットボタン２０ｂとイジェクトボタン２０ｃとの間であり、ディスクスロット１６の近傍には、外部メモリカード用コネクタカバー２８が設けられる。この外部メモリカード用コネクタカバー２８の内側には、外部メモリカード用コネクタ６２（図２参照）が設けられ、図示しない外部メモリカード（以下、単に「メモリカード」という。）が挿入される。メモリカードは、光ディスク１８から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム１０を利用してプレイしたゲームのゲームデータ（ゲームの結果データまたは途中データ）を保存（セーブ）しておいたりするために利用される。ただし、上記のゲームデータの保存は、メモリカードに対して行うことに代えて、たとえばゲーム装置１２の内部に設けられるフラッシュメモリ４４（図２参照）のような内部メモリに対して行うようにしてもよい。また、メモリカードは、内部メモリのバックアップメモリとして用いるようにしてもよい。さらに、ゲーム装置１２では、ゲーム以外の他のアプリケーションを実行することも可能であり、かかる場合には、メモリカードには当該他のアプリケーションのデータを保存することができる。
【００４４】
なお、メモリカードとしては、汎用のＳＤカードを用いることができるが、メモリスティックやマルチメディアカード（登録商標）のような他の汎用のメモリカードを用いることもできる。
【００４５】
図１では省略するが、ゲーム装置１２のハウジング１４の後面には、ＡＶケーブルコネクタ５８（図２参照）が設けられ、そのＡＶコネクタ５８を用いて、ＡＶケーブル３２ａを通してゲーム装置１２にモニタ３４およびスピーカ３４ａを接続する。このモニタ３４およびスピーカ３４ａは典型的にはカラーテレビジョン受像機であり、ＡＶケーブル３２ａによって、ゲーム装置１２からの映像信号がカラーテレビのビデオ入力端子に入力され、ゲーム装置１２からの音声信号が音声入力端子に入力される。したがって、カラーテレビ（モニタ）３４の画面上にたとえば３次元（３Ｄ）ビデオゲームのゲーム画像が表示され、左右のスピーカ３４ａからゲーム音楽や効果音などのステレオゲーム音声が出力される。また、モニタ３４の周辺（この実施例では、モニタ３４の上側）には、２つの赤外ＬＥＤ（マーカ）３４ｍ，３４ｎを備えるマーカ部３４ｂが設けられる。このマーカ部３４ｂは、電源ケーブル３２ｂを通してゲーム装置１２に接続される。したがって、マーカ部３４ｂには、ゲーム装置１２から電源が供給される。これによって、マーカ３４ｍ，３４ｎは発光し、それぞれモニタ３４の前方に向けて赤外光を出力する。
【００４６】
なお、ゲーム装置１２の電源は、一般的なＡＣアダプタ（図示せず）によって与えられる。ＡＣアダプタは家庭用の標準的な壁ソケットに差し込まれ、ゲーム装置１２は、家庭用電源（商用電源）を、駆動に適した低いＤＣ電圧信号に変換する。他の実施例では、電源としてバッテリが用いられてもよい。
【００４７】
このゲームシステム１０において、ユーザまたはプレイヤがゲーム（またはゲームに限らず、他のアプリケーション）をプレイするために、ユーザはまずゲーム装置１２の電源をオンし、次いで、ユーザはビデオゲーム（もしくはプレイしたいと思う他のアプリケーション）のプログラムを記録している適宜の光ディスク１８を選択し、その光ディスク１８をゲーム装置１２のディスクドライブ５４にローディングする。応じて、ゲーム装置１２がその光ディスク１８に記録されているプログラムに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム装置１２に入力を与えるためにコントローラ２２を操作する。たとえば、入力手段２６のどれかを操作することによってゲームもしくは他のアプリケーションをスタートさせる。また、入力手段２６に対する操作以外にも、コントローラ２２自体を動かすことによって、動画オブジェクト（プレイヤオブジェクト）を異なる方向に移動させ、または３Ｄのゲーム世界におけるユーザの視点（カメラ位置）を変化させることができる。
【００４８】
ただし、ビデオゲームや他のアプリケーションのプログラムは、ゲーム装置１２の内部メモリ（フラッシュメモリ４２（図２参照））に記憶（インストール）しておき、当該内部メモリから実行するようにしてもよい。かかる場合には，光ディスク１８のような記憶媒体に記憶されたプログラムを内部メモリにインストールしてもよいし、ダウンロードされたプログラムを内部メモリにインストールしてもよい。
【００４９】
図２は図１実施例のビデオゲームシステム１０の電気的な構成を示すブロック図である。図示は省略するが、ハウジング１４内の各コンポーネントは、プリント基板に実装される。図２に示すように、ゲーム装置１２には、ＣＰＵ４０が設けられ、ゲームプロセッサとして機能する。また、ＣＰＵ４０には、システムＬＳＩ４２が接続される。このシステムＬＳＩ４２には、外部メインメモリ４６、ＲＯＭ／ＲＴＣ４８、ディスクドライブ５４およびＡＶ  ＩＣ５６が接続される。
【００５０】
外部メインメモリ４６は、ゲームプログラム等のプログラムを記憶したり、各種データを記憶したりして、ＣＰＵ４０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ４８は、いわゆるブートＲＯＭであり、ゲーム装置１２の起動用のプログラムが組み込まれるとともに、時間をカウントする時計回路が設けられる。ディスクドライブ５４は、光ディスク１８からプログラム，画像データや音声データ等を読み出し、ＣＰＵ４０の制御の下で、後述する内部メインメモリ４２ｅまたは外部メインメモリ４６に書き込む。
【００５１】
システムＬＳＩ４２には、入出力プロセッサ４２ａ、ＧＰＵ(Graphics Processor Unit)４２ｂ，ＤＳＰ(Digital Signal Processor)４２ｃ，ＶＲＡＭ４２ｄおよび内部メインメモリ４２ｅが設けられ、図示は省略するが、これらは内部バスによって互いに接続される。入出力プロセッサ（Ｉ／Ｏプロセッサ）４２ａは、データの送受信を実行したり、データのダウンロードを実行したりする。データの送受信やダウンロードについては後述する。
【００５２】
ＧＰＵ４２ｂは、描画手段の一部を形成し、ＣＰＵ４０からのグラフィクスコマンド(作画命令)を受け、そのコマンドに従ってゲーム画像データを生成する。ただし、ＣＰＵ４０は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをＧＰＵ４２ｂに与える。
【００５３】
図示は省略するが、上述したように、ＧＰＵ４２ｂにはＶＲＡＭ４２ｄが接続される。ＧＰＵ４２ｂが作画コマンドを実行するにあたって必要なデータ（画像データ：ポリゴンデータやテクスチャデータなどのデータ）は、ＧＰＵ４２ｂがＶＲＡＭ４２ｄにアクセスして取得する。ただし、ＣＰＵ４０は、描画に必要な画像データを、ＧＰＵ４２ｂを介してＶＲＡＭ４２ｄに書き込む。ＧＰＵ４２ｂは、ＶＲＡＭ４２ｄにアクセスして描画のためのゲーム画像データを作成する。
【００５４】
なお、この実施例では、ＧＰＵ４２ｂがゲーム画像データを生成する場合について説明するが、ゲームアプリケーション以外の任意のアプリケーションを実行する場合には、ＧＰＵ４２ｂは当該任意のアプリケーションについての画像データを生成する。
【００５５】
また、ＤＳＰ４２ｃは、オーディオプロセッサとして機能し、内部メインメモリ４２ｅや外部メインメモリ４６に記憶されるサウンドデータや音波形（音色）データを用いて、スピーカ３４ａから出力する音、音声或いは音楽に対応するオーディオデータを生成する。
【００５６】
上述のように生成されたゲーム画像データおよびオーディオデータは、ＡＶ  ＩＣ５６によって読み出され、ＡＶコネクタ５８を介してモニタ３４およびスピーカ３４ａに出力される。したがって、ゲーム画面がモニタ３４に表示され、ゲームに必要な音（音楽）がスピーカ３４ａから出力される。
【００５７】
また、入出力プロセッサ４２ａには、フラッシュメモリ４４、無線通信モジュール５０および無線コントローラモジュール５２が接続されるとともに、拡張コネクタ６０およびメモリカード用コネクタ６２が接続される。また、無線通信モジュール５０にはアンテナ５０ａが接続され、無線コントローラモジュール５２にはアンテナ５２ａが接続される。
【００５８】
図示は省略するが、入出力プロセッサ４２ａは、無線通信モジュール５０を介して、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。ただし、ネットワークを介さずに、直接的に他のゲーム装置と通信することもできる。入出力プロセッサ４２ａは、定期的にフラッシュメモリ４４にアクセスし、ネットワークへ送信する必要があるデータ（「送信データ」とする）の有無を検出し、当該送信データが有る場合には、無線通信モジュール５０およびアンテナ５０ａを介してネットワークに送信する。また、入出力プロセッサ４２ａは、他のゲーム装置から送信されるデータ（「受信データ」とする）を、ネットワーク、アンテナ５０ａおよび無線通信モジュール５０を介して受信し、当該受信データをフラッシュメモリ４４に記憶する。ただし、受信データが一定の条件を満たさない場合には、当該受信データはそのまま破棄される。さらに、入出力プロセッサ４２ａは、ダウンロードサーバからダウンロードしたデータ（ダウンロードデータとする）をネットワーク、アンテナ５０ａおよび無線通信モジュール５０を介して受信し、そのダウンロードデータをフラッシュメモリ４４に記憶する。
【００５９】
また、入出力プロセッサ４２ａは、コントローラ２２から送信される入力データをアンテナ５２ａおよび無線コントローラモジュール５２を介して受信し、内部メインメモリ４２ｅまたは外部メインメモリ４６のバッファ領域に記憶（一時記憶）する。入力データは、ＣＰＵ４０の処理（たとえば、ゲーム処理）によって利用された後、バッファ領域から消去される。
【００６０】
なお、この実施例では、上述したように、無線コントローラモジュール５２は、Ｂｌｕｅｔｏｏｔｈ規格に従ってコントローラ２２との間で通信を行う。
【００６１】
さらに、入出力プロセッサ４２ａには、拡張コネクタ６０およびメモリカード用コネクタ６２が接続される。拡張コネクタ６０は、ＵＳＢやＳＣＳＩのようなインターフェイスのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、コントローラ２２とは異なる他のコントローラのような周辺機器を接続したりすることができる。また、拡張コネクタ６０に有線ＬＡＮアダプタを接続し、無線通信モジュール５０に代えて当該有線ＬＡＮを利用することもできる。メモリカード用コネクタ６２には、メモリカードのような外部記憶媒体を接続することができる。したがって、たとえば、入出力プロセッサ４２ａは、拡張コネクタ６０やメモリカード用コネクタ６２を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００６２】
詳細な説明は省略するが、図１にも示したように、ゲーム装置１２（ハウジング１４）には、電源ボタン２０ａ，リセットボタン２０ｂおよびイジェクトボタン２０ｃが設けられる。電源ボタン２０ａは、システムＬＳＩ４２に接続される。この電源ボタン２０ａがオンされると、システムＬＳＩ４２には、ゲーム装置１２の各コンポーネントに図示しないＡＣアダプタを経て電源が供給され、通常の通電状態となるモード（「通常モード」と呼ぶこととする）が設定される。一方、電源ボタン２０ａがオフされると、システムＬＳＩ４２には、ゲーム装置１２の一部のコンポーネントのみに電源が供給され、消費電力を必要最低限に抑えるモード（以下、「スタンバイモード」という）が設定される。
【００６３】
この実施例では、スタンバイモードが設定された場合には、システムＬＳＩ４２は、入出力プロセッサ４２ａ、フラッシュメモリ４４、外部メインメモリ４６、ＲＯＭ／ＲＴＣ４８および無線通信モジュール５０、無線コントローラモジュール５２以外のコンポーネントに対して、電源供給を停止する指示を行う。したがって、この実施例では、スタンバイモードにおいて、ＣＰＵ４０がアプリケーションを実行することはない。
【００６４】
なお、システムＬＳＩ４２には、スタンバイモードにおいても電源が供給されるが、ＧＰＵ４２ｂ、ＤＳＰ４２ｃおよびＶＲＡＭ４２ｄへのクロックの供給を停止することにより、これらを駆動しないようにして、消費電力を低減するようにしてある。
【００６５】
また、図示は省略するが、ゲーム装置１２のハウジング１４内部には、ＣＰＵ４０やシステムＬＳＩ４２などのＩＣの熱を外部に排出するためのファンが設けられる。スタンバイモードでは、このファンも停止される。
【００６６】
ただし、スタンバイモードを利用したくない場合には、スタンバイモードを利用しない設定にしておくことにより、電源ボタン２０ａがオフされたときに、すべての回路コンポーネントへの電源供給が完全に停止される。
【００６７】
また、通常モードとスタンバイモードとの切り替えは、コントローラ２２の電源スイッチ２６ｈのオン／オフの切り替えによって、遠隔操作によって行うことが可能である。当該遠隔操作を行わない場合には、スタンバイモードにおいて無線コントローラモジュール５２ａへの電源供給を行わない設定にしてもよい。
【００６８】
リセットボタン２０ｂもまた、システムＬＳＩ４２に接続される。リセットボタン２０ｂが押されると、システムＬＳＩ４２は、ゲーム装置１２の起動プログラムを再起動する。イジェクトボタン２０ｃは、ディスクドライブ５４に接続される。イジェクトボタン２０ｃが押されると、ディスクドライブ５４から光ディスク１８が排出される。
【００６９】
図３（Ａ）ないし図３（Ｅ）は、コントローラ２２の外観の一例を示す。図３（Ａ）はコントローラ２２の先端面を示し、図３（Ｂ）はコントローラ２２の上面を示し、図３（Ｃ）はコントローラ２２の右側面を示し、図３（Ｄ）はコントローラ２２の下面を示し、そして、図３（Ｅ）はコントローラ２２の後端面を示す。
【００７０】
図３（Ａ）ないし図３（Ｅ）を参照して、コントローラ２２は、たとえばプラスチック成型によって形成されたハウジング２２ａを有している。ハウジング２２ａは、略直方体形状であり、ユーザが片手で把持可能な大きさである。ハウジング２２ａ（コントローラ２２）には、入力手段（複数のボタンないしスイッチ）２６が設けられる。具体的には、図３（Ｂ）に示すように、ハウジング２２ａの上面には、十字キー２６ａ，１ボタン２６ｂ，２ボタン２６ｃ，Ａボタン２６ｄ，−ボタン２６ｅ，ＨＯＭＥボタン２６ｆ，＋ボタン２６ｇおよび電源スイッチ２６ｈが設けられる。また、図３（Ｃ）および図３（Ｄ）に示すように、ハウジング２２ａの下面に傾斜面が形成されており、この傾斜面に、Ｂトリガースイッチ２６ｉが設けられる。
【００７１】
十字キー２６ａは、４方向プッシュスイッチであり、矢印で示す４つの方向、前（または上）、後ろ（または下）、右および左の操作部を含む。この操作部のいずれか１つを操作することによって、プレイヤによって操作可能なキャラクタまたはオブジェクト（プレイヤキャラクタまたはプレイヤオブジェクト）の移動方向を指示したり、カーソルの移動方向を指示したり、単に方向を指示したりすることができる。
【００７２】
１ボタン２６ｂおよび２ボタン２６ｃは、それぞれ、押しボタンスイッチである。たとえば３次元ゲーム画像を表示する際の視点位置や視点方向、すなわち仮想カメラの位置や画角を調整する等のゲームの操作に使用される。または、１ボタン２６ｂおよび２ボタン２６ｃは、Ａボタン２６ｄおよびＢトリガースイッチ２６ｉと同じ操作或いは補助的な操作をする場合に用いるようにしてもよい。
【００７３】
Ａボタンスイッチ２６ｄは、押しボタンスイッチであり、プレイヤキャラクタまたはプレイヤオブジェクトに、方向指示以外の動作、すなわち、打つ（パンチ）、投げる、つかむ（取得）、乗る、ジャンプするなどの任意のアクションをさせるために使用される。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かすなどを指示することができる。また、ロールプレイングゲーム（ＲＰＧ）やシミュレーションＲＰＧにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。また、Ａボタンスイッチ２６ｄは、コントローラ２２をポインティングデバイスとして用いる場合に、ゲーム画面上でポインタ（指示画像）が指示するアイコンないしボタン画像の決定を指示するために使用される。たとえば、アイコンやボタン画像が決定されると、これらに対応して予め設定されている指示ないし命令（コマンド）を入力することができる。
【００７４】
−ボタン２６ｅ、ＨＯＭＥボタン２６ｆ、＋ボタン２６ｇおよび電源スイッチ２６ｈもまた、押しボタンスイッチである。−ボタン２６ｅは、ゲームモードを選択するために使用される。ＨＯＭＥボタン２６ｆは、ゲームメニュー（メニュー画面）を表示するために使用される。＋ボタン２６ｇは、ゲームを開始（再開）したり、一時停止したりするなどのために使用される。電源スイッチ２６ｈは、ゲーム装置１２の電源を遠隔操作によってオン／オフするために使用される。
【００７５】
なお、この実施例では、コントローラ２２自体をオン／オフするための電源スイッチは設けておらず、コントローラ２２の入力手段２６のいずれかを操作することによってコントローラ２２はオンとなり、一定時間（たとえば、３０秒）以上操作しなければ自動的にオフとなるようにしてある。
【００７６】
Ｂトリガースイッチ２６ｉもまた、押しボタンスイッチであり、主として、弾を撃つなどのトリガを模した入力を行ったり、コントローラ２２で選択した位置を指定したりするために使用される。また、Ｂトリガースイッチ２６ｉを押し続けると、プレイヤオブジェクトの動作やパラメータを一定の状態に維持することもできる。また、一定の場合には、Ｂトリガースイッチ２６ｉは、通常のＢボタンと同様に機能し、Ａボタン２６ｄによって決定したアクションやコマンドなどを取り消すなどのために使用される。
【００７７】
また、図３（Ｅ）に示すように、ハウジング２２ａの後端面に外部拡張コネクタ２２ｂが設けられ、また、図３（Ｂ）に示すように、ハウジング２２ａの上面であり、後端面側にはインジケータ２２ｃが設けられる。外部拡張コネクタ２２ｂは、コントローラ２２とは異なる拡張コントローラ（図示せず）を接続するためなどに使用される。インジケータ２２ｃは、たとえば、４つのＬＥＤで構成される。たとえば、インジケータ２２ｃでは、４つのうちのいずれか１つを点灯させることにより、点灯したＬＥＤに応じて、コントローラ２２の識別情報（コントローラ番号）を示すことができる。また、インジケータ２２ｃでは、点灯させるＬＥＤの個数によってコントローラ２２の電池残量を示すこともできる。
【００７８】
さらに、コントローラ２２は、撮像情報演算部８０（図４参照）を有しており、図３（Ａ）に示すように、ハウジング２２ａの先端面には撮像情報演算部８０の光入射口２２ｄが設けられる。また、コントローラ２２は、スピーカ８６（図４参照）を有しており、このスピーカ８６は、図３（Ｂ）に示すように、ハウジング２２ａの上面であり、１ボタン２６ｂとＨＯＭＥボタン２６ｆとの間に設けられる音抜き孔２２ｅに対応して、ハウジング２２ａ内部に設けられる。
【００７９】
なお、図３（Ａ）ないし図３（Ｅ）に示したコントローラ２２の形状や、各入力手段２６の形状、数および設置位置等は単なる一例に過ぎず、それらが適宜改変された場合であっても、本発明を実現できることは言うまでもない。
【００８０】
図４（Ａ）は、図１に示したように、コントローラ２２にジャイロユニット２４を接続した状態を示す図解図である。ジャイロユニット２４は、コントローラ２２の後端面側（インジケータ２２ｃ側）に接続される。図４（Ｂ）に示すように、ジャイロユニット２４は、コントローラ２２と同様に、プラスチック成型によって形成されたハウジング２４ａを有している。ハウジング２４ａは、略立方体形状であり、コントローラ２２に接続される側の面に、コントローラ２２の外部拡張コネクタ２２ｂに接合される差し込みプラグ２４ｂが設けられる。また、図４（Ｃ）に示すように、この差し込みプラグ２４が設けられる面の反対側の面には、外部拡張コネクタ２４ｃが設けられる。
【００８１】
図５はコントローラ２２およびジャイロユニット２４の電気的な構成を示すブロック図である。この図５を参照して、コントローラ２２はプロセッサ７０を含み、このプロセッサ７０には、内部バス（図示せず）によって、外部拡張コネクタ２２ｂ、入力手段２６、メモリ７２、加速度センサ７４、無線モジュール７６、撮像情報演算部８０、ＬＥＤ８２（インジケータ２２ｃ）、バイブレータ８４、スピーカ８６および電源回路８８が接続される。また、無線モジュール７６には、アンテナ７８が接続される。
【００８２】
なお、簡単のため、図５では省略するが、上述したように、インジケータ２２ｃは４つのＬＥＤ８２によって構成される。
【００８３】
プロセッサ７０は、コントローラ２２の全体制御を司り、入力手段２６、加速度センサ７４および撮像情報演算部８０によって入力された情報（入力情報）を、入力データとして無線モジュール７６およびアンテナ７８を介してゲーム装置１２に送信（入力）する。このとき、プロセッサ７０は、メモリ７２を作業領域ないしバッファ領域として用いる。また、上述した入力手段２６（２６ａ−２６ｉ）からの操作信号（操作データ）は、プロセッサ７０に入力され、プロセッサ７０は操作データを一旦メモリ７２に記憶する。
【００８４】
加速度センサ７４は、コントローラ２２の縦方向（ｚ軸方向）、横方向（ｙ軸方向）および前後方向（ｘ軸方向）の３軸で各々の加速度を検出する。この加速度センサ７４は、典型的には、静電容量式の加速度センサであるが、他の方式のものを用いるようにしてもよい。
【００８５】
たとえば、加速度センサ７４は、第１所定時間毎に、ｘ軸，ｙ軸，ｚ軸の各々についての加速度（ａｘ，ａｙ，ａｚ）を検出し、検出した加速度のデータ（加速度データ）をプロセッサ７０に入力する。たとえば、加速度センサ７４は、各軸方向の加速度を、−２．０ｇ〜２．０ｇ（ｇは重力加速度である。以下、同じ。）の範囲で検出する。プロセッサ７０は、加速度センサ７４から与えられる加速度データを、第２所定時間毎に検出し、一旦メモリ７２に記憶する。
【００８６】
プロセッサ７０は、操作データ、加速度データ、後述するマーカ座標データおよび後述する角速度データの少なくとも１つを含む入力データを作成し、作成した入力データを、第３所定時間（たとえば、５ｍｓｅｃ）毎にゲーム装置１２に送信する。
【００８７】
なお、図３（Ａ）−図３（Ｅ）では省略したが、この実施例では、加速度センサ７４は、ハウジング２２ａ内部の基板上の十字キー２６ａが配置される付近に設けられる。
【００８８】
無線モジュール７６は、たとえばＢｌｕｅｔｏｏｔｈの技術を用いて、所定周波数の搬送波を入力データで変調し、その微弱電波信号をアンテナ７８から放射する。つまり、入力データは、無線モジュール７６によって微弱電波信号に変調されてアンテナ７８（コントローラ２２）から送信される。この微弱電波信号が上述したゲーム装置１２に設けられた無線コントローラモジュール５２によって受信される。受信された微弱電波は、復調および復号の処理を施され、したがって、ゲーム装置１２（ＣＰＵ４０）は、コントローラ２２からの入力データを取得することができる。そして、ＣＰＵ４０は、取得した入力データとアプリケーションプログラム（ゲームプログラム）とに従ってアプリケーションの処理（ゲーム処理）を行う。
【００８９】
さらに、上述したように、コントローラ２２には、撮像情報演算部８０が設けられる。この撮像情報演算部８０は、赤外線フィルタ８０ａ、レンズ８０ｂ、撮像素子８０ｃおよび画像処理回路８０ｄによって構成される。赤外線フィルタ８０ａは、コントローラ２２の前方から入射する光から赤外線のみを通過させる。上述したように、モニタ３４の表示画面近傍（周辺）に配置されるマーカ３４０ｍおよび３４０ｎは、モニタ３４の前方に向かって赤外光を出力する赤外ＬＥＤである。したがって、赤外線フィルタ８０ａを設けることによってマーカ３４０ｍおよび３４０ｎの画像をより正確に撮像することができる。レンズ８０ｂは、赤外線フィルタ８０ａを透過した赤外線を集光して撮像素子８０ｃへ出射する。撮像素子８０ｃは、たとえばＣＭＯＳセンサあるいはＣＣＤのような固体撮像素子であり、レンズ８０ｂによって集光された赤外線を撮像する。したがって、撮像素子８０ｃは、赤外線フィルタ８０ａを通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子８０ｃによって撮像された画像を撮像画像と呼ぶ。撮像素子８０ｃによって生成された画像データは、画像処理回路８０ｄで処理される。画像処理回路８０ｄは、撮像画像内における撮像対象（マーカ３４０ｍおよび３４０ｎ）の位置を算出し、第４所定時間毎に、当該位置を示す各座標値を撮像データ（後述するマーカ座標データ）としてプロセッサ７０に出力する。なお、画像処理回路８０ｄにおける処理については後述する。
【００９０】
また、コントローラ２２には、ジャイロユニット２４が接続される。図５からも分かるように、差し込みプラグ２４ｂは、外部拡張コネクタ２２ｂに接続される。差し込みプラグ２４ｂは信号線によって、マイコン９０に接続される。マイコン９０には、ジャイロセンサ９２が接続されるとともに、信号線によって外部拡張コネクタ２４ｃが接続される。
【００９１】
ジャイロセンサ９２は、コントローラ２２の縦方向の軸回り（ｚ軸回り）、横方向の軸回り（ｙ軸回り）および前後方向の軸回り（ｘ軸回り）の３軸回りについての各々の角速度を検出する。ただし、ｚ軸の回転はヨー角で表わされ、ｙ軸の回転はピッチ角で表わされ、そして、ｘ軸の回転はロール角で表わされる。このジャイロセンサ７４は、典型的には、圧電振動型のものを用いることができるが、他の方式のものを用いるようにしてもよい。
【００９２】
たとえば、ジャイロセンサ９２は、第４所定時間毎に、ｘ軸，ｙ軸，ｚ軸の各々についての角速度（ωｘ，ωｙ，ωｚ）を検出し、検出した角速度をマイコン９０に入力する。ただし、角速度は、マイコン９０に入力されるときに、アナログ信号からディジタルのデータに変換される。この実施例で使用するジャイロセンサ９２は、各軸についての角速度を０〜１５００ｄｐｓ（ｄｅｇｒｅｅ  ｐｅｒｃｅｎｔ  ｓｅｃｏｎｄ）の範囲で計測可能である。ただし、後述するこの実施例の仮想ゲームにおいては、ヨー角については、９００ｄｐｓ〜１５００ｄｐｓの範囲を計測範囲とし、ピッチ角とロール角とについては、０〜１５００ｄｐｓの範囲を計測範囲としてある。
【００９３】
マイコン９０は、ジャイロセンサ９２から与えられる角速度を第５所定時間毎に検出し、角速度に対応する角速度データをマイコン９０に内蔵されるメモリ（図示せず）に一時記憶する。そして、マイコン９０は、メモリに一時記憶された角速度データを第６所定時間毎にコントローラ２２（プロセッサ７０）に送信する。
【００９４】
なお、この実施例では、マイコン９０は、角速度データをメモリに一時記憶し、或る程度まとめてプロセッサ７０に送信するようにしてあるが、メモリに一時記憶せずに、そのままプロセッサ７０に送信するようにしてもよい。
【００９５】
図６は、コントローラ２２を用いてゲームプレイするときの状態を概説する図解図である。ただし、ゲームプレイのみならず、他のアプリケーションを実行したり、ＤＶＤを再生したりする場合も同様である。図６に示すように、ビデオゲームシステム１０でコントローラ２２を用いてゲームをプレイする際、プレイヤは、一方の手でコントローラ２２を把持する。厳密に言うと、プレイヤは、コントローラ２２の先端面（撮像情報演算部８０が撮像する光の入射口２２ｄ側）がマーカ３４０ｍおよび３４０ｎの方を向く状態でコントローラ２２を把持する。ただし、図１からも分かるように、マーカ３４０ｍおよび３４０ｎは、モニタ３４の画面の横方向と平行に配置されている。この状態で、プレイヤは、コントローラ２２が指示する画面上の位置を変更したり、コントローラ２２と各マーカ３４０ｍおよび３４０ｎとの距離を変更したりすることによってゲーム操作を行う。
【００９６】
なお、図６では分かり難いが、上述したジャイロユニット２４がコントローラ２２に接続される場合も同様である。
【００９７】
図７は、マーカ３４０ｍおよび３４０ｎと、コントローラ２２との視野角を説明するための図である。図７に示すように、マーカ３４０ｍおよび３４０ｎは、それぞれ、視野角θ１の範囲で赤外光を放射する。また、撮像情報演算部８０の撮像素子８０ｃは、コントローラ２２の視線方向を中心とした視野角θ２の範囲で入射する光を受光することができる。たとえば、マーカ３４０ｍおよび３４０ｎの視野角θ１は、共に３４°（半値角）であり、一方、撮像素子８０ｃの視野角θ２は４１°である。プレイヤは、撮像素子８０ｃが２つのマーカ３４０ｍおよび３４０ｎからの赤外光を受光することが可能な位置および向きとなるように、コントローラ２２を把持する。具体的には、撮像素子８０ｃの視野角θ２の中にマーカ３４０ｍおよび３４０ｎの少なくとも一方が存在し、かつ、マーカ３４０ｍまたは３４０ｎの少なくとも一方の視野角θ１の中にコントローラ２２が存在する状態となるように、プレイヤはコントローラ２２を把持する。この状態にあるとき、コントローラ２２は、マーカ３４０ｍおよび３４０ｎの少なくとも一方を検知することができる。プレイヤは、この状態を満たす範囲でコントローラ２２の位置および向きを変化させることによってゲーム操作を行うことができる。
【００９８】
なお、コントローラ２２の位置および向きがこの範囲外となった場合、コントローラ２２の位置および向きに基づいたゲーム操作を行うことができなくなる。以下では、上記範囲を「操作可能範囲」と呼ぶ。
【００９９】
操作可能範囲内でコントローラ２２が把持される場合、撮像情報演算部８０によって各マーカ３４０ｍおよび３４０ｎの画像が撮像される。すなわち、撮像素子８０ｃによって得られる撮像画像には、撮像対象である各マーカ３４０ｍおよび３４０ｎの画像（対象画像）が含まれる。図８は、対象画像を含む撮像画像の一例を示す図である。対象画像を含む撮像画像の画像データを用いて、画像処理回路８０ｄは、各マーカ３４０ｍおよび３４０ｎの撮像画像における位置を表す座標（マーカ座標）を算出する。
【０１００】
撮像画像の画像データにおいて対象画像は高輝度部分として現れるため、画像処理回路８０ｄは、まず、この高輝度部分を対象画像の候補として検出する。次に、画像処理回路８０ｄは、検出された高輝度部分の大きさに基づいて、その高輝度部分が対象画像であるか否かを判定する。撮像画像には、対象画像である２つのマーカ３４０ｍおよび３４０ｎに対応する画像３４０ｍ’および３４０ｎ’のみならず、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。高輝度部分が対象画像であるか否かの判定処理は、対象画像である画像３４０ｍ’および３４０ｎ’と、それ以外の画像とを区別し、対象画像を正確に検出するために実行される。具体的には、当該判定処理においては、検出された高輝度部分が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度部分が所定範囲内の大きさである場合には、当該高輝度部分は対象画像を表すと判定される。逆に、高輝度部分が所定範囲内の大きさでない場合には、当該高輝度部分は対象画像以外の画像を表すと判定される。
【０１０１】
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度部分について、画像処理回路８０ｄは当該高輝度部分の位置を算出する。具体的には、当該高輝度部分の重心位置を算出する。ここでは、当該重心位置の座標をマーカ座標と呼ぶ。また、重心位置は撮像素子８０ｃの解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子８０ｃによって撮像された撮像画像の解像度が１２６×９６であるとし、重心位置は１０２４×７６８のスケールで算出されるものとする。つまり、マーカ座標は、（０，０）から（１０２４，７６８）までの整数値で表現される。
【０１０２】
なお、撮像画像における位置は、撮像画像の左上を原点とし、下向きをＹ軸正方向とし、右向きをＸ軸正方向とする座標系（ＸＹ座標系）で表現されるものとする。
【０１０３】
また、対象画像が正しく検出される場合には、判定処理によって２つの高輝度部分が対象画像として判定されるので、２箇所のマーカ座標が算出される。画像処理回路８０ｄは、算出された２箇所のマーカ座標を示すデータを出力する。出力されたマーカ座標のデータ（マーカ座標データ）は、上述したように、プロセッサ７０によって入力データに含まれ、ゲーム装置１２に送信される。
【０１０４】
ゲーム装置１２（ＣＰＵ４０）は、受信した入力データからマーカ座標データを検出すると、このマーカ座標データに基づいて、モニタ３４の画面上におけるコントローラ２２の指示位置（指示座標）と、コントローラ２２からマーカ３４０ｍおよび３４０ｎまでの各距離とを算出することができる。具体的には、２つのマーカ座標の中点の位置から、コントローラ２２の向いている位置すなわち指示位置が算出される。また、撮像画像における対象画像間の距離が、コントローラ２２と、マーカ３４０ｍおよび３４０ｎとの距離に応じて変化するので、２つのマーカ座標間の距離を算出することによって、ゲーム装置１２はコントローラ２２と、マーカ３４０ｍおよび３４０ｎとの間の距離を把握できる。
【０１０５】
このようなゲームシステム１０を用いた仮想ゲームの一例を、図面を参照しながら説明することにする。この実施例では、仮想ゲームは、フライングディスクのような移動オブジェクトをプレイヤの操作に従って仮想空間内を移動させ、その移動オブジェクトを犬のようなノンプレイヤオブジェクトにキャッチさせて、その点数を競うものである。ただし、移動オブジェクトの移動のさせ方によって、ノンプレイヤオブジェクトが移動オブジェクトをキャッチできたり、キャッチできなかったりし、さらには、移動オブジェクトをキャッチした位置に応じて点数が変わったりする。
【０１０６】
なお、キャッチできない場合やキャッチできたがキャッチした位置が予め決められた範囲外である場合には、点数は加算されない。
【０１０７】
図９は上述した仮想ゲームのゲーム画面１００の一例を示す図解図である。この図９に示すゲーム画面１００では、犬（ノンプレイヤオブジェクト）１０２がその略中央に表示され、このノンプレイヤオブジェクト１０２は、フライングディスク（移動オブジェクト）１０４を銜えている。また、ノンプレイヤオブジェクト１０２および移動オブジェクト１０４の前面に、点線枠の表示領域１０６が設けられ、移動オブジェクト１０４をプレイヤないしプレイヤオブジェクト（図１０参照）に受け取らせることを通知するメッセージが表示される。さらに、ノンプレイヤオブジェクト１０２の左斜め上方には、移動オブジェクト１０４を投げる（移動させる）目標となる矢印形状の目標オブジェクト１０８が表示される。さらにまた、ゲーム画面１００に右下端部には、トータルスコアが表示される。
【０１０８】
この実施例では、メッセージをモニタ３４に表示して、コントローラ２２の操作によって図示しないマウスポインタのような指示画像を表示領域１０６上に合わせて、所定のボタン（たとえば、Ａボタン２６ｄ）を押す（オンする）と、後述するプレイヤオブジェクト１１０（図１０参照）がノンプレイヤオブジェクト１０２から移動オブジェクト１０４を受け取る。
【０１０９】
このように、ノンプレイヤオブジェクト１０２から移動オブジェクト１０４を受け取るようにするのは、ジャイロユニット２４が接続されたコントローラ２２を所持するプレイヤを、モニタ３４に正対させるとともに、移動オブジェクト１０４を投げる動作を開始するときの現実空間におけるコントローラ２２の位置および向き（姿勢）が所望の位置および所望の姿勢になるように誘導するためである。詳細な説明は省略するが、このときのコントローラ２２の位置および姿勢が基準の位置および基準の姿勢に決定され、これ以降では、次回ノンプレイヤオブジェクト１０２から移動オブジェクト１０４を受け取るための操作を実行するまでは、その基準の位置からの変位量に基づいて、３次元仮想空間内における移動オブジェクト１０４の位置が算出され、その基準の姿勢からの変化に基づいて、３次元空間内における移動オブジェクト１０４の姿勢が算出される。
【０１１０】
ここで、実際に人間がフライングディスクを投げる場合には、目標に対して正面を向いた後、フライングディスクを持った手ないし腕を体に巻きつけるように、正面から左または右に体を捻り、その状態から手ないし腕を伸ばしながら正面に体を戻すように動作する。このため、この実施例の仮想ゲームでは、フライングディスク（移動オブジェクト）１０４を投げる動作をする前のプレイヤが目標オブジェクト１０８すなわちモニタ３４（マーカ部３４ｂ）に体の正面を向けるように、メッセージを表示し、これをクリックすることにより、移動オブジェクト１０４を受け取るようにしてある。具体的には、プレイヤは、所持しているコントローラ２２の光入射口２２ｄをモニタ３４（マーカ部３４ｂ）側に向けるように、誘導される。
【０１１１】
ただし、一般的には、右手でフライングディスクを投げる場合には、人間は体を左方向に捻り、逆に、左手でフライングディスクを投げる場合には、人間は体を右方向に捻る。
【０１１２】
また、この実施例では、後述するように、コントローラ２２の上面が移動オブジェクト１０４の上面に対応し、コントローラ２２の姿勢（傾き）が移動オブジェクト１０４の姿勢（傾き）として表現される。
【０１１３】
図１０は、他のゲーム画面１５０の例を示す図解図である。この図１０に示すゲーム画面１５０では、その中央下部にプレイヤオブジェクト１１０が表示される。また、プレイヤオブジェクト１１０は、移動オブジェクト１０４を投げるために、体を左に捻っている状態である。図示は省略するが、ジャイロユニット２４が接続されたコントローラ２２を把持したプレイヤも同様の状態で操作している。また、プレイヤオブジェクト１１０の前方であり、ゲーム画面１５０の略中央には、目標オブジェクト１０８が表示される。さらに、ノンプレイヤオブジェクト１０２は、移動オブジェクト１０４を追跡するべく、プレイヤオブジェクト１１０の右側で、その移動オブジェクト１０４が移動を開始するのを待機している状態である。
【０１１４】
図１１は、その他のゲーム画面２００の例を示す図解図である。この図１１は、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げた直後の様子を示すゲーム画面２００が表示される。ゲーム画面２００では、プレイヤオブジェクト１１０がその略中央下部に表示され、このプレイヤオブジェクト１１０と重なるように、目標オブジェクト１０８が表示される。また、ノンプレイヤオブジェクト１０２は、プレイヤオブジェクト１１０の右側に表示され、移動オブジェクト１０４の追跡を開始した状態である。ただし、図１１では、移動オブジェクト１０４とプレイヤオブジェクト１１０とが重なり、プレイヤオブジェクト１１０が前面（プレイヤ側）に表示されるため、移動オブジェクト１０４は見えない。したがって、たとえば、プレイヤオブジェクト１１０を半透明や点線の外形線のみで示すことにより、移動オブジェクト１０４が見えるように表示してもよい。
【０１１５】
なお、図示は省略するが、プレイヤが、実際にフライングディスクを投げるように、ジャイロユニット２４が接続されたコントローラ２２を把持したままで、手や腕を振ることにより、後述するように、ジャイロデータが示す角速度の変化が所定の条件を満たすと、仮想ゲーム空間内の移動オブジェクト１０４は移動（飛行）を開始する。
【０１１６】
また、後で詳細に説明するが、移動オブジェクト１０４が移動（飛行）する場合には、仮想空間内に設定された重力、移動オブジェクト１０４の回転による揚力、移動オブジェク１０４の傾きによる空気抵抗力などの様々な力が作用するため、一定時間毎に移動オブジェクト１０４の位置およびその姿勢（傾き）が算出される。ただし、移動オブジェクト１０４の移動方向への初速度やその回転の初速度は、コントローラ２２で検出される加速度に基づいて算出される。詳細については、後述する。
【０１１７】
図１２は、さらに他のゲーム画面２５０の例を示す図解図である。この図１２は、プレイヤオブジェクト１１０が投げた移動オブジェクト１０４が目標オブジェクト１０８の近くまで移動し、その移動オブジェクト１０４をノンプレイヤオブジェクト１０２がキャッチしようとする様子を示す。具体的には、図１２に示すゲーム画面２５０では、その略中央に目標オブジェクト１０８が表示され、その右斜め下側に移動オブジェクト１０４が表示される。また、目標オブジェクト１０８の下側に、ノンプレイヤオブジェクト１０２が表示される。
【０１１８】
図１３は、他のゲーム画面３００の例を示す図解図である。この図１３は、プレイヤオブジェクト１１０が投げた移動オブジェクト１０４をノンプイレヤオブジェクト１０２がキャッチした直後の様子を示す。具体的には、図１３に示すゲーム画面３００では、その中央から左寄りに目標オブジェクト１０８が表示され、その中央から右寄りに移動オブジェクト１０４を銜えたノンプレイヤオブジェクト１０２が表示される。また、ゲーム画面３００の略中央には、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４をキャッチした位置を示すマーカ１１２が表示される。
【０１１９】
図１４は、その他のゲーム画面３５０の例を示す図解図である。この図１４は、今回の試技に対する得点（スコア）が決定される様子を示す。具体的には、ゲーム画面３５０の略中央に目標オブジェクト１０８が表示され、この目標オブジェクト１０８を中心とする円形の得点領域１１４が表示される。得点領域１１４は、３つの領域に分割されており、目標オブジェクト１０８を含む円形の領域１１４ａ、その外側に、２つのドーナツ状の領域１１４ｂ，１１４ｃが設けられる。得点は、目標オブジェクト１０８から離れるに従って低く設定される。この実施例では、得点領域１１４の３つの領域のうち、目標オブジェクト１０８を含む領域１１４ａについては１００点が割り当てられ、その領域１１４ａに隣接するドーナツ状の領域１１４ｂについては５０点が割り当てられ、さらにその領域１１４ｂに隣接するドーナツ状の領域１１４ｃについては１０点が割り当てられる。図１４に示す例では、領域１１４ａにマーカ１１２が示されているため、今回の得点（スコア）が１００点であることが分かる。
【０１２０】
なお、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４をキャッチした位置が得点領域１１４外である場合には、得点は加算されない。ただし、図示は省略するが、得点領域１１４よりも少し大きい円形ないし四角形の領域（判定領域）が設定されており、この判定領域外に移動オブジェクト１０４が落下（着地）する場合には、ノンプイレヤオブジェクト１０２は、当該移動オブジェクト１０４をキャッチしない。つまり、途中で追跡を止めたり、移動オブジェクトを追跡せずに、そのまま目標オブジェクト１０８向けて移動したりする。
【０１２１】
また、移動オブジェクト１０４を所定回数（たとえば、１０回）投げると、ゲームプレイが終了となる。この所定回数の試技についてのトータルスコアを他のプレイヤと競ったり、自身の前回までのトータルスコアの履歴と比較したりするのである。
【０１２２】
図１５は図２に示した内部メインメモリ４２ｅまたは外部メインメモリ４６のメモリマップを示す図解図である。図１５に示すように、メインメモリ（４２ｅ，４６）は、プログラム記憶領域５００およびデータ記憶領域５０２を含む。なお、データ記憶領域５０２の具体的な内容については、図１６に示す。プログラム記憶領域５００には、ゲームプログラムが記憶され、ゲームプログラムは、ゲームメイン処理プログラム５００ａ、画像生成プログラム５００ｂ、画像表示プログラム５００ｃ、角速度検出プログラム５００ｄ、加速度検出プログラム５００ｅ、ディスク位置決定プログラム５００ｆ、ディスク姿勢決定プログラム５００ｇ、ディスク投げ判定プログラム５００ｈ、投げシミュレーションプログラム５００ｉ、投げ実行プログラム５００ｊ、経路シミュレーションプログラム５００ｋおよび移動実行プログラム５００ｍなどによって構成される。
【０１２３】
ゲームメイン処理プログラム５００ａは、この実施例の仮想ゲームのメインルーチンを処理するためのプログラムである。画像生成プログラム５００ｂは、後述する画像データ５０２ａ（図１６参照）を用いて、モニタ３４にゲーム画面（１００，１５０，２００，２５０，３００，３５０など）を表示するためのゲーム画像を生成するプログラムである。画像表示プログラム５００ｃは、画像生成プログラム５００ｂに従って生成されたゲーム画像をゲーム画面（１００，１５０，２００，２５０，３００，３５０など）としてモニタ３４に表示するためのプログラムである。
【０１２４】
角速度検出プログラム５００ｄは、ジャイロセンサ９２で検出された角速度についての角速度データを検出するためのプログラムである。上述したように、角速度データは、コントローラ２２からの入力データに含まれているため、ＣＰＵ４０は、角速度検出プログラム５００ｄに従って、コントローラ２２からの入力データに含まれる角速度データを検出するのである。
【０１２５】
加速度検出プログラム５００ｅは、加速度センサ７４で検出された加速度についての加速度データを検出するためのプログラムである。上述したように、加速度データは、コントローラ２２からの入力データに含まれているため、ＣＰＵ４０は、加速度検出プログラム５００ｅに従って、コントローラ２２からの入力データに含まれる加速度データを検出するのである。
【０１２６】
ディスク位置決定プログラム５００ｆは、３次元仮想空間内における移動オブジェクト１０４の位置を決定するためのプログラムである。プレイヤオブジェクト１１０が移動オブジェクト１０４を投げる前では、ノンプレイヤオブジェクト１０２から移動オブジェクト１０４を受け取ったときの当該移動オブジェクト１０４の位置を基準位置として、角速度検出プログラム５００ｄに従って検出される角速度（ヨー角およびピッチ角）に応じて、プレイヤオブジェクト１１０の手や腕の動きとともに、移動オブジェクト１０４の位置が決定される。
【０１２７】
ディスク姿勢決定プログラム５００ｇは、３次元仮想空間内における移動オブジェクト１０４の姿勢を決定するためのプログラムである。プレイヤオブジェクト１１０が移動オブジェクト１０４を投げる前では、角速度検出プログラム５００ｄに従って検出された移動オブジェクト１０４の姿勢を決定する。また、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げた後では、上述した物理計算に従って変化される移動オブジェクト１０４の位置に応じた姿勢を決定する。このように、移動オブジェクト１０４の姿勢すなわち移動オブジェクト１０４の上面の傾きもまた、１フレーム（フレームは画面更新単位時間：１／６０（秒））毎に算出される。ただし、この実施例では、移動オブジェクト１０４は、フライングディスクであり、当該フライングディスクに垂直な軸周りに回転力が与えられるだけであるため、投げた後の移動オブジェクト１０４の姿勢はほとんど変化されない。しかし、移動オブジェクト１０４が、地面に落下したり、ノンプレイヤオブジェクト１０２によってキャッチされたりすると、その姿勢は変化される。
【０１２８】
図１７（Ａ）に示すように、移動オブジェクト１０４は、プレイヤオブジェクト１１０の胸部付近に中心点を設定し、プレイヤオブジェクト１１０の腕の長さや移動オブジェクト１０４の大きさ等によって決まる半径Ｒの球面上を移動する。つまり、球の中心点と移動オブジェクト１０４（の中心点）とを結ぶ線分（長さＲ）が、ジャイロセンサ９２によって検出される角速度（ヨー角およびピッチ角）に応じて変化される。ただし、基準位置と球の中心とを結ぶ線分が基準の線分であり、この基準の線分となす角度がヨー角およびピッチ角に基づいて決定されるのである。この実施例では、図１７（Ｂ）に示すように、垂直方向の角度αはジャイロセンサ９２で検出された角速度のピッチ角に基づいて決定される。また、図１８（Ａ）に示すように、水平方向の角度βはジャイロセンサ９２で検出された角速度のヨー角に基づいて決定される。ただし、角度αおよび角度βは基準の線分となす角である。
【０１２９】
ただし、図１７（Ｂ）に示すように、この実施例では、ピッチ角に基づく垂直方向の角度αについては、球の中心点を中心として、水平方向に対して上下に４５°を最大値としてある。これは、移動オブジェクト１０４が目標オブジェクト１０８に向けて移動することがあり得ない場合を、移動オブジェクト１０４を投げる前に排除するためであり、また、移動オブジェクト１０４がプレイヤオブジェクト１１０の頭や足に刺さってしまうような不都合な画像を表示しないようにするためでもある。同様に、図１８（Ａ）に示すように、この実施例では、ヨー角に基づく水平方向の角度βについては、球の中心点を中心として、移動オブジェクト１０４の移動方向に対して左右に１２０°を最大値としてある。これは、実際にフライングディスクを投げる場合に、人間が体を捻る角度を参考にして決定された値である。
【０１３０】
なお、図１７（Ａ）および（Ｂ）では、右手に移動オブジェクト１０４を把持したプレイヤオブジェクト１１０が上体を左に捻った様子を、プレイヤオブジェクト１１０の後方（背面側）から見た図の一例を示してある。また、図１８（Ａ）は、プレイヤオブジェクト１１０を上方から見た図（上面図）であり、図１７（Ａ），（Ｂ）と同様に、プレイヤオブジェクト１１０が上体を左に捻った様子を示してある。
【０１３１】
また、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げた後では、投げたときに算出された移動オブジェクト１０４の移動方向への初速度と、重力、空気抵抗力、揚力とに基づいて、移動オブジェクト１０４の位置および姿勢が決定される。つまり、通常の物理計算が行われる。ただし、移動オブジェクト１０４の移動方向は、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げたと判断されたときのコントローラ２２のロール角とピッチ角とで決まる当該移動オブジェクト１０４の姿勢（傾き）によって決定される。ここで、移動オブジェクト１０４の姿勢とは、移動方向に対する左右方向および前後方向の傾きを意味する。
【０１３２】
次に、移動オブジェクトの姿勢について具体的に説明する。プレイヤオブジェクト１１０が移動オブジェクト１０４を把持し、これを投げる前では、プレイヤオブジェクト１１０の腕の動きに応じて、移動オブジェクト１０４の姿勢が変化される。
【０１３３】
なお、上述したように、プイレヤオブジェクト１１０の腕の動きに応じて、移動オブジェクト１０４の位置も変化される。
【０１３４】
まず、図１７（Ｂ）に示す状態において、たとえば、プレイヤオブジェクト１１０が移動オブジェクト１０４を把持した腕を上げ下げすると、それに応じて、水平面に対する移動オブジェクト１０４の面が傾く。具体的には、プレイヤオブジェクト１１０が移動オブジェクト１０４をノンプレイヤオブジェクト１０２から受け取ったときの移動オブジェクト１０４の姿勢をその上面と水平面とが平行な状態とし、これを基準の姿勢として、ピッチ角に応じて、移動オブジェクト１０４の姿勢が変更される。つまり、プレイヤオブジェクト１１０の腕が半径Ｒの球面に従って移動するとき、プレイヤオブジェクト１１０は移動オブジェクト１０４をつかんだままの状態であるため、その動きに従って移動オブジェクト１０４の姿勢が変更されるのである。したがって、プレイヤオブジェクト１１０が腕を上げると、移動オブジェクト１０４の上面がプレイヤオブジェクト１１０の頭部側に向くように姿勢が変化され、逆に、プレイヤオブジェクト１１０が腕を下げると、移動オブジェクト１０４の下面がプレイヤオブジェクト１１０の足側に向くように姿勢が変化される。つまり、ピッチ角に応じて、プレイヤオブジェクト１１０が腕を上げ下げし、それによって、移動オブジェクト１０４の姿勢が変化するのである。
【０１３５】
また、図１７（Ｂ）に示す状態において、プレイヤオブジェクト１１０が移動オブジェクト１０４を把持している腕の手首を回転させると、腕の長手（長さ）方向についての軸回りについて、移動オブジェクト１０４の傾き（姿勢）が変化される。つまり、図１８（Ｂ）に示すように、ロール角に応じた回転角度γだけ、プレイヤオブジェクト１１０は手首を回転させ、それによって、移動オブジェクト１０４の姿勢が変化される。
【０１３６】
なお、図１８（Ｂ）は、図１７（Ａ），（Ｂ）に示したプレイヤオブジェクト１１０を側面側から見た図（側面図）である。
【０１３７】
また、詳細な説明は省略するが、上述したように、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げた後では、移動オブジェクト１０４の移動中の姿勢は、ほとんど変化されない。
【０１３８】
また、図１９（Ａ）に示す移動オブジェクト１０４の移動方向への初速度ｖａは、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げたと判断されたときに、コントローラ２２の加速度センサ７４によって検出される加速度に基づいて算出（決定）される。具体的には、図１７（Ｂ）に示すように、移動方向は、プレイヤオブジェクト１１０の胸部付近を中心とした半径Ｒの球表面上での接線方向の向きに決定され、移動速度の大きさは、３軸の加速度ベクトル（ａｘ，ａｙ，ａｚ）を合成した合成ベクトルの大きさの二乗に決定される。
【０１３９】
なお、この実施例では、移動オブジェクト１０４の初速度をコントローラ２２の加速度センサ７４によって検出される加速度に基づいて決定するようにしてあるが、これに限定される必要はない。ジャイロセンサ９２によって検出される角速度に基づいて決定することもできる。
【０１４０】
たとえば、初速度は、ヨー角方向の角速度のベクトルと、ピッチ角方向の角速度のベクトルであり、その大きさを０．６５倍にしたベクトルとの合成ベクトルの大きさに所定の係数を乗じて算出される。
【０１４１】
また、他の例によれば、初速度は、ヨー角方向の角速度のベクトルと、ピッチ角方向の角速度のベクトルであり、その大きさを０．６５倍にしたベクトルと、ロール角方向の角速度のベクトルであり、その大きさを０3倍にしたベクトルとの合成ベクトルの大きさに所定の係数を乗じて算出される。
【０１４２】
ただし、所定の係数は、上記いずれかの方法により、算出された合成ベクトルの大きさ（２．６〜４．５）の数値を、ゲーム処理に使用可能な数値（０．０１６２５ｍ／ｆ〜０．０２３５ｍ／ｆ）に収まるようにするための数値である。なお、ｍはメートルであり、ｆはフレームである。
【０１４３】
さらに、図１９（Ａ）に示す移動オブジェクト１０４の回転速度の初速度ｖｂは、移動オブジェクト１０４の移動方向への初速度ｖａに比例する値（たとえば、ｋ（ｋ≦１）倍される）で算出（設定）される。ただし、移動オブジェクト１０４の回転方向は、プレイヤオブジェクト１１０が体を左側に捻った後に、移動オブジェクト１０４を投げた場合には、右方向（時計周り）であり、逆に、プレイヤオブジェクト１１０が体を右側に捻った後に、移動オブジェクト１０４を投げた場合には、左方向（反時計回り）である。
【０１４４】
また、図示は省略するが、移動オブジェクト１０４が投げられた当初では、移動オブジェクト１０４の向きは、投げる直前における移動オブジェクト１０４の姿勢（傾き）で移動を開始する。つまり、移動オブジェクト１０４の上面の向きが決定される。
【０１４５】
その後、移動オブジェクト１０４には、重力、空気抵抗力、揚力などの力が作用し、投射された移動オブジェクト１０４の経路に影響を及ぼす。まず、移動オブジェクト１０４の水平方向に働く力として、空気抵抗力がある。図１９（Ｂ）および図１９（Ｃ）に示すように、空気抵抗力は、移動オブジェクト１０４の移動方向側から見た場合の垂直平面に形成される上面（または下面）の図形の面積の大きさに応じて決定される。具体的には、図１９（Ｂ）に示す例では、移動方向に前向きに角度φだけ傾いており、移動オブジェクト１０４の上面に空気抵抗を受けている。その空気抵抗の大きさは、図１９（Ｃ）に示す楕円形の面積に基づいて決定される。
【０１４６】
次に、移動オブジェクト１０４の垂直方向に働く力として、重力と揚力とがある。図２０（Ａ）に示すように、重力は、３次元仮想空間内に設定された重力加速度に基づく力であり、移動オブジェクト１０４に対して鉛直下向きに作用する。また、図２０（Ｂ）に示すように、揚力は、主として、移動オブジェクト１０４が回転することにより発生する移動オブジェクト１０４を上方に浮かせる力であり、移動オブジェクト１０４の回転軸に平行であり、移動オブジェクト１０４の下面側から上面側に向かう方向に作用する。したがって、移動オブジェクト１０４が移動方向に対して傾いている場合には、移動オブジェクト１０４は傾いている側に曲がるように移動することとなる。
【０１４７】
また、図示は省略するが、揚力は、移動オブジェクト１０４が地面近くを移動する場合には、回転のみならず、地面との間の圧力の高まり（地面効果）により発生する場合もある。かかる場合には、地面効果による揚力も作用するため、移動オブジェクト１０４は、ホップするように移動することになる。このことは、たとえば、移動オブジェクト１０４が水面近くを移動する場合も同じであり、かかる場合には、水面効果による揚力が発生する。
【０１４８】
図１５に戻って、ディスク投げ判定プログラム５００ｈは、フライングディスクすなわち移動オブジェクト１０４を投げるかどうかを判定するためのプログラムである。この実施例では、角速度検出プログラム５００ｄに従って検出された角速度データは、一定数（たとえば、２０個）の角速度についてのデータであり、この一定数の角速度に基づいて極値を検出し、当該極値が一定値（閾値）未満である場合に、移動オブジェクト１０４を投げる操作が有ると判定する。しかし、一定数の角速度に基づいて極値を検出できない場合や検出した極値が閾値以上である場合には、移動オブジェクト１０４を投げる操作が無いと判定する。
【０１４９】
このように、角速度の変化の極値を求めて移動オブジェクト１０４を投げるかどうかを判定するのは、上述したように、移動オブジェクト１０４を投げる場合には、プレイヤオブジェクト１１０（プレイヤ）は体を左方向または右方向に一旦捻るためである。
【０１５０】
なお、この実施例では、一定数の角速度を用いて極値を算出し、算出した極値が一定の閾値を下回る場合に、移動オブジェクト１０４を投げると判定するようにしたが、これに限定される必要はない。たとえば、角速度が一定の閾値を下回った場合に、移動オブジェクト１０４を投げると判定するようにしてもよい。かかる場合には、角速度を一定数記憶する必要がない。
【０１５１】
投げシミュレーションプログラム５００ｉは、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げると判定された場合に、移動オブジェクト１０４の移動経路をシミュレーションするためのプログラムである。たとえば、１フレーム毎の移動オブジェクト１０４の位置（３次元座標）が、上述したように、物理計算される。また、物理計算された位置に対応する移動オブジェクト１０４の姿勢が決定される。これは、移動オブジェクト１０４を追跡するように、ノンプレイヤオブジェクト１０２を移動させるためである。
【０１５２】
投げ実行プログラム５００ｊは、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げたと判定された場合に、移動オブジェクト１０４の移動経路を算出し、それに従って移動オブジェクト１０４を移動表示させるためのプログラムである。この投げ実行プログラム５００ｊは、投げシミュレーションプログラム５００ｉと略同じであるが、１フレーム毎に算出される３次元位置に、同じく１フレーム毎に決定される姿勢で、移動オブジェクト１０４を描画する。したがって、移動オブジェクト１０４が移動（飛行）する様子などがゲーム画面としてモニタ３４に表示されるのである。
【０１５３】
経路シミュレーションプログラム５００ｋは、ノンプレイヤオブジェクト１０２が移動する経路をシミュレーションするためのプログラムである。この実施例では、上述したように、ノンプレイヤオブジェクト１０２は、移動オブジェクト１０４を追跡するように、移動される。ただし、移動オブジェクト１０４が得点領域１１４から大幅にずれる場合には、ノンプレイヤオブジェクト１０２は移動オブジェクト１０４を追跡しないため、その経路は次のように決定される。
【０１５４】
ノンプレイヤオブジェクト１０２は、目標オブジェクト１０８に向かって略直進するように或る程度の距離を移動し、当該或る程度の距離を移動した後は、現在の移動オブジェクト１０４の位置を追いかけるように移動する。たとえば、或る程度の距離を移動すると、移動オブジェクト１０４の現在位置と、投げシミュレーションプログラム５００ｉに従って算出された移動オブジェクト１０４の落下位置との２点を結ぶ任意のベジエ曲線が算出される。そして、算出されたベジエ曲線上をノンプレイヤオブジェクト１０２が移動するように、１フレーム毎の位置（３次元座標）が算出される。
【０１５５】
移動実行プログラム５００ｍは、経路シミュレーションプログラム５００ｋに従って算出された経路上をノンプレイヤオブジェクト１０２が移動するように、その３次元位置を更新し、更新した３次元位置にノンプレイヤオブジェクト１０２を描画する。ただし、移動オブジェクト１０４を追跡し、さらには、移動オブジェクト１０４をキャッチするようにしてあるため、移動オブジェクト１０４が地面に落下する少し手前までのフレーム数で経路シミュレーションプログラム５００ｋに従って算出された経路が均等に分割され、フレーム毎の３次元位置が決定される。また、移動実行プログラム５００ｍは、ノンプレイヤオブジェクト１０２と移動オブジェクト１０４とが重なる位置で、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４をキャッチするように、ゲーム画像を生成する。ただし、この実施例では、ノンプレイヤオブジェクト１０２としての犬が、移動オブジェクト１０４としてのフライングディスクを口でキャッチするため、上述したように、地面に落下する少し手前で、ノンプレイヤオブジェクト１０２と移動オブジェクト１０４とが重なるようにしてある。
【０１５６】
また、この実施例では、試技が失敗であることを表現するために、移動オブジェクト１０４の落下位置が得点領域１１４外である場合には、たとえノンプレイヤオブジェクト１０２が移動オブジェクト１０４の近くまで追跡したとしても、キャッチしないようにしてある。しかし、これは一例であり、そのような場合であっても、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４をキャッチするようにしてもよい。
【０１５７】
なお、図示は省略するが、ゲームプログラムには、音出力プログラムやバックアッププログラムなども含まれる。音出力プログラムは、音（音楽）データを用いて、音楽（ＢＧＭ）、オブジェクトの音声ないし擬声音、効果音のようなゲームに必要な音を出力するためのプログラムである。バックアッププログラムは、ゲームデータ（途中データ，結果データ）をメモリカードにセーブ（保存）するためのプログラムである。
【０１５８】
また、図１６に示すように、データ記憶領域５０２には、画像データ５０２ａ、角速度データ５０２ｂ、加速度データ５０２ｃ、ノンプレイヤオブジェクトデータ５０２ｄおよび移動オブジェクトデータ５０２ｅが記憶される。また、データ記憶領域５０２には、タイマ５０２ｆおよび投げ判定フラグ５０２ｇが設けられる。
【０１５９】
画像データ５０２ａは、ゲーム画像を生成するための画像データであり、ポリゴンデータやテクスチャデータなどを含む。角速度データ５０２ｂは、角速度検出プログラム５００ｄに従って検出された角速度データである。上述したように、この角速度データ５０２ｂに基づいて、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４を投げたか否かを判定するため、少なくとも一定数（たとえば、２０個）の角速度についてのデータがデータ記憶領域５０２に一時記憶される。ただし、この実施例では、１フレーム毎に、３ないし４個の角速度データが検出される。加速度データ５０２ｃは、加速度検出プログラム５００ｅに従って検出された加速度データである。
【０１６０】
ノンプレイヤオブジェクトデータ５０２ｄは、ノンプレイヤオブジェクト１０２についてのデータであり、シミュレーション位置データ５０２０および現在位置データ５０２２を含む。シミュレーション位置データ５０２０は、経路シミュレーションプログラム５００ｋに従って算出された、ノンプレイヤオブジェクト１０２についての１フレーム毎の３次元座標のデータである。また、現在位置データ５０２２は、ノンプレイヤオブジェクト１０２の現フレームについての３次元座標のデータである。
【０１６１】
移動オブジェクトデータ５０２ｅは、移動オブジェクト１０４についてのデータであり、シミュレーション位置データ５０３０、現在位置データ５０３２、姿勢データ５０３４および物理量データ５０３６を含む。シミュレーション位置データ５０３０は、投げシミュレーションプログラム５００ｉに従って算出された、移動オブジェクト１０４についての１フレーム毎の３次元座標のデータである。現在位置データ５０３２は、移動オブジェクト１０４の現フレームについての３次元座標のデータである。姿勢データ５０３４は、現フレームにおける移動オブジェクト１０６の姿勢（傾き）についてのデータである。物理量データ５０３６は、現フレームにおいて移動オブジェクト１０４に作用する、重力、空気抵抗力、回転による揚力および平面効果による揚力についてのデータである。
【０１６２】
タイマ５０２ｆは、移動オブジェクト１０４が投げられてから、落下するまでにかかる時間をカウントするためのタイマである。このタイマ５０２ｆは、移動オブジェクト１０４が投げられたときに、リセット（カウント値＝０）およびスタートされ、フレーム毎にカウント値が１加算される。
【０１６３】
投げ判定フラグ５０２ｇは、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げるか否かを判定するためのフラグであり、たとえば、１ビットのレジスタで構成される。投げ判定フラグ５０２ｇがオン（成立）されると、レジスタにはデータ値「１」が設定され、投げ判定フラグ５０２ｇがオフ（不成立）されると、レジスタにはデータ値「０」が設定される。ただし、投げ判定フラグ５０２ｇのオン／オフは、ディスク投げ判定プログラム５００ｈに従って実行される。具体的には、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げると判定した場合には、投げ判定フラグ５０２ｇはオンされ、一方、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げないと判定した場合には、投げ判定フラグ５０２ｇはオフされる。
【０１６４】
なお、図示は省略するが、データ記憶領域５０２には、音データやスコアデータのような他のデータも記憶され、ゲームに必要な、他のタイマ（カウンタ）や他のフラグなども設けられる。
【０１６５】
具体的には、図２に示したＣＰＵ４０が図２１および図２２に示す全体処理を実行する。図２１に示すように、ＣＰＵ４０は、全体処理を開始すると、ステップＳ１で、初期化処理を実行する。ここでは、ＣＰＵ４０は、図９に示したゲーム画面１００を表示するためのゲーム画像を生成したり、角速度データ５０２ｂや加速度データ５０２ｃをクリアしたりする。
【０１６６】
次のステップＳ３では、ポインティングデバイスにより画面上のスイッチをオンしたかどうかを判断する。ここでは、ＣＰＵ４０は、プレイヤがコントローラ２２を用いて指示画像を移動させて、ゲーム画面１００の表示領域１０６をクリックしたかどうかを判断するのである。このような処理を実行するのは、上述したように、実空間内におけるコントローラ２２の位置および姿勢を所望の位置および姿勢に設定するとともに、３次元仮想空間内における移動オブジェクト１０４の位置および姿勢を所望の位置および所望の姿勢に設定するためである。つまり、３次元仮想空間内の移動オブジェクト１０４の位置および姿勢の初期化が行われる。
【０１６７】
ステップＳ３で“ＮＯ”であれば、つまりポインティングデバイスにより画面上のスイッチをオンしていなければ、同じステップＳ３に戻る。一方、ステップＳ３で“ＹＥＳ”であれば、つまりポインティングデバイスにより画面上のスイッチをオンしていれば、ステップＳ５で、ジャイロセンサ９２からの角速度データを取得する。つまり、ＣＰＵ４０は、コントローラ２２からの入力データに含まれる角速度データを検出する。
【０１６８】
続くステップＳ７では、ポインティングデバイスによる補正処理を実行する。簡単に説明すると、上述したように、撮像情報演算部８０によって各マーカ３４０ｍおよび３４０ｎの画像が撮像され、画像処理回路８０ｄは、撮影画像の全体におけるマーカ３４０ｍおよび３４０ｎの画像３４０ｍ´および３４０ｎ´の位置を表すマーカ座標を算出する。上記説明では省略したが、画像処理回路８０ｄは、撮影画像データとマーカ座標データとをプロセッサ７０に与える。したがって、入力データには、さらに撮影画像データが含まれるのである。そして、ＣＰＵ４０は、画像３４０ｍ´，３４０ｎ´のマーカ座標と、画像３４０ｍ´，３４０ｎ´の位置関係とから、プレイヤが把持しているコントローラ２２の姿勢（３次元仮想空間内における状態）を判断し、ジャイロセンサ９２からの角速度データに基づいて判断されるコントローラ２２の姿勢とのずれが有る場合に、ジャイロセンサ９２で検出される角速度データを補正するのである。具体的には、画像３４０ｍ´，３４０ｎ´のマーカ座標（位置）に基づいてヨー角を補正し、画像３４０ｍ´，３４０ｎ´の位置関係によりロール角を補正する。
【０１６９】
次のステップＳ９では、加速度センサ７４による補正処理を実行する。簡単に説明すると、加速度センサ７４からの加速度データに基づいてコントローラ２２の姿勢を判断し、ジャイロセンサ９２からの角速度データに基づいて判断されるコントローラ２２の姿勢とのずれが有る場合に、ジャイロセンサ９２で検出される角速度データを補正するのである。ただし、コントローラ２２を用いてゲーム操作等を行っている場合には、重力加速度以外の加速度が加味されるため、加速度センサ７４によって検出される加速度データが示す加速度の大きさが重力加速度の大きさに近いほど、加速度データが示す加速度の方向を重力加速度の方向に向けて補正を行う度合いを強め、重力加速度の大きさから離れるに従って補正の度合いを弱めて、所定の大きさを超えて重力加速度の大きさから離れると、補正を行わないようにしてある。
【０１７０】
続いて、ステップＳ１１では、ゼロ点補正処理を実行する。ここでは、ジャイロセンサ９２の温度ドリフトによるゼロ点を補正する。たとえば、加速度センサ７４からの加速度データに基づいてコントローラ２２が静止していることが分かる場合に、ジャイロセンサ９２からの角速度データによってコントローラ２２が動作していることが判断される場合には、ゼロ点にずれが生じていると判断することができる。具体的には、コントローラ２２を水平な状態で静止させている場合には、ｚ軸の鉛直下向きに重力加速度と同じ或いは略同じ大きさの加速度が検出される。つまり、加速度データに基づいて重力加速度と同じ或いは略同じ大きさの加速度が検出されている場合に、コントローラ２２が静止していると判断することができるのである。ゼロ点にずれが生じていると判断した場合には、現時点における角速度データをゼロ点に近づけるように補正が行われる。
【０１７１】
次のステップＳ１３では、ジャイロからのデータをバッファに蓄積する。つまり、ＣＰＵ４０は、ステップＳ５で取得した角速度データを順次データ記憶領域５０２に記憶（一時記憶）する。ただし、ステップＳ７，Ｓ９，Ｓ１１で補正処理が実行されている場合には、補正後の角速度データが記憶される。続くステップＳ１５では、フライングディスクすなわち移動オブジェクト１０４の位置および姿勢を決定する。つまり、ノンプレイヤオブジェクト１０２から移動オブジェクト１０４を受け取った時点における移動オブジェクト１０４の３次元位置を基準として、半径Ｒの球面上を移動するように、ジャイロセンサ９２からの角速度データが示すヨー角とピッチ角とに応じて、現在の３次元位置が決定（算出）される。
【０１７２】
また、ジャイロセンサ９２からの角速度データが示すロール角、ヨー角およびピッチ角に応じて、移動オブジェクト１０４の姿勢（傾き）も決定される。具体的には、プレイヤオブジェクト１１０が移動オブジェクト１０４をノンプレイヤオブジェクト１０２から受け取ったときの移動オブジェクト１０４の姿勢をその上面と水平面とが平行な状態とし、これを基準の姿勢として、ピッチ角に応じて、プレイヤオブジェクト１１０の腕が半径Ｒの球面に従って移動するときに、プレイヤオブジェクト１１０が移動オブジェクト１０４をつかんだままの状態で移動オブジェクト１０４の位置が変更される。したがって、プレイヤオブジェクト１１０が腕を上げると、移動オブジェクト１０４の上面がプレイヤオブジェクト１１０の頭部側に向くように姿勢が変化され、逆に、プレイヤオブジェクト１１０が腕を下げると、移動オブジェクト１０４の下面がプレイヤオブジェクト１１０の足側に向くように姿勢が変化される。つまり、ピッチ角に応じて、プレイヤオブジェクト１１０が腕を上げ下げし、それによって、移動オブジェクト１０４の姿勢の変化が表現される。また、ロール角に応じて、プレイヤオブジェクト１１０が手首を回転し、それによって、移動オブジェクト１０４の姿勢が変化される。
【０１７３】
続くステップＳ１７では、フライングディスクすなわち移動オブジェクト１０４を描画する。ここでは、ステップＳ１５で決定された位置に、決定された姿勢で、移動オブジェクト１０４が配置（描画）される。続いて、ステップＳ１９では、後述する投げ判定処理（図２３参照）を実行して、ステップＳ２１で、投げ判定フラグ５０２ｇがオンであるかどうかを判断する。ステップＳ２１で“ＮＯ”であれば、つまり投げ判定フラグ５０２ｇがオフであれば、そのままステップＳ５に戻って、コントローラ２２からの角速度データに従って、プレイヤオブジェクト１１０の動作およびプレイヤオブジェクト１１０が把持する移動オブジェクト１０４の位置および姿勢を更新する。一方、ステップＳ２１で“ＹＥＳ”であれば、つまり投げ判定フラグ５０２ｇがオンであれば、図２２に示すステップＳ２３に進む。
【０１７４】
図２２に示すように、ステップＳ２３では、後述する投げシミュレーション処理（図２４参照）を実行する。つまり、プレイヤの操作に基づいて、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げた後の移動オブジェクト１０４の移動経路をシミュレーションにより求める。図示は省略するが、投げシミュレーション処理が開始されたとき、タイマ５０２ｆがリセットおよびスタートされる。続くステップＳ２５では、落下点、もしくはキャッチ点の３次元位置を取得するとともに、そのときの時間を取得する。ただし、時間は、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げてから、地面に落下するまでの時間またはノンプレイヤオブジェクト１０２によってキャッチされるまでの時間を意味する。
【０１７５】
なお、この実施例では、移動オブジェクト１０４の落下地点が、得点領域１１４内である場合に、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４をキャッチすると判断するようにしてある。
【０１７６】
続くステップＳ２７では、追跡シミュレーション処理を実行する。上述したように、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４をキャッチする場合には、つまり移動オブジェクト１０４が得点領域１１４内に落下する場合には、ノンプレイヤオブジェクト１０２は、或る程度目標オブジェクト１０８に向けて直進した後、移動オブジェクト１０４を追跡するように、移動する。ＣＰＵ４０は、このような移動経路を決定して、決定した経路を、ステップＳ２５で取得した時間（フレーム数）で均等に分割し、フレーム毎の３次元位置を取得する。このフレーム毎の３次元位置のデータがシミュレーション位置データ５０２０である。
【０１７７】
追跡シミュレーション処理を実行すると、ステップＳ２９で、後述する投げ処理（図２５参照）を実行する。つまり、実際に、移動オブジェクト１０４を３次元仮想空間内で移動させ、その様子のゲーム画像を生成し、ゲーム画面（２００，２５０，３００など）を表示する。続くステップＳ３１では、犬挙動処理を実行する。つまり、ＣＰＵ４０は、ステップＳ２７で得られたシミュレーション位置データ５０２０に従ってノンプレイヤオブジェクト１０２を移動させる。また、ＣＰＵ４０は、移動オブジェクト１０４をキャッチするべきタイミングであれば、移動オブジェクト１０２をキャッチするように、ノンプレイヤオブジェクト１０２をアニメーション表示する。
【０１７８】
なお、投げシミュレーションにより、何フレーム目で移動オブジェクト１０２が落下またはキャッチされるかを予め知ることができるため、それによって、移動オブジェクト１０４をキャッチするべきタイミングであることが分かる。
【０１７９】
そして、ステップＳ３３では、犬がフライングディスクをキャッチしたか、または落したかを判断する。つまり、移動オブジェクト１０４がノンプレイヤオブジェクト１０２にキャッチされたり、移動オブジェクト１０４がノンプレイヤオブジェクト１０２にキャッチされずに、地面に落下して移動オブジェクト１０４の移動が停止したりしたかを判断する。
【０１８０】
なお、後述するように、この実施例では、移動オブジェクト１０４の移動速度ｖａが０になるか、移動オブジェクト１０４が地面に所定回数（たとえば、５００回）当たると、移動オブジェクト１０４が地面に落下したと判断するようにしてある。ただし、移動オブジェクト１０４と地面との当たり判定は、毎フレーム行われる。
【０１８１】
ステップＳ３３で“ＮＯ”であれば、つまり犬がフライングディスクをキャッチしたり、落としたりしていなければ、そのままステップＳ２９に戻る。一方、ステップＳ３３で“ＹＥＳ”であれば、つまり犬がフライングディスクをキャッチしたり、落としたりすれば、ステップＳ３５で、得点表示を実行する。ここでは、ノンプレイヤオブジェクト１０２が移動オブジェクト１０４をキャッチした場合には、キャッチした位置（得点領域１１４（１１４ａ−１１４ｃ））に応じた得点が表示され、ノンプレイヤオブジェクト１０２が移動オブジェクト１０２をキャッチしていない場合には、０点が表示される。
【０１８２】
そして、ステップＳ３７では、１０回投げたかどうかを判断する。ステップＳ３７で“ＮＯ”であれば、つまり１０回投げていなければ、次の試技を行うと判断して、図２１に示したステップＳ３に戻る。一方、ステップＳ３７で“ＹＥＳ”であれば、つまり１０回投げれば、そのまま全体処理を終了する。
【０１８３】
図２３は、図２１に示したステップＳ１９の投げ判定処理のフロー図である。図２３に示すように、ＣＰＵ４０は投げ判定処理を開始すると、ステップＳ５１で、投げ判定フラグ５０２ｇをオフする。次のステップＳ５３では、変数ｎにバッファ内の角速度データ５０２ｂの総数を設定し、最小値ｍｉｎに初期値「０」を設定する。ここで、変数ｎは、データ記憶領域５０２に記憶されている角速度データ５０２ｂの個数である。また、最小値ｍｉｎは、角速度データ５０２ｂが示すヨー角の角速度の最小値である。続いて、ステップＳ５５で、最も古い角速度データを読み込む。つまり、データ記憶領域５０２に記憶されている角速度データ５０２ｂのうち、最も古い角速度データ５０２ｂが読み込まれる。そして、ステップＳ５７で、読み込んだ角速度データ５０２ｂが示すヨー角の角速度を、変数ｄａｔａに設定する。
【０１８４】
次のステップＳ５９では、フライングディスクが左側にあるかどうかを判断する。つまり、ステップＳ１５で決定した移動オブジェクト１０４の位置が、プレイヤオブジェクト１１０から目標オブジェクト１０８を見た正面方向に対して左側であるかどうかを判断する。具体的には、プレイヤオブジェクト１１０の中心から左方向に延びるベクトルと、プレイヤオブジェクト１１０の中心から移動オブジェクト１０４の中心に延びるベクトルとが成す角度が９０度未満であるかどうかを判断する。
【０１８５】
ステップＳ５９で“ＹＥＳ”であれば、つまりフライングディスクが左側にある場合には、そのままステップＳ６３に進む。一方、ステップＳ５９で“ＮＯ”であれば、つまりフライングディスクが右側にある場合には、ステップＳ６１で、変数ｄａｔａの符号を反転させて、ステップＳ６３に進む。なお、ステップＳ６１の処理を行うのは、フライングディスク（移動オブジェクト１０４）がプレイヤオブジェクト１１０の左側にある場合と右側にある場合とで、ステップＳ６３以降の処理を共通にするためである。
【０１８６】
ステップＳ６３では、変数ｄａｔａが最小値ｍｉｎ未満であるかどうかを判断する。ステップＳ６３で“ＮＯ”であれば、つまり変数ｄａｔａが最小値ｍｉｎ以上であれば、ステップＳ７３に進む。一方、ステップＳ６３で“ＹＥＳ”であれば、つまり変数ｄａｔａが最小値ｍｉｎ未満であれば、ステップＳ６５で、最小値ｍｉｎに変数ｄａｔａを設定し、つまり最小値ｍｉｎを更新して、ステップＳ６７で、変数ｎをデクリメントする（ｎ＝ｎ−１）。次のステップＳ６９では、変数ｎが０以下であるかどうかを判断する。つまり、バッファに記憶されたすべての角速度データについて処理を実行したかどうかを判断するのである。
【０１８７】
ステップＳ６９で“ＹＥＳ”であれば、つまり変数ｎが０以下であれば、そのまま図２１および図２２に示した全体処理にリターンする。一方、ステップＳ６９で“ＮＯ”であれば、つまり変数ｎが０よりも大きければ、ステップＳ７１で、次の（次に古い）角速度データ５０２ｂを読み込み、ステップＳ５７に戻る。
【０１８８】
また、ステップＳ７３では、変数ｄａｔａが閾値未満であるかどうかを判断する。ここで、閾値は、プレイヤがコントローラ２２を用いて移動オブジェクト１０４を投げる操作を実行したかどうかを判断するための値であり、実験等により経験的に得られる数値である。ステップＳ７３で“ＮＯ”であれば、つまり変数ｄａｔａが閾値以上であれば、投げる操作では無いと判断して、ステップＳ６７に進む。一方、ステップＳ７３で“ＹＥＳ”であれば、つまり変数ｄａｔａが閾値未満であれば、ステップＳ７５で、投げ判定フラグ５０２ｇをオンして、全体処理にリターンする。
【０１８９】
図２４は、図２２に示したステップＳ２３の投げシミュレーション処理のフロー図である。図２４に示すように、ＣＰＵ４０は投げシミュレーション処理を開始すると、ステップＳ８１で、ディスクの位置によって、補正を掛ける。ここでは、投げ判定処理によって移動オブジェクト１０４を投げることが判定されたときに、当該移動オブジェクト１０４の移動開始の時間を補正したり、移動方向を補正したりする。具体的には、移動オブジェクト１０４が、プレイヤオブジェクト１１０の真横の位置よりも後ろ（目標オブジェクト１０８とは反対）側にある場合には、移動開始の時間を遅らせるようにしてある。また、プレイヤオブジェクト１１０が移動オブジェクト１０４を投げた位置が、当該プレイヤオブジェクトの真横の位置よりも一定以上前である場合には、決まった角度から移動開始するように、移動オブジェクト１０４の移動速度ｖａの初速度の最初の方向が修正される。
【０１９０】
続くステップＳ８３では、移動速度ｖａの初速度を設定する。上述したように、移動速度ｖａの初速度の向きは、半径Ｒの球面上の接線方向であり、その大きさは、加速度センサ７４によって検出された加速度データが示す３軸方向の加速度ベクトルの合成ベクトルについての大きさの二乗で決定される。続くステップＳ８５では、初期面の向きを設定する。つまり、移動オブジェクト１０４の初期の姿勢が設定される。これは、上述したように、角速度センサ９２によって検出されたロール角とピッチ角についての角速度に応じて決定される。そして、ステップＳ８７では、初期回転速度ｖｂを設定する。上述したように、初期の回転速度ｖｂは、移動速度ｖａの初速度に比例する値である。
【０１９１】
そして、ステップＳ８９では、後述する物理挙動処理（図２６参照）を実行し、ステップＳ９１で、フライングディスクの位置および姿勢を決定して、ステップＳ９３で、フライングディスクが落下したかどうかを判断する。ここでは、移動オブジェクト１０４が地面（地形）に当ったかどうかを判断する。
【０１９２】
ステップＳ９３で“ＮＯ”であれば、つまりフライングディスクが落下していないと判断されれば、ステップＳ８９に戻る。一方、ステップＳ９３で“ＹＥＳ”であれば、つまりフライングディスクが落下したと判断されれば、ステップＳ９５で、フライングディスクが止まったかどうかを判断する。ここでは、移動オブジェクト１０４の移動速度ｖａが０になったり、移動オブジェクト１０４が地面に当たった回数が所定回数（５００回）を超えたりしたかどうかを判断する。ただし、移動オブジェクト１０４が地面に当たった回数は、図示しないカウンタによってカウントされる。
【０１９３】
ステップＳ９５で“ＮＯ”であれば、つまりフライングディスクが止まっていなければ、そのままステップＳ８９に戻る。一方、ステップＳ９５で“ＹＥＳ”であれば、つまりフライングディスクが止まっていれば、図２１および図２２に示した全体処理にリターンする。
【０１９４】
図２５は、図２２に示したステップＳ２９の投げ処理のフロー図である。この投げ処理は、ディスクの位置および姿勢を決定した後に、実際にディスク（移動オブジェクト１０４）を描画する処理（ディスク描画処理（Ｓ１１３））が実行される以外は、図２４に示した投げシミュレーション処理と同じであるため、重複した説明は省略する。
【０１９５】
図２６は、図２４のステップＳ８９および図２５のステップＳ１０９に示した物理挙動処理のフロー図である。図２６に示すように、ＣＰＵ４０は物理挙動処理を開始すると、ステップＳ１３１で、重力を加える。つまり、３次元仮想空間において、移動オブジェクト１０４に対して鉛直下向きの重力を作用させる。続くステップＳ１３３では、回転による揚力を加える。つまり、移動オブジェクト１０４が回転する回転軸の方向であり、移動オブジェクト１０４の上面側に向かう方向に、回転速度Ｖｂに比例した力を、移動オブジェクト１０４に作用させる。
【０１９６】
次に、ステップＳ１３５では、空気抵抗力を加える。つまり、移動オブジェクト１０４の移動速度Ｖａとは逆向きに、移動速度Ｖａを二乗した値に、速度方向の正面から見た移動オブジェクト１０４の面積に比例する値を掛けた力を作用させる。そして、ステップＳ１３７では、地面からの揚力を加えて、図２４に示した投げシミュレーション処理または図２５に示した投げ処理にリターンする。つまり、ステップＳ１３７では、地面の法線の向き（地面から鉛直上方）に、地面に水平で、地面に近いほど大きい力を、移動オブジェクト１０４に作用させる。たとえば、地面からの揚力は、移動オブジェクト１０４と地面との距離および移動オブジェクト１０４の傾きに応じて決定されており、現在の位置と姿勢とに応じた揚力を移動オブジェクト１０４に加えているのである。
【０１９７】
この実施例によれば、ジャイロユニットが接続されたコントローラの姿勢およびそれを振る操作に応じて、３次元仮想空間内のオブジェクトの位置および姿勢ならびに動作を制御することができるので、簡単な操作により、多彩な処理を実行することができる。
【０１９８】
なお、この実施例では、コントローラにジャイロユニット（ジャイロセンサ）を接続するようにしたが、ジャイロセンサをコントローラに内蔵するようにしてもよい。
【０１９９】
また、この実施例では、コントローラの位置および姿勢を検出するために、ジャイロセンサを用いるようにしたが、ジャイロセンサに代えて、地磁気センサを用いることもできる。また、このようなセンサを用いずに、モーションキャプチャシステムによって、コントローラの位置および姿勢を検出することも可能である。つまり、コントローラの位置および姿勢を検出することができるものであれば、他のものを採用することが可能である。
【０２００】
さらに、この実施例では、コントローラの位置および姿勢によって、移動オブジェクトの位置および姿勢を制御するようにしたが、これに限定される必要はない。たとえば、コントローラが指示する画面上の位置（マウスポインタのような指示画像の位置）に基づいて移動オブジェクトの位置および姿勢を制御するようにしてもよい。かかる場合には、コントローラの指示位置を検出することにより、間接的にその位置および姿勢を検出していると考えることができる。上述の実施例の仮想ゲームについて言えば、指示画像を画面の中央から左方向（または右方向）に移動させると、移動オブジェクトを持つプレイヤオブジェクトが左方向（または右方向）に体を捻る。また、指示画像が画面の中央から上下方向に移動されると、移動オブジェクトを持っている腕が上下される。つまり、移動オブジェクトの姿勢が変化される。かかる場合には、指示画像の一定時間当たりの移動量（変位量）が一定値以上である場合に、移動オブジェクトを投げたと判断するようにすればよい。ただし、実施例の構成に限定される必要は無く、コントローラ側に赤外ＬＥＤを設け、モニタの近傍に（上に）撮像情報演算部を設けて、この撮像情報演算部をゲーム装置に接続するようにしてもよい。
【０２０１】
さらにまた、この実施例では、現実空間におけるコントローラの位置や姿勢によって、３次元仮想空間における移動オブジェクトの位置や姿勢を制御するようにしたが、３次元仮想空間における仮想カメラのような他のオブジェクトを制御するようにしてもよい。たとえば、仮想カメラを制御する場合には、コントローラの姿勢により、仮想カメラのパン、チルト、ロールを制御し、コントローラを振ることによって、ジャイロセンサで検出される角速度が一定の閾値を超えたときに、仮想カメラのシャッタをオンすることができる。ただし、ロール動作に代えて、ズーム動作を制御するようにしてもよい。
【図面の簡単な説明】
【０２０２】
【図１】図１はこの発明のゲームシステムの一実施例を示す図解図である。
【図２】図２は図１に示すゲームシステムの電気的な構成を示すブロック図である。
【図３】図３は図１に示すコントローラの外観を説明するための図解図である。
【図４】図４は図１に示すジャイロユニットを接続したコントローラおよびジャイロユニットの外観を説明するための図解図である。
【図５】図５は図１に示すジャイロユニットが接続されたコントローラの電気的な構成を示すブロック図である。
【図６】図６は図１に示すジャイロユニットが接続されたコントローラを用いてゲームプレイするときの状態を概説するための図解図である。
【図７】図７は図１に示すマーカおよびコントローラの視野角を説明するための図解図である。
【図８】図８は対象画像を含む撮像画像の一例を示す図解図である。
【図９】図９は図１に示すモニタに表示される第１のゲーム画面の例を示す図解図である。
【図１０】図１０は図１に示すモニタに表示される第２のゲーム画面の例を示す図解図である。
【図１１】図１１は図１に示すモニタに表示される第３のゲーム画面の例を示す図解図である。
【図１２】図１２は図１に示すモニタに表示される第４のゲーム画面の例を示す図解図である。
【図１３】図１３は図１に示すモニタに表示される第５のゲーム画面の例を示す図解図である。
【図１４】図１４は図１に示すモニタに表示される第６のゲーム画面の例を示す図解図である。
【図１５】図１５は図２に示すメインメモリのメモリマップを示す図解図である。
【図１６】図１６は図１５に示すデータ記憶領域の具体例を示す図解図である。
【図１７】図１７は移動オブジェクトの位置および姿勢を決定する方法を説明するための図解図である。
【図１８】図１８は移動オブジェクトの位置および姿勢を決定する方法を説明するための図解図である。
【図１９】図１９は移動オブジェクトの移動速度および回転速度ならびに移動オブジェクトに作用する力の例を示す図解図である。
【図２０】図２０は移動オブジェクトに作用する力の他の例を示す図解図である。
【図２１】図２１は図２に示すＣＰＵの全体処理の一部を示すフロー図である。
【図２２】図２２は図２に示すＣＰＵの全体処理の他の一部であって、図２１に後続するフロー図である。
【図２３】図２３は図２に示すＣＰＵの投げ判定処理を示すフロー図である。
【図２４】図２４は図２に示すＣＰＵの投げシミュレーション処理を示すフロー図である。
【図２５】図２５は図２に示すＣＰＵの投げ処理を示すフロー図である。
【図２６】図２６は図２に示すＣＰＵの物理挙動処理のフロー図である。
【符号の説明】
【０２０３】
１０  …ゲームシステム
１２  …ゲーム装置
１８  …光ディスク
２２  …コントローラ
２４  …ジャイロユニット
２６  …入力手段
３４  …モニタ
３４ａ  …スピーカ
４０  …ＣＰＵ
４２  …システムＬＳＩ
４２ａ  …入出力プロセッサ
４２ｂ  …ＧＰＵ
４２ｃ  …ＤＳＰ
４２ｄ  …ＶＲＡＭ
４２ｅ  …内部メインメモリ
４４  …フラッシュメモリ
４６  …外部メインメモリ
４８  …ＲＯＭ／ＲＴＣ
５０  …無線通信モジュール
５２  …無線コントローラモジュール
５４  …ディスクドライブ
５６  …ＡＶ  ＩＣ
５８  …ＡＶコネクタ
６０  …拡張コネクタ
６２  …メモリカード用コネクタ
７０  …プロセッサ
７４  …加速度センサ
８０  …画像情報演算部
８０ｃ  …撮像素子
８０ｄ  …画像処理回路
９０  …マイコン
９２  …ジャイロセンサ
【図１】
2010012041.tif 000003
【図２】
2010012041.tif 000004
【図３】
2010012041.tif 000005
【図４】
2010012041.tif 000006
【図５】
2010012041.tif 000007
【図６】
2010012041.tif 000008
【図７】
2010012041.tif 000009
【図８】
2010012041.tif 000010
【図９】
2010012041.tif 000011
【図１０】
2010012041.tif 000012
【図１１】
2010012041.tif 000013
【図１２】
2010012041.tif 000014
【図１３】
2010012041.tif 000015
【図１４】
2010012041.tif 000016
【図１５】
2010012041.tif 000017
【図１６】
2010012041.tif 000018
【図１７】
2010012041.tif 000019
【図１８】
2010012041.tif 000020
【図１９】
2010012041.tif 000021
【図２０】
2010012041.tif 000022
【図２１】
2010012041.tif 000023
【図２２】
2010012041.tif 000024
【図２３】
2010012041.tif 000025
【図２４】
2010012041.tif 000026
【図２５】
2010012041.tif 000027
【図２６】
2010012041.tif 000028