(57)【要約】【課題】ジャイロ信号から高い精度で姿勢を算出することのできる情報処理プログラムおよび情報処理装置を提供すること。【解決手段】第１の姿勢算出手段で、動き検出センサを備えた入力装置から出力される動き検出信号に基づいて入力装置自体の姿勢を示す第１の姿勢を算出する。動き算出手段で、第１の姿勢の動きを算出する。接近動作判定手段で、動き算出手段によって算出された第１の姿勢の動きが所定の姿勢に近づく動きか否かを判定する。入力姿勢設定手段で、第１の姿勢の動きが所定の姿勢に近づく動きであれば第１の姿勢を補正した姿勢を入力姿勢として設定し、近づく動きでないときは第１の姿勢を入力姿勢として設定する。処理実行手段で、入力姿勢に基づいて所定の情報処理を行う。【選択図】図１６
2010020554.tif 000002
【特許請求の範囲】
【請求項１】
自身の動きを検出する動き検出センサを備えた入力装置から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置のコンピュータに実行させる情報処理プログラムであって、
前記コンピュータを、
前記動き検出信号に基づいて前記入力装置の姿勢を示す第１の姿勢を繰り返し算出する第１の姿勢算出手段と、
前記第１の姿勢算出手段によって繰り返し算出された第１の姿勢に基づいて当該第１の姿勢の動きを算出する動き算出手段と、
前記動き算出手段によって算出された前記第１の姿勢の動きに基づいて、当該第１の姿勢が所定の姿勢に近づく動きをしているか否かを判定するための接近動作判定手段と、
前記第１の姿勢が前記所定の姿勢に近づく動きをしていれば、当該第１の姿勢を前記所定の姿勢方向に一致するように、あるいは、近づくように補正した姿勢を入力姿勢として設定し、近づく動きでなければ前記第１の姿勢を入力姿勢として設定する入力姿勢設定手段と、
前記入力姿勢に基づいて所定の情報処理を行う処理実行手段として機能させる、情報処理プログラム。
【請求項２】
前記動き算出手段は、前記第１の姿勢算出手段によって繰り返し算出された第１の姿勢の変化に基づいて当該第１の姿勢の移動ベクトルを算出する移動ベクトル算出手段を含み、
前記接近動作判定手段は、前記移動ベクトルに基づいて前記第１の姿勢の動きが前記所定の姿勢に近づく動きか否かを判定する、請求項１に記載の情報処理プログラム。
【請求項３】
前記情報処理プログラムは、前記コンピュータに、前記第１の姿勢と関連する所定の姿勢である第２の姿勢を算出する第２の姿勢算出手段として更に機能させ、
前記第２の姿勢を前記所定の姿勢として用いる、請求項２に記載の情報処理プログラム。
【請求項４】
前記第２の姿勢算出手段は、前記第１の姿勢に徐々に近づいていくような姿勢である追従姿勢を前記第２の姿勢として算出する、請求項３に記載の情報処理プログラム。
【請求項５】
前記動き算出手段は、
前記追従姿勢が前記第１の姿勢に向かうベクトルである追従ベクトルを算出する追従ベクトル算出手段を含み、
前記接近動作判定手段は、前記移動ベクトルと前記追従ベクトルとの成す角度に基づいて前記第１の姿勢が前記第２の姿勢に近づく動きをしているか否かを判定する、請求項４に記載の情報処理プログラム。
【請求項６】
前記接近動作判定手段は、
前記移動ベクトルと前記追従ベクトルとの内積を算出する内積算出手段を含み、
当該内積算出手段で算出された内積に基づいて前記第１の姿勢が前記第２の姿勢に近づく動きをしているか否かを判定する、請求項５に記載の情報処理プログラム。
【請求項７】
前記入力姿勢設定手段は、
前記所定の姿勢を基準とした座標系における前記第１の姿勢を示す第３の姿勢を算出する第３の姿勢算出手段を含み、
前記第１の姿勢が前記所定の姿勢に近づく動きをしていれば、当該所定の姿勢を第１の姿勢に近づけてから前記第３の姿勢を算出して前記入力姿勢として設定し、近づく動きでなければ、当該所定の姿勢を動かさずに第３の姿勢を算出して前記入力姿勢として設定する、請求項１に記載の情報処理プログラム。
【請求項８】
前記入力姿勢設定手段は、
予め定められた姿勢である基本姿勢を基準とした座標系における前記第３の姿勢を示す第４の姿勢を算出する第４の姿勢算出手段を含み、
当該第４の姿勢を前記入力姿勢として設定する、請求項７に記載の情報処理プログラム。
【請求項９】
前記情報処理プログラムは、前記コンピュータに、前記第１の姿勢と関連する所定の姿勢である第２の姿勢を算出する第２の姿勢算出手段として更に機能させ、
前記第２の姿勢を前記所定の姿勢として用いる、請求項１に記載の情報処理プログラム。
【請求項１０】
前記第２の姿勢算出手段は、前記第１の姿勢に徐々に近づいていくような姿勢である追従姿勢を第２の姿勢として算出する、請求項３に記載の情報処理プログラム。
【請求項１１】
自身の動きを検出する動き検出センサを備えた入力装置から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置のコンピュータに実行させる情報処理プログラムであって、
前記コンピュータを、
前記動き検出信号に基づいて前記入力装置の姿勢を示す入力姿勢を繰り返し算出する入力姿勢算出手段と、
前記入力姿勢算出手段によって繰り返し算出された入力姿勢に基づいて、所定軸を中心とした当該入力姿勢の回転方向を算出する回転方向算出手段と、
前記入力姿勢の回転方向が前記所定の基準回転方向に一致するように、あるいは、近づくように前記入力姿勢を補正する入力姿勢補正手段と、
前記入力姿勢補正手段で補正された入力姿勢に基づいて所定の情報処理を行う処理実行手段として機能させる、情報処理プログラム。
【請求項１２】
前記回転方向算出手段は、
前記入力姿勢算出手段によって繰り返し算出された入力姿勢から、当該入力姿勢の回転に対する回転軸を算出する回転軸算出手段を含み、
前記入力姿勢補正手段は、前記回転軸算出手段で算出された前記回転軸が、前記所定の基準回転方向の回転軸に一致するように、あるいは、近づくように前記入力姿勢を補正する、請求項１１に記載の情報処理プログラム。
【請求項１３】
前記回転軸算出手段は、
前記入力姿勢算出手段によって繰り返し算出された入力姿勢の時系列順で前後する入力姿勢に対して直行する入力回転軸をそれぞれ算出する入力回転軸算出手段と、
前記入力回転軸算出手段で算出された各入力回転軸の平均となる平均回転軸を算出する平均回転軸算出手段を含み、
前記平均回転軸算出手段で算出された前記平均回転軸を、前記入力姿勢の回転に対する回転軸とする、請求項１２に記載の情報処理プログラム。
【請求項１４】
前記情報処理プログラムは、前記コンピュータに、前記回転軸算出手段で算出された前記回転軸を示すベクトルと、真上方向を示すベクトルである真上ベクトルとの外積として示され、前記入力装置の前方方向を示す前方ベクトルを算出する前方ベクトル算出手段として更に機能させ、
前記入力姿勢補正手段は、前記前方ベクトル算出手段で算出された前記前方ベクトルが前記所定の基準回転方向に一致するように、あるいは、近づくように前記入力姿勢を補正する、請求項１２に記載の情報処理プログラム。
【請求項１５】
前記情報処理プログラムは、前記コンピュータに、前記入力姿勢の回転方向と、鉛直線と垂直になる軸を中心に回転する方向との近似度を算出する近似度算出手段として更に機能させ、
入力姿勢補正手段は、前記近似度算出手段で算出された近似度に応じて補正を行う、請求項１１に記載の情報処理プログラム。
【請求項１６】
自身の動きを検出する動き検出センサを備えた入力装置から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置であって、
前記動き検出信号に基づいて前記入力装置の姿勢を示す第１の姿勢を繰り返し算出する第１の姿勢算出手段と、
前記第１の姿勢算出手段によって繰り返し算出された第１の姿勢に基づいて当該第１の姿勢の動きを算出する動き算出手段と、
前記動き算出手段によって算出された前記第１の姿勢の動きに基づいて、当該第１の姿勢が所定の姿勢に近づく動きをしているか否かを判定するための接近動作判定手段と、
前記第１の姿勢が前記所定の姿勢に近づく動きをしていれば、当該第１の姿勢を前記所定の姿勢方向に一致するように、あるいは、近づくように補正した姿勢を入力姿勢として設定し、近づく動きでなければ前記第１の姿勢を入力姿勢として設定する入力姿勢設定手段と、
前記入力姿勢に基づいて所定の情報処理を行う処理実行手段とを備える、情報処理装置。
【請求項１７】
自身の動きを検出する動き検出センサを備えた入力装置から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置であって、
前記動き検出信号に基づいて前記入力装置の姿勢を示す入力姿勢を繰り返し算出する入力姿勢算出手段と、
前記入力姿勢算出手段によって繰り返し算出された入力姿勢に基づいて、所定軸を中心とした当該入力姿勢の回転方向を算出する回転方向算出手段と、
前記入力姿勢の回転方向が前記所定の基準回転方向に一致するように、あるいは、近づくように前記入力姿勢を補正する入力姿勢補正手段と、
前記入力姿勢補正手段で補正された入力姿勢に基づいて所定の情報処理を行う処理実行手段とを備える、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動き検出センサを備えた入力装置自体の姿勢を検出し、当該検出された姿勢を仮想空間内の所定のオブジェクトの動きに反映させる情報処理装置のコンピュータに実行させる情報処理プログラムに関し、より特定的には、検出された入力装置の姿勢を補正して仮想空間内の所定のオブジェクトの動きに反映させる情報処理プログラム、情報処理装置に関する。
【背景技術】
【０００２】
従来より、３軸型ジャイロや３軸型加速計から出力される信号に基づいて姿勢角を算出する姿勢角検出装置が知られている。この姿勢角検出装置では、加減速時や旋回時において発生する余分な加速度が原因となり、算出される姿勢角に誤差が生じるという問題があった。そのため、上記姿勢角検出装置に更に速度センサを搭載した姿勢角検出装置が開示されている（例えば、特許文献１）。この姿勢角検出装置では、当該速度センサから出力される速度信号を利用することで、上述のような誤差を補正して姿勢角の算出を行っている。
【特許文献１】特開２００４−１３２７６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上述したような姿勢角検出装置においては、以下に示す問題点があった。すなわち、上記の姿勢角検出装置では、加減速時や旋回時において精度の高い姿勢角の算出が可能な反面、３軸型ジャイロのみを用いて姿勢角を算出する場合と比べると、３軸加速度計、更には速度センサといったセンサが必要となる。そのため、姿勢角算出装置にかかる費用効率の観点からすると、不利なものとなっていた。
【０００４】
それ故に、本発明の目的は、費用効率面で有利であり、ジャイロ信号から高い精度で姿勢を算出することのできる情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【０００５】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係の一例を示したものであって、本発明を何ら限定するものではない。
【０００６】
第１の発明は、自身の動きを検出する動き検出センサを備えた入力装置から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置のコンピュータに実行させる情報処理プログラムであって、コンピュータを、第１の姿勢算出手段（Ｓ２）と、動き算出手段（Ｓ２１）と、接近動作判定手段（Ｓ２２〜Ｓ２４）と、入力姿勢設定手段（Ｓ２７，Ｓ２８、Ｓ４）と、処理実行手段（Ｓ５）として機能させる。第１の姿勢算出手段は、動き検出信号に基づいて入力装置の姿勢を示す第１の姿勢を繰り返し算出する。動き算出手段は、第１の姿勢算出手段によって繰り返し算出された第１の姿勢に基づいて当該第１の姿勢の動きを算出する。接近動作判定手段は、動き算出手段によって算出された第１の姿勢の動きに基づいて、当該第１の姿勢が所定の姿勢に近づく動きをしているか否かを判定する。入力姿勢設定手段は、第１の姿勢が所定の姿勢に近づく動きをしていれば、当該第１の姿勢を所定の姿勢方向に一致するように、あるいは、近づくように補正した姿勢を入力姿勢として設定し、近づく動きでなければ第１の姿勢を入力姿勢として設定する。処理実行手段は、入力姿勢に基づいて所定の情報処理を行う。
【０００７】
第１の発明によれば、入力装置から算出される姿勢の補正について、ユーザに違和感を与えることがないような精度の高い補正を実現することができる。
【０００８】
第２の発明は、第１の発明において、動き算出手段は、第１の姿勢算出手段によって繰り返し算出された第１の姿勢の変化に基づいて当該第１の姿勢の移動ベクトルを算出する移動ベクトル算出手段を含む。そして、接近動作判定手段は、移動ベクトルに基づいて第１の姿勢の動きが所定の姿勢に近づく動きか否かを判定する。
【０００９】
第２の発明によれば、移動ベクトルを用いて入力姿勢の動きを判定するため、判定処理を簡易なものにすることができ、処理負荷を軽減することが可能となる。
【００１０】
第３の発明は、第２の発明において、情報処理プログラムは、コンピュータに、第１の姿勢と関連する所定の姿勢である第２の姿勢を算出する第２の姿勢算出手段として更に機能させ、第２の姿勢を所定の姿勢として用いる。
【００１１】
第４の発明は、第３の発明において、第２の姿勢算出手段は、第１の姿勢に徐々に近づいていくような姿勢である追従姿勢を第２の姿勢として算出する。
【００１２】
第３乃至第４の発明によれば、第１の姿勢の動きが第２の姿勢に近づく動きか否かの判定処理を簡易なものにすることができ、処理負荷を軽減することが可能となる。
【００１３】
第５の発明は、第４の発明において、動き算出手段は、追従姿勢が第１の姿勢に向かうベクトルである追従ベクトルを算出する追従ベクトル算出手段（Ｓ２２）を含む。そして、接近動作判定手段は、移動ベクトルと追従ベクトルとの成す角度に基づいて第１の姿勢が第２の姿勢に近づく動きをしているか否かを判定する。
【００１４】
第５の発明によれば、ベクトル間のなす角度に基づいて処理を行うため、判定処理を簡易なものにすることができ、処理負荷を軽減することが可能となる。
【００１５】
第６の発明は、第５の発明において、接近動作判定手段は、移動ベクトルと追従ベクトルとの内積を算出する内積算出手段（Ｓ２３）を含む。そして、接近動作判定手段は、当該内積算出手段で算出された内積に基づいて第１の姿勢が第２の姿勢に近づく動きをしているか否かを判定する。
【００１６】
第６の発明によれば、ベクトル間の内積に基づいて処理を行うため、判定処理を簡易なものにすることができ、処理負荷を軽減することが可能となる。
【００１７】
第７の発明は、第１の発明において、入力姿勢設定手段は、所定の姿勢を基準とした座標系における第１の姿勢を示す第３の姿勢を算出する第３の姿勢算出手段（Ｓ４１）を含む。そして、入力姿勢設定手段は、第１の姿勢が所定の姿勢に近づく動きをしていれば、当該所定の姿勢を第１の姿勢に近づけてから第３の姿勢を算出して入力姿勢として設定し、近づく動きでなければ、当該所定の姿勢を動かさずに第３の姿勢を算出して入力姿勢として設定する。
【００１８】
第７の発明によれば、第１の姿勢について直接補正せずに、補正後の姿勢として代わりに第３の姿勢をゲームパラメータとして用いるため、補正前の第１の姿勢について保持しておくことができ、他の処理で利用することが可能となる。
【００１９】
第８の発明は、第７の発明において、入力姿勢設定手段は、予め定められた姿勢である基本姿勢を基準とした座標系における第３の姿勢を示す第４の姿勢を算出する第４の姿勢算出手段（Ｓ４２）を含み、当該第４の姿勢を入力姿勢として設定する。
【００２０】
第８の発明によれば、ユーザに対して与える違和感を更に軽減することが可能となる。
【００２１】
第９の発明は、第１の発明において、情報処理プログラムは、コンピュータに、第１の姿勢と関連する所定の姿勢である第２の姿勢を算出する第２の姿勢算出手段として更に機能させ、第２の姿勢を所定の姿勢として用いる。
【００２２】
第１０の発明は、第３の発明において、第２の姿勢算出手段は、第１の姿勢に徐々に近づいていくような姿勢である追従姿勢を第２の姿勢として算出する。
【００２３】
第９乃至第１０の発明によれば、第１の姿勢の動きが第２の姿勢に近づく動きか否かの判定処理を簡易なものにすることができ、処理負荷を軽減することが可能となる。
【００２４】
第１１の発明は、自身の動きを検出する動き検出センサを備えた入力装置から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置のコンピュータに実行させる情報処理プログラムであって、コンピュータを、入力姿勢算出手段（Ｓ２）と、回転方向算出手段（Ｓ５７）と、入力姿勢補正手段（Ｓ５８）と、処理実行手段（Ｓ５９）として機能させる。入力姿勢算出手段は、動き検出信号に基づいて入力装置の姿勢を示す入力姿勢を繰り返し算出する。回転方向算出手段は、入力姿勢算出手段によって繰り返し算出された入力姿勢に基づいて、所定軸を中心とした当該入力姿勢の回転方向を算出する。入力姿勢補正手段は、入力姿勢の回転方向が所定の基準回転方向に一致するように、あるいは、近づくように入力姿勢を補正する。処理実行手段は、入力姿勢補正手段で補正された入力姿勢に基づいて所定の情報処理を行う。
【００２５】
第１１の発明によれば、入力装置から算出される姿勢の補正について、ユーザに違和感を与えることがないような精度の高い補正を実現することができる。
【００２６】
第１２の発明は、第１１の発明において、回転方向算出手段は、入力姿勢算出手段によって繰り返し算出された入力姿勢から、当該入力姿勢の回転に対する回転軸を算出する回転軸算出手段（Ｓ７８）を含む。そして、入力姿勢補正手段は、回転軸算出手段で算出された回転軸が、所定の基準回転方向の回転軸に一致するように、あるいは、近づくように入力姿勢を補正する。
【００２７】
第１２の発明によれば、プレイヤに違和感を与えることなく、入力姿勢について補正を行い、ゲーム処理に反映させることが可能となる。
【００２８】
第１３の発明は、第１２の発明において、回転軸算出手段は、入力姿勢算出手段によって繰り返し算出された入力姿勢の時系列順で前後する入力姿勢に対して直行する入力回転軸をそれぞれ算出する入力回転軸算出手段（Ｓ７４〜Ｓ７７）と、入力回転軸算出手段で算出された各入力回転軸の平均となる平均回転軸を算出する平均回転軸算出手段（Ｓ７８）を含む。そして、回転軸算出手段は、平均回転軸算出手段で算出された平均回転軸を、入力姿勢の回転に対する回転軸とする。
【００２９】
第１３の発明によれば、プレイヤに違和感を与えずに入力姿勢の回転軸の補正を行うことができる。
【００３０】
第１４の発明は、第１２の発明において、情報処理プログラムは、コンピュータに、回転軸算出手段で算出された回転軸を示すベクトルと、真上方向を示すベクトルである真上ベクトルとの外積として示され、入力装置の前方方向を示す前方ベクトルを算出する前方ベクトル算出手段（Ｓ８１）として更に機能させる。そして、入力姿勢補正手段は、前方ベクトル算出手段で算出された前方ベクトルが所定の基準回転方向に一致するように、あるいは、近づくように入力姿勢を補正する。
【００３１】
第１４の発明によれば、入力姿勢の向いている方向について、プレイヤに違和感を与えることなく所定の方向を向くように補正を行い、ゲーム処理に反映させることが可能となる。
【００３２】
第１５の発明は、第１１の発明において、情報処理プログラムは、コンピュータに、入力姿勢の回転方向と、鉛直線と垂直になる軸を中心に回転する方向との近似度を算出する近似度算出手段として更に機能させる。そして、入力姿勢補正手段は、近似度算出手段で算出された近似度に応じて補正を行う。
【００３３】
第１５の発明によれば、ユーザに違和感を与えることなく、入力装置から算出される姿勢の向きを補正して情報処理を実行することができる。
【００３４】
第１６の発明は、自身の動きを検出する動き検出センサを備えた入力装置（５）から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置（３）であって、第１の姿勢算出手段（１０）と、動き算出手段（１０）と、接近動作判定手段（１０）と、入力姿勢設定手段（１０）と、処理実行手段（１０）とを備える。第１の姿勢算出手段は、動き検出信号に基づいて入力装置の姿勢を示す第１の姿勢を繰り返し算出する。動き算出手段は、第１の姿勢算出手段によって繰り返し算出された第１の姿勢に基づいて当該第１の姿勢の動きを算出する。接近動作判定手段は、動き算出手段によって算出された第１の姿勢の動きに基づいて、当該第１の姿勢が所定の姿勢に近づく動きをしているか否かを判定する。入力姿勢設定手段は、第１の姿勢が所定の姿勢に近づく動きをしていれば、当該第１の姿勢を所定の姿勢方向に一致するように、あるいは、近づくように補正した姿勢を入力姿勢として設定し、近づく動きでなければ第１の姿勢を入力姿勢として設定する。処理実行手段は、入力姿勢に基づいて所定の情報処理を行う。
【００３５】
第１６の発明によれば、上記第１の発明と同様の効果を得ることができる。
【００３６】
第１７の発明は、自身の動きを検出する動き検出センサを備えた入力装置（５）から出力される動き検出信号に基づいて所定の情報処理を行う情報処理装置（３）であって、入力姿勢算出手段（１０）と、回転方向算出手段（１０）と、入力姿勢補正手段（１０）と、処理実行手段（１０）とを備える。入力姿勢算出手段は、動き検出信号に基づいて入力装置の姿勢を示す入力姿勢を繰り返し算出する。回転方向算出手段は、入力姿勢算出手段によって繰り返し算出された入力姿勢に基づいて、所定軸を中心とした当該入力姿勢の回転方向を算出する。入力姿勢補正手段は、入力姿勢の回転方向が所定の基準回転方向に一致するように、あるいは、近づくように入力姿勢を補正する。処理実行手段は、入力姿勢補正手段で補正された入力姿勢に基づいて所定の情報処理を行う。
【００３７】
第１７の発明によれば、上記第１１の発明と同様の効果を得ることができる。
【発明の効果】
【００３８】
本発明によれば、例えばジャイロセンサのみを搭載した入力装置であっても、当該入力装置の姿勢の補正について、ユーザに違和感を感じさせないような精度の高い補正を実現することができる。
【発明を実施するための最良の形態】
【００３９】
以下、本発明の実施の形態について、図面を参照して説明する。尚、この実施例により本発明が限定されるものではない。
【００４０】
［ゲームシステムの全体構成］
図１を参照して、本発明の一実施形態に係る姿勢算出装置の一例であるゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置３、光ディスク４、入力装置８、およびマーカ部６を含む。本システムは、入力装置８を用いたゲーム操作に基づいてゲーム装置３でゲーム処理を実行するものである。
【００４１】
ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置３において実行されるためのゲームプログラムが記憶されている。ゲーム装置３の前面には光ディスク４の挿入口が設けられている。ゲーム装置３は、挿入口に挿入された光ディスク４に記憶されているゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００４２】
ゲーム装置３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２は、ゲーム装置３において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部６が設置される。マーカ部６は、その両端に２つのマーカ６Ｒおよび６Ｌを備えている。マーカ６Ｒ（マーカ６Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部６はゲーム装置３に接続されており、ゲーム装置３はマーカ部６が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００４３】
入力装置８は、自機に対して行われた操作の内容を示す操作データをゲーム装置３に与えるものである。本実施形態では、入力装置８はコントローラ５とジャイロセンサユニット７とを含む。詳細は後述するが、入力装置８は、コントローラ５に対してジャイロセンサユニット７が着脱可能に接続されている構成である。コントローラ５とゲーム装置３とは無線通信によって接続される。本実施形態では、コントローラ５とゲーム装置３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ５とゲーム装置３とは有線で接続されてもよい。
【００４４】
［ゲーム装置３の内部構成］
次に、図２を参照して、ゲーム装置３の内部構成について説明する。図２は、ゲーム装置３の構成を示すブロック図である。ゲーム装置３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００４５】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩの内部構成について後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００４６】
また、システムＬＳＩ１１には、入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００４７】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ１１ｄは、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００４８】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００４９】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００５０】
入出力プロセッサ１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、およびメモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００５１】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５２】
また、入出力プロセッサ１１ａは、コントローラ５から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００５３】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０およびメモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０やメモリカード用コネクタ２１を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
【００５４】
ゲーム装置３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００５５】
［入力装置８の構成］
次に、図３〜図６を参照して、入力装置８について説明する。図３は、入力装置８の外観構成を示す斜視図である。図４は、コントローラ５の外観構成を示す斜視図である。図３は、コントローラ５の上側後方から見た斜視図であり、図４は、コントローラ５を下側前方から見た斜視図である。
【００５６】
図３および図４において、コントローラ５は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ５に設けられたボタンを押下すること、および、コントローラ５自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
【００５７】
ハウジング３１には、複数の操作ボタンが設けられる。図３に示すように、ハウジング３１の上面には、十字ボタン３２ａ、１番ボタン３２ｂ、２番ボタン３２ｃ、Ａボタン３２ｄ、マイナスボタン３２ｅ、ホームボタン３２ｆ、プラスボタン３２ｇ、および電源ボタン３２ｈが設けられる。本明細書では、これらのボタン３２ａ〜３２ｈが設けられるハウジング３１の上面を「ボタン面」と呼ぶことがある。一方、図４に示すように、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＢボタン３２ｉが設けられる。これらの各操作ボタン３２ａ〜３２ｉには、ゲーム装置３が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン３２ｈは遠隔からゲーム装置３本体の電源をオン／オフするためのものである。ホームボタン３２ｆおよび電源ボタン３２ｈは、その上面がハウジング３１の上面に埋没している。これによって、プレイヤがホームボタン３２ｆまたは電源ボタン３２ｈを誤って押下することを防止することができる。
【００５８】
ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、コントローラ５に他の機器（例えば、ジャイロセンサユニット７や他のコントローラ）を接続するために利用される。また、ハウジング３１の後面におけるコネクタ３３の両側には、上記他の機器が容易に離脱することを防止するために係止穴３３ａが設けられている。
【００５９】
ハウジング３１上面の後方には複数（図３では４つ）のＬＥＤ３４ａ〜３４ｄが設けられる。ここで、コントローラ５には、他のメインコントローラと区別するためにコントローラ種別（番号）が付与される。各ＬＥＤ３４ａ〜３４ｄは、コントローラ５に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ５の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ５を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のＬＥＤ３４ａ〜３４ｄのいずれか１つが点灯する。
【００６０】
また、コントローラ５は撮像情報演算部３５（図６）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射面３５ａが設けられる。光入射面３５ａは、マーカ６Ｒおよび６Ｌからの赤外光を少なくとも透過する材質で構成される。
【００６１】
ハウジング３１上面における１番ボタン３２ｂとホームボタン３２ｆとの間には、コントローラ５に内蔵されるスピーカ４９（図５）からの音を外部に放出するための音抜き孔３１ａが形成されている。
【００６２】
次に、図５および図６を参照して、コントローラ５の内部構造について説明する。図５および図６は、コントローラ５の内部構造を示す図である。なお、図５は、コントローラ５の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図６は、コントローラ５の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図６に示す斜視図は、図５に示す基板３０を裏面から見た斜視図となっている。
【００６３】
図５において、ハウジング３１の内部には基板３０が固設されており、当該基板３０の上主面上に各操作ボタン３２ａ〜３２ｈ、各ＬＥＤ３４ａ〜３４ｄ、加速度センサ３７、アンテナ４５、およびスピーカ４９等が設けられる。これらは、基板３０等に形成された配線（図示せず）によってマイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）４２（図６参照）に接続される。本実施形態では、加速度センサ３７は、Ｘ軸方向に関してコントローラ５の中心からずれた位置に配置されている。これによって、コントローラ５をＺ軸回りに回転させたときのコントローラ５の動きが算出しやすくなる。また、加速度センサ３７は、長手方向（Ｚ軸方向）に関してコントローラ５の中心よりも前方に配置されている。また、無線モジュール４４（図６）およびアンテナ４５によって、コントローラ５がワイヤレスコントローラとして機能する。
【００６４】
一方、図６において、基板３０の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ５の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を備えている。これらの部材３８〜４１はそれぞれ基板３０の下主面に取り付けられる。
【００６５】
さらに、基板３０の下主面上には、上記マイコン４２およびバイブレータ４８が設けられている。バイブレータ４８は、例えば振動モータやソレノイドであり、基板３０等に形成された配線によってマイコン４２と接続される。マイコン４２の指示によりバイブレータ４８が作動することによってコントローラ５に振動が発生する。これによって、コントローラ５を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ４８は、ハウジング３１のやや前方寄りに配置される。つまり、バイブレータ４８がコントローラ５の中心よりも端側に配置することによって、バイブレータ４８の振動によりコントローラ５全体を大きく振動させることができる。また、コネクタ３３は、基板３０の下主面上の後端縁に取り付けられる。なお、図５および図６に示す他、コントローラ５は、マイコン４２の基本クロックを生成する水晶振動子、スピーカ４９に音声信号を出力するアンプ等を備えている。
【００６６】
また、ジャイロセンサユニット７は、３軸周りの角速度を検知するジャイロセンサ（図７に示すジャイロセンサ５５および５６）を有する。ジャイロセンサユニット７は、コントローラ５のコネクタ３３に着脱可能に装着される。ジャイロセンサユニット７の前端（図３に示すＺ軸正方向側の端部）には、コネクタ３３に接続可能なプラグ（図７に示すプラグ５３）が設けられる。さらに、プラグ５３の両側にはフック（図示せず）が設けられる。ジャイロセンサユニット７がコントローラ５に対して装着される状態では、プラグ５３がコネクタ３３に接続されるとともに、上記フックがコントローラ５の係止穴３３ａに係止する。これによって、コントローラ５とジャイロセンサユニット７とがしっかりと固定される。また、ジャイロセンサユニット７は側面（図３に示すＸ軸方向の面）にボタン５１を有している。ボタン５１は、それを押下すれば上記フックの係止穴３３ａに対する係止状態を解除することができるように構成されている。したがって、ボタン５１を押下しながらプラグ５３をコネクタ３３から抜くことによって、ジャイロセンサユニット７をコントローラ５から離脱することができる。
【００６７】
また、ジャイロセンサユニット７の後端には、上記コネクタ３３と同形状のコネクタが設けられる。したがって、コントローラ５（のコネクタ３３）に対して装着可能な他の機器は、ジャイロセンサユニット７のコネクタに対しても装着可能である。なお、図３においては、当該コネクタに対してカバー５２が着脱可能に装着されている。
【００６８】
なお、図３〜図６に示したコントローラ５およびジャイロセンサユニット７の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はＺ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ５における撮像情報演算部３５の位置（撮像情報演算部３５の光入射面３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【００６９】
図７は、入力装置８（コントローラ５およびジャイロセンサユニット７）の構成を示すブロック図である。コントローラ５は、操作部３２（各操作ボタン３２ａ〜３２ｉ）、コネクタ３３、撮像情報演算部３５、通信部３６、および加速度センサ３７を備えている。コントローラ５は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置３へ送信するものである。
【００７０】
操作部３２は、上述した各操作ボタン３２ａ〜３２ｉを含み、各操作ボタン３２ａ〜３２ｉに対する入力状態（各操作ボタン３２ａ〜３２ｉが押下されたか否か）を示す操作ボタンデータを通信部３６のマイコン４２へ出力する。
【００７１】
撮像情報演算部３５は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ５の動きでも追跡して解析することができる。
【００７２】
撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ５の前方から入射する光から赤外線のみを通過させる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ入射させる。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤセンサのような固体撮像素子であり、レンズ３９が集光した赤外線を受光して画像信号を出力する。ここで、テレビ２の表示画面近傍に配置されるマーカ部６のマーカ６Ｒおよび６Ｌは、テレビ２の前方に向かって赤外光を出力する赤外ＬＥＤで構成される。したがって、赤外線フィルタ３８を設けることによって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを受光して画像データを生成するので、マーカ６Ｒおよび６Ｌの画像をより正確に撮像することができる。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ６Ｒおよび６Ｌ）の位置を算出する。画像処理回路４１は、算出された位置を示す座標を通信部３６のマイコン４２へ出力する。この座標のデータは、マイコン４２によって操作データとしてゲーム装置３に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ５自体の向き（傾斜角度）や位置に対応して変化するので、ゲーム装置３はこのマーカ座標を用いてコントローラ５の向きや位置を算出することができる。
【００７３】
加速度センサ３７は、コントローラ５の加速度（重力加速度を含む）を検出する、すなわち、コントローラ５に加わる力（重力を含む）を検出する。加速度センサ３７は、当該加速度センサ３７の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度（直線加速度）の値を検出する。例えば、２軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、３軸または２軸の加速度センサは、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能である種類のものでもよい。なお、加速度センサ３７は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
【００７４】
本実施形態では、加速度センサ３７は、コントローラ５を基準とした上下方向（図３に示すＹ軸方向）、左右方向（図３に示すＸ軸方向）および前後方向（図３に示すＺ軸方向）の３軸方向に関してそれぞれ直線加速度を検出する。加速度センサ３７は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ３７からの出力は３軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ５を基準に設定されるＸＹＺ座標系（コントローラ座標系）における３次元のベクトル＜ａｘ，ａｙ，ａｚ＞として表される。以下の説明では、３次元ベクトルについては、例えば、＜１，０，１＞のように、＜Ｘ軸成分、Ｙ軸成分、Ｚ軸成分＞という形式で表記する。また、以下では、加速度センサ３７によって検出される３軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【００７５】
加速度センサ３７が検出した加速度を示すデータ（加速度データ）は、通信部３６へ出力される。なお、加速度センサ３７が検出した加速度は、コントローラ５自体の向き（傾斜角度）や動きに対応して変化するので、ゲーム装置３は加速度データを用いてコントローラ５の向きや動きを算出することができる。本実施形態では、ゲーム装置３は、加速度データに基づいてコントローラ５の姿勢を判断する。
【００７６】
加速度センサ３７が検出した加速度（加速度ベクトル）を示すデータ（加速度データ）は、通信部３６へ出力される。本実施形態において、加速度センサ３７は、コントローラ５の傾斜角度を判断するためのデータを出力するセンサとして用いられる。
【００７７】
なお、加速度センサ３７から出力される加速度の信号に基づいて、ゲーム装置３のプロセッサ（例えばＣＰＵ１０）またはコントローラ５のプロセッサ（例えばマイコン４２）等のコンピュータが処理を行うことによって、コントローラ５に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ３７を搭載するコントローラ５が静止状態であることを前提としてコンピュータ側の処理が実行される場合（すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合）、コントローラ５が現実に静止状態であれば、検出された加速度に基づいてコントローラ５の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ３７の検出軸が鉛直下方向を向いている状態を基準としたとき、１Ｇ（重力加速度）がかかっているか否かによって、コントローラ５が基準に対して傾いているか否かを知ることができるし、その大きさによって基準に対してどの程度傾いているかも知ることができる。また、多軸の加速度センサ３７の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ５がどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ３７からの出力に基づいてコントローラ５の傾斜角度を算出してもよいし、当該傾斜角度を算出せずに、コントローラ５の傾斜方向を算出するようにしてもよい。このように、加速度センサ３７をプロセッサと組み合わせて用いることによって、コントローラ５の傾斜角度または姿勢を判定することができる。
【００７８】
一方、コントローラ５が動的な状態（コントローラ５が動かされている状態）であることを前提とする場合には、加速度センサ３７は重力加速度に加えてコントローラ５の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ５の動き方向を知ることができる。また、コントローラ５が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ５の傾きを知ることが可能である。なお、他の実施例では、加速度センサ３７は、内蔵の加速度検出手段で検出された加速度信号をマイコン４２に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ３７が静的な加速度（例えば、重力加速度）を検出するために用いられる場合、加速度信号を傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００７９】
なお、本実施形態では、コントローラの動きに応じて変化する値を出力するセンサとして、例えば静電容量式の加速度センサを用いることとするが、他の方式の加速度センサを用いるようにしてもよい。
【００８０】
通信部３６は、マイコン４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理を行う際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータをゲーム装置３へ無線送信する無線モジュール４４を制御する。また、マイコン４２はコネクタ３３に接続されている。ジャイロセンサユニット７から送信されてくるデータは、コネクタ３３を介してマイコン４２に入力される。以下、ジャイロセンサユニット７の構成について説明する。
【００８１】
ジャイロセンサユニット７は、プラグ５３、マイコン５４、２軸ジャイロセンサ５５、および１軸ジャイロセンサ５６を備えている。上述のように、ジャイロセンサユニット７は、３軸（本実施形態では、ＸＹＺ軸）周りの角速度を検出し、検出した角速度を示すデータ（角速度データ）をコントローラ５へ送信する。
【００８２】
２軸ジャイロセンサ５５は、Ｘ軸周りの角速度およびＹ軸周りの（単位時間あたりの）角速度を検出する。また、１軸ジャイロセンサ５６は、Ｚ軸周りの（単位時間あたりの）角速度を検出する。なお、本明細書では、コントローラ５の撮像方向（Ｚ軸正方向）を基準として、ＸＹＺ軸周りの回転方向を、それぞれ、ロール方向、ピッチ方向、ヨー方向と呼ぶ。すなわち、２軸ジャイロセンサ５５は、ロール方向（Ｘ軸周りの回転方向）およびピッチ方向（Ｙ軸周りの回転方向）の角速度を検出し、１軸ジャイロセンサ５６は、ヨー方向（Ｚ軸周りの回転方向）の角速度を検出する。
【００８３】
なお、本実施形態では、３軸周りの角速度を検出するために、２軸ジャイロセンサ５５と１軸ジャイロセンサ５６とを用いる構成としたが、他の実施形態においては、３軸周りの角速度を検出することができればよく、用いるジャイロセンサの数および組み合わせはどのようなものであってもよい。
【００８４】
また、本実施形態では、各ジャイロセンサ５５および５６が角速度を検出する３つの軸は、加速度センサ３７が加速度を検出する３つの軸（ＸＹＺ軸）と一致するように設定される。ただし、他の実施形態においては、各ジャイロセンサ５５および５６が角速度を検出する３つの軸と、加速度センサ３７が加速度を検出する３つの軸とは一致しなくてもよい。
【００８５】
各ジャイロセンサ５５および５６で検出された角速度を示すデータは、マイコン５４に出力される。したがって、マイコン５４には、ＸＹＺ軸の３軸周りの角速度を示すデータが入力されることになる。マイコン５４は、上記３軸周りの角速度を示すデータを角速度データとしてプラグ５３を介してコントローラ５へ送信する。なお、マイコン５４からコントローラ５への送信は所定の周期毎に逐次行われるが、ゲームの処理は１／６０秒を単位として（１フレーム時間として）行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。
【００８６】
コントローラ５の説明に戻り、操作部３２、撮像情報演算部３５、および加速度センサ３７からマイコン４２へ出力されたデータ、ならびに、ジャイロセンサユニット７からマイコン４２へ送信されてきたデータは、一時的にメモリ４３に格納される。これらのデータは、上記操作データとしてゲーム装置３へ送信される。すなわち、マイコン４２は、ゲーム装置３の無線コントローラモジュール１９への送信タイミングが到来すると、メモリ４３に格納されている操作データを無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ５から送信される。微弱電波信号はゲーム装置３側の無線コントローラモジュール１９で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。なお、通信部３６から無線コントローラモジュール１９への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は１／６０秒を単位として（１フレーム時間として）行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ５の通信部３６は、例えば１／２００秒に１回の割合で各操作データをゲーム装置３の無線コントローラモジュール１９へ出力する。
【００８７】
上記コントローラ５を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ５を任意の傾斜角度に傾ける操作を行うことができる。その他、上記コントローラ５によれば、プレイヤは、コントローラ５によって画面上の任意の位置を指示する操作、および、コントローラ５自体を動かす操作を行うこともできる。
【００８８】
次に、本実施形態で想定するゲームの概要について説明する。本実施形態で想定するゲームは、剣劇ゲームである。具体的には、ゲーム画面は、３Ｄ仮想ゲーム空間を一人称視点で描画したものが表示される。そして、３Ｄ仮想ゲーム区間内においてプレイヤオブジェクトは剣オブジェクトを手にした状態であり、一人称視点のゲーム画面上には、当該剣オブジェクトが描画される。そして、上記コントローラ５を剣に見立て、プレイヤがコントローラ５を把持したまま振ることで、仮想ゲーム空間内の剣オブジェクトを振って楽しむ剣劇ゲームである。
【００８９】
本実施形態では、上記入力装置８を剣に見立ててプレイヤに楽しませるために、上記ジャイロセンサユニット７の出力から算出されるコントローラ５の姿勢を仮想ゲーム空間内の剣オブジェクトの姿勢に反映させる。例えば、実空間内でプレイヤが入力装置８を把持した状態で、当該入力装置８を振り上げてから振り下ろす動作を行うと、この動作に連動して、仮想ゲーム空間内の剣オブジェクトも振り上げられ、振り下ろされる様が描画される。ここで、本実施形態における入力装置８の姿勢算出の方法について簡単に説明する。本実施形態では、Ｘ軸、Ｙ軸、Ｚ軸という３軸周りの角速度を検知するジャイロセンサ（図７に示すジャイロセンサ５５および５６）を利用して、入力装置８の姿勢を算出する。より具体的には、当該ジャイロセンサで検出された角速度に基づいて、上記３軸それぞれの空間内での入力装置８の向きを示す３次元ベクトルを算出する。図８は、入力装置８の姿勢を表す３次元ベクトルの概念を説明するための図であり、入力装置８（コントローラ５）の前面（撮像情報演算部７４が撮像する光の入射口側）が奥行き方向を向いている状態での各軸に対応する当該３次元ベクトルの状態を示している（すなわち、基準座標系のＸ,Ｙ,Ｚ軸の単位ベクトルを示す）。図８において、各ベクトルの値を１〜−１の範囲とすると、この状態では、Ｘ軸についてのベクトル（以下、Ｘ軸ベクトルと呼ぶ）は＜１，０，０＞で示される。また、Ｙ軸についてのベクトル（以下、Ｙ軸ベクトルと呼ぶ）は＜０，１，０＞で示され、Ｚ軸についてのベクトル（以下、Ｚ軸ベクトルと呼ぶ）は＜０，０，１＞で示される。そして、これら３軸それぞれの向きを示すベクトルを合成することで、最終的な入力装置８の姿勢が算出される。換言すれば、入力装置８の姿勢は上記３つの３次元ベクトルで示されることになる（後述する追従姿勢や相対姿勢等も同様）。例えば、図８に示した姿勢は、以下のような姿勢行列で示すこともできる。
【数１】
2010020554.tif 000003
【００９０】
ところで、上記のような剣オブジェクトの姿勢を算出するためには、理論上は、上記ジャイロセンサユニット７の出力から算出される入力装置８の姿勢をそのまま反映すれば良いが、実際は、上記ジャイロセンサ部品の取り付け向きの微妙なズレや、センサのアナログデータが特定のビット数のデジタル値に置き換えられること等が原因で、ジャイロセンサの検出精度には誤差が生じる。そのため、ジャイロセンサユニット７の出力から算出される姿勢をそのまま利用しても、入力装置８の実際の姿勢と仮想空間内の剣オブジェクトの姿勢との間で徐々にズレが生じてしまう。そこで、本実施形態では、以下のような補正処理を実行してこのズレを軽減し、プレイヤに違和感を与えることを防いでいる。
【００９１】
以下、本実施形態における補正処理について説明する。まず、当該補正処理の実行に際し、本実施形態におけるゲームでは、上記剣オブジェクトに「基本姿勢」というものを定義している。当該基本姿勢は、剣オブジェクトの元の位置、ベースとなる位置を示すものであり、人が剣を持って構えている姿勢（正面斜め上向きの状態）を想定したものである。そのため、例えば、本実施形態で想定するゲームを野球ゲームと仮定した場合は、剣オブジェクトの代わりにバットオブジェクトを用い、上向きの状態を基本姿勢として定義する。また、料理ゲームを想定し、剣オブジェクトの代わりにフライパンオブジェクトを用いる場合は、正面向きの状態を基本姿勢とする。本実施形態では、図９に示すような座標系（仮想ゲーム空間）において、剣オブジェクト１０１の切っ先が水平から５度上向きの状態（Ｚ−Ｙ間の角度が５度）を基本姿勢として定義する。そして、例えば、入力装置８を振り上げてから振り下ろすという一連の動作を行った場合、この入力装置８が当該基本姿勢に近づくような動き（振り下ろし）のときだけ、ジャイロセンサユニット７から得られる入力値を、より基本姿勢に近づくような値に補正してゲーム処理を行う（仮想空間内の剣オブジェクトの姿勢に反映させる）という処理を実行する。
【００９２】
上記のように、本実施形態では、剣を振るように入力装置８を振る操作を行った際に、基本姿勢に近づくような動きのときだけ、より基本姿勢に近づけるように、ジャイロセンサユニット７から得られる入力値の補正を行うような処理を実行する。このような補正を行うのは、次のような理由による。例えば、入力装置８を動かしていない状態（止めている状態）であるにもかかわらず入力値の補正が行われると、入力装置８を動かしていないにも関わらず、仮想ゲーム空間内の剣オブジェクトは補正にかかる分だけ動いてしまうという状況となり、プレイヤに違和感を与えてしまう。また、基本姿勢から遠ざかるような動き（振り上げ）を行っているときに、基本姿勢に近づけるような補正を行うと、プレイヤが思っているよりも剣オブジェクトが動かない（振り上がらない）という印象を与えてしまう。つまり、入力装置８の反応が悪いというような印象や、違和感、不満感をプレイヤに与えてしまう。これに対して、基本姿勢に近づくような動きの時に、より基本姿勢に近づくような補正を行った場合は、上記のような違和感よりは、むしろ「やりすぎた（振り下ろしすぎた）」「すごく反応が良い」というような、相手側に責任を求めにくい心証を与え、心理的に人間に違和感を感じさせにくい。このような観点から、本実施形態では、基本姿勢に近づく／遠ざかるという一連の動作（入力装置８を剣のように振るという動作）において、基本姿勢に近づく動作のときのみ入力値の補正を行うことで、プレイヤに違和感を与えずに入力値を補正している。
【００９３】
次に、以下の説明（本実施形態）で用いられる各種「姿勢」の概念について簡単に説明する。以下の説明では、上記のような基本姿勢の他、「入力姿勢」、「追従姿勢」、「相対姿勢」という概念を用いる。入力姿勢とは、上述したようなジャイロセンサユニット７から算出される入力装置８の姿勢を示す。換言すれば、入力装置８の姿勢を直接的に示すものであるが、上記のようなジャイロセンサユニット７の検出精度の誤差等により、現実には、必ずしも入力装置８の姿勢とぴったり一致するとは限らない。
【００９４】
次に、追従姿勢とは、本実施形態の処理において随時算出される仮想の姿勢であり、入力姿勢を徐々に追いかけていくような姿勢である。図１０は、入力姿勢と追従姿勢の基本的な概念を説明するための図である。まず、本実施形態では、１フレーム（１／６０秒）単位で後述するような処理が繰り返し実行される。また、初期状態として、入力姿勢および追従姿勢は共に水平な状態を前提とする。そして、図１０に示されるように、１フレーム目で初期状態である入力姿勢（の先端）が、２フレーム目で９０度振り上げられた状態になったとする。このような場合、追従姿勢（の先端）は、１〜５フレーム分かけて、徐々に入力姿勢を追いかける（近づいていく）ことになる。
【００９５】
但し、本実施形態においては、入力姿勢が追従姿勢に近づくような動き（以下、接近動作と呼ぶ）のときのみ、追従姿勢を入力姿勢に近づける処理を行う。逆に、入力姿勢が追従姿勢から遠ざかるような動き（以下、離反動作と呼ぶ）のときは、追従姿勢は動かさないような処理を行う。また、入力姿勢が静止している状態のときも追従姿勢は動かさないような処理を行う。
つまり、入力姿勢の先端が追従姿勢に向かって移動するような動きのときのみ、追従姿勢を入力姿勢に近づけるような処理を行う。図１１は、本実施形態における入力姿勢と追従姿勢との関係を説明するための図である。図１１に示されるように、入力姿勢が１フレーム目で初期状態であり、２フレーム目で９０度振り上げられた状態になった場合、入力姿勢の先端は、追従姿勢から遠ざかっていることになる。この場合は、追従姿勢は動かさない。その後、３フレーム目において、入力姿勢が少し振り下ろされたような状態となった場合、入力姿勢の先端は追従姿勢に近づいていることになる。この場合は、追従姿勢の先端を入力姿勢に少し近づける。その後、４フレーム目において、入力姿勢が水平な状態になったとする。すなわち、追従姿勢を追い越して、追従姿勢から遠ざかるような動きになったとする。この場合、追従姿勢は動かさない。つまり、入力姿勢が追従姿勢に近づいていき、追従姿勢に追いつき、追い越した時点で、追従姿勢の入力姿勢へ近づいていくという動きが停止することになる。更に、４フレーム目から５フレーム目にかけては、入力姿勢が静止している状態である。この場合も、追従姿勢は動かさない。このように、本実施形態においては、入力姿勢の動きが追従姿勢に近づくような動きの時だけ、追従姿勢も入力姿勢に近づけるという処理を行う。
【００９６】
次に、相対姿勢とは、上記入力姿勢と追従姿勢とに基づいて算出される仮想的な姿勢である。より具体的には、相対姿勢とは、追従姿勢から見た入力姿勢、すなわち、追従姿勢を座標軸の基準とした場合の入力姿勢を示す。図１２は、相対姿勢の基本概念を示す図である。まず、図１２（ａ）に示すような入力姿勢と追従姿勢があるとする。そして、図１２（ｂ）に示すように、これらの姿勢の原点を合わせた状態で、追従姿勢が水平になる位置まで一緒に回転させる。つまり、追従姿勢を基準とした座標系に入力姿勢を変換する。そして、図１２（ｃ）に示すように、当該変換後の入力姿勢を相対姿勢として扱う。基本的には、当該相対姿勢を剣オブジェクトの姿勢としてゲーム処理で用いることで、補正のかけられた入力値を用いた処理が実行可能である。つまり、図１２（ｄ）に示すように、入力姿勢と相対姿勢とのなす角度分だけ、入力値に補正がかかっていることになる。但し、本実施形態では、後述するように、当該相対姿勢に対して更なる補正を行う。
【００９７】
なお、本実施形態において、上記のような追従姿勢や相対姿勢という概念を用いるのは、ゲーム処理における他の処理（剣オブジェクトを動かす事以外の処理）で上記入力姿勢を利用する場合を考慮したものである。すなわち、本実施形態で説明する処理において上記入力姿勢を直接補正すると、当該他の処理において影響が及ぶため、入力姿勢そのものについては直接手を加えないようにしたものである。
【００９８】
以下、入力装置８（仮想ゲーム空間内での剣オブジェクト１０１）の先端が正面を向いた状態から入力装置８を９０度上に振り上げ、再度先端が正面に向く位置まで振り下ろすという一連の動作を行う場合を例として、本実施形態での補正処理の処理概要を説明する。
【００９９】
本実施形態では、次のような一連の処理が１フレーム毎に繰り返し行われる。すなわち、入力姿勢等の算出処理、入力姿勢が接近動作をしているか否かの判定処理、接近動作の場合は追従姿勢を入力姿勢に近づける処理、相対姿勢の算出処理、そして、上記相対姿勢と基本姿勢との関係に基づく最終的な補正処理が実行される。
【０１００】
より具体的には、まず、直前のフレームにおける処理ループでの入力姿勢と現在のフレームの処理ループでの入力姿勢に基づいて入力姿勢の移動ベクトルを算出する。更に、追従姿勢の移動すべき方向を示すベクトルも算出する。そして、両ベクトルを比較して、入力姿勢の移動ベクトルが追従姿勢に近づくような動きベクトルか否かを判定する。図１３および図１４は、当該処理の概念を説明するための図である。図１３は、入力姿勢が接近動作を行っている例を示している。図１３においては、現在のフレームで算出された入力姿勢Ｇｄｉｒと、直前のフレームでの処理ループにおける入力姿勢であるＯｌｄと、追従姿勢Ｆｄｉｒ（直前の処理ループにおける状態である）とが示されている。このような状況において、まず、入力姿勢ＧｄｉｒとＯｌｄとに基づいて入力姿勢の移動ベクトル＜ｖｚ，ｖｙ，ｖｚ＞を算出する。次に、追従姿勢Ｆｄｉｒが入力姿勢に向かう（近づく）ベクトルである追従ベクトル＜ｎｚ，ｎｙ，ｎｚ＞を算出する。そして、図１３のような状況で移動ベクトルと追従ベクトルとの内積を算出すると、マイナスの値が算出されることになる。この場合は、入力姿勢は追従姿勢に近づいていると判定する。
【０１０１】
一方、図１４は、入力姿勢が離反動作の例を示している。図１４のような状況においても同様に移動ベクトル＜ｖｚ，ｖｙ，ｖｚ＞と追従ベクトル＜ｎｚ，ｎｙ，ｎｚ＞との内積を算出すると、プラスの値が算出されることになる。この場合は、入力姿勢は追従姿勢から遠ざかっていると判定する。つまり、移動ベクトルと追従ベクトルとの移動方向が同じ方向であるか、互いに反対方向であるかを判定することで、接近動作か離反動作であるかを判定する。
【０１０２】
上記のような判定を行った結果、現在のフレームにおける入力姿勢の動きが接近動作の時は、追従姿勢を入力姿勢に近づける処理が実行される。一方、離反動作の時は、追従姿勢は動かさない。
【０１０３】
続いて、追従姿勢と入力姿勢に基づいて、上述したような相対姿勢（図１２参照）を算出する。上記接近動作の場合は、上記のように追従姿勢を入力姿勢に近づけたうえで相対姿勢の算出が行われることになるため、離反動作の場合における相対姿勢に比べると、少し追従姿勢に近づいた姿勢として算出されることになる。つまり、入力装置８を振り下ろしているときのみ、より基本姿勢に近づくような補正がかけられることになる。
【０１０４】
そして最後に、上記相対姿勢に対して上記基本姿勢に基づく最終的な補正を行う（以下、当該補正のことをオフセット補正と呼ぶ）。図９に示したような座標系において、上記のような処理を繰り返すと、最終的には相対姿勢は真正面（Ｚ−Ｙ間の角度が０度の状態）の位置に収束する。その一方で、基本姿勢として上記のように５度上向きの状態を定義しているため、最終的に基本姿勢の５度分だけ相対姿勢をより戻すようにオフセット補正する（そのため、仮に基本姿勢を水平な状態（Ｚ−Ｙ間の角度が０度の状態）として定義していれば、当該オフセット補正は必ずしも行う必要はない）。そして、当該オフセット補正を行った姿勢が最終的に剣オブジェクト１０１の姿勢として用いられることになる。
【０１０５】
このように、本実施形態では、接近動作のときのみ補正を行うようにすることで、プレイヤに違和感を与えることなく入力姿勢の補正を行うことが可能となる。
【０１０６】
次に、本実施形態の補正処理実行時に外部メインメモリ１２に格納されるデータについて説明する。図１５は、図２に示した外部メインメモリ１２のメモリマップを示す図である。図１５において、外部メインメモリ１２は、プログラム記憶領域１２１およびデータ記憶領域１２３を含む。プログラム記憶領域１２１およびデータ記憶領域１２３のデータは、光ディスク４に予め記憶されたものが、外部メインメモリ１２にコピーされたものである。
【０１０７】
プログラム記憶領域１２１は、ＣＰＵ１０によって実行されるゲームプログラムを記憶し、このゲームプログラムは、メイン処理プログラム１２２などによって構成される。
【０１０８】
データ記憶領域１２３には、角速度データ１２４、入力姿勢データ１２８、旧入力姿勢データ１３２、追従姿勢データ１３６、相対姿勢データ１４０、基本姿勢データ１４４、移動ベクトル１４８、追従ベクトル１４９、最終姿勢データ１５０などのデータが記憶される。
【０１０９】
角速度データ１２４は、コントローラ５を経由してジャイロセンサユニット７から送信されてくる角速度データであり、得られた角速度データを所定フレーム分（例えば、ゲーム処理間隔である１フレーム（１／６０秒）に対して３０フレーム分）格納する。角速度データ１２４には、Ｘ軸、Ｙ軸、およびＺ軸の３軸成分に分けてそれぞれ検出したＸ軸方向角速度１２５、Ｙ軸方向角速度１２６、およびＺ軸方向角速度１２７が含まれる。なお、ゲーム装置３に備える無線コントローラモジュール１９は、コントローラ５から所定間隔例えば５ｍｓごとに送信される操作情報に含まれる角速度データ１２４を受信し、無線コントローラモジュール１９に備える図示しないバッファに蓄えられる。その後、ゲーム処理間隔である１フレーム毎に読み出されて外部メインメモリ１２に記憶される。
【０１１０】
入力姿勢データ１２８は、上記角速度データ１２４に基づいて算出される入力装置８の姿勢を示すためのデータであり、上記図１３で示したＧｄｉｒに相当する情報である。入力姿勢データ１２８は、入力Ｘ軸ベクトル１２９、入力Ｙ軸ベクトル１３０、入力Ｚ軸ベクトル１３１で構成されている。これらのベクトルは、入力装置８の姿勢を示す３軸それぞれの空間内での向きを示す３次元ベクトルである（上記図８参照）。以下の説明においては、例えば、入力Ｘ軸ベクトル１２９については＜ＧｄｉｒＸｘ，ＧｄｉｒＸｙ，ＧｄｉｒＸｚ＞と示すこともある。同様に、入力Ｙ軸ベクトル１３０については、＜ＧｄｉｒＹｘ，ＧｄｉｒＹｙ，ＧｄｉｒＹｚ＞と示し、入力Ｚ軸ベクトル１３１については、＜ＧｄｉｒＺｘ，ＧｄｉｒＺｙ，ＧｄｉｒＺｚ＞と示すこともある。
【０１１１】
旧入力姿勢データ１３２は、直前のフレームでの処理ループにおける入力姿勢を示すデータであり、上記図１３で示したＯｌｄに相当する情報である。旧入力姿勢データ１３２は、旧入力Ｘ軸ベクトル１３３、旧入力Ｙ軸ベクトル１３４、旧入力Ｚ軸ベクトル１３５で構成されている。以下の説明においては、例えば、旧入力Ｘ軸ベクトル１３３については＜ＯｌｄＸｘ，ＯｌｄＸｙ，ＯｌｄＸｚ＞と示すこともある。同様に、旧入力Ｙ軸ベクトル１３４については、＜ＯｌｄＹｘ，ＯｌｄＹｙ，ＯｌｄＹｚ＞と示し、旧入力Ｚ軸ベクトル１３５については、＜ＯｌｄＺｘ，ＯｌｄＺｙ，ＯｌｄＺｚ＞と示すこともある。
【０１１２】
追従姿勢データ１３６は、上述したような追従姿勢を示すためのデータであり、上記図１３で示したＦｄｉｒに相当する情報である。追従姿勢データ１３６は、追従Ｘ軸ベクトル１３７、追従Ｙ軸ベクトル１３８、追従Ｚ軸ベクトル１３９で構成されている。これらのベクトルは、上記入力姿勢の場合と同様に、追従姿勢を構成する３軸のそれぞれの向きを示すためのベクトルである。なお、以下の説明においては、追従姿勢をＦｄｉｒと示すこともある。また、追従Ｘ軸ベクトル１３７については、＜ＦｄｉｒＸｘ，ＦｄｉｒＸｙ，ＦｄｉｒＸｚ＞のように示し、追従Ｙ軸ベクトル１３８については、＜ＦｄｉｒＹｘ，ＦｄｉｒＹｙ，ＦｄｉｒＹｚ＞、追従Ｚ軸ベクトル１３９については、＜ＦｄｉｒＺｘ，ＦｄｉｒＺｙ，ＦｄｉｒＺｚ＞と示すこともある。
【０１１３】
相対姿勢データ１４０は、上述したような相対姿勢を示すためのデータであり、相対Ｘ軸ベクトル１４１、相対Ｙ軸ベクトル１４２、相対Ｚ軸ベクトル１４３で構成されている。これらのベクトルは、上記入力姿勢の場合と同様に、相対姿勢を構成する３軸のそれぞれの向きを示すためのベクトルである。なお、以下の説明においては、相対姿勢をＲｄｉｒと示すこともある。また、相対Ｘ軸ベクトル１４１については、＜ＲｄｉｒＸｘ，ＲｄｉｒＸｙ，ＲｄｉｒＸｚ＞のように示し、相対Ｙ軸ベクトル１４２については、＜ＲｄｉｒＹｘ，ＲｄｉｒＹｙ，ＲｄｉｒＹｚ＞、相対Ｚ軸ベクトル１４３については、＜ＲｄｉｒＺｘ，ＲｄｉｒＺｙ，ＲｄｉｒＺｚ＞と示すこともある。
【０１１４】
基本姿勢データ１４４は、上述したような基本姿勢（図９参照）を示すためのデータであり、基本Ｘ軸ベクトル１４５、基本Ｙ軸ベクトル１４６、基本Ｚ軸ベクトル１４７で構成されている。これらのベクトルは、上記入力姿勢の場合と同様に、基本姿勢を構成する３軸のそれぞれの向きを示すためのベクトルである。なお、以下の説明においては、基本姿勢をＢｄｉｒと示すこともある。また、基本Ｘ軸ベクトル１４５については、＜ＢｄｉｒＸｘ，ＢｄｉｒＸｙ，ＢｄｉｒＸｚ＞のように示し、基本Ｙ軸ベクトル１４６については、＜ＢｄｉｒＹｘ，ＢｄｉｒＹｙ，ＢｄｉｒＹｚ＞、基本Ｚ軸ベクトル１４７については、＜ＢｄｉｒＺｘ，ＢｄｉｒＺｙ，ＢｄｉｒＺｚ＞と示すこともある。
【０１１５】
移動ベクトル１４８は、１フレームの間に入力姿勢がどの程度移動したか（コントローラ５がどれだけ動かされたか）を示すためのベクトルデータである。上記図１３で示したようなベクトル＜ｖｘ，ｖｙ，ｖｚ＞に相当する。
【０１１６】
追従ベクトル１４９は、追従姿勢が移動すべき方向（入力姿勢を追従する方向）を示すためのベクトルデータである。上記図１３で示したようなベクトル＜ｎｘ，ｎｙ，ｎｚ＞に相当する。
【０１１７】
最終姿勢データ１５０は、最終的に剣オブジェクト１０１に反映させる姿勢を示すデータである。すなわち、補正後の姿勢を示すデータであり、最終Ｘ軸ベクトル１５１、最終Ｙ軸ベクトル１５２、最終Ｚ軸ベクトル１５３で構成されている。これらのベクトルは、上記入力姿勢の場合と同様に、基本姿勢を構成する３軸のそれぞれの向きを示すためのベクトルである。なお、以下の説明においては、最終姿勢をＳｄｉｒと示すこともある。また、最終Ｘ軸ベクトル１５１については、＜ＳｄｉｒＸｘ，ＳｄｉｒＸｙ，ＳｄｉｒＸｚ＞のように示し、最終Ｙ軸ベクトル１５２については、＜ＳｄｉｒＹｘ，ＳｄｉｒＹｙ，ＳｄｉｒＹｚ＞、最終Ｚ軸ベクトル１５３については、＜ＳｄｉｒＺｘ，ＳｄｉｒＺｙ，ＳｄｉｒＺｚ＞）と示すこともある。
【０１１８】
次に、図１６〜図１９を参照して、ゲーム装置３によって実行される補正処理について説明する。図１６は、ゲーム装置３によって実行される補正処理の全体処理を示すフローチャートである。
【０１１９】
まず、ステップＳ１において、以降の処理において用いられる各種データの初期化処理が実行される。具体的には、ＣＰＵ１０は、入力姿勢が正面向きになるように入力姿勢データ１２８を初期化する。そして、追従姿勢データ１３６を入力姿勢データ１２８と一致する姿勢となるように設定する。つまり、ゲーム開始直後の入力装置８の入力姿勢を検出し、追従姿勢を入力姿勢に一致させておく処理が実行される。その他、各種変数等の初期化も行われる。以降、ステップＳ２〜Ｓ５の処理ループが１フレーム毎に繰り返されることによって、ゲームが進行していく。
【０１２０】
次に、ステップＳ２において、入力姿勢の算出が行われる。すなわち、ＣＰＵ１０は、入力装置８から取得された角速度データ１２４に基づいて、上記入力Ｘ軸ベクトル１２９、入力Ｙ軸ベクトル１３０、入力Ｚ軸ベクトル１３１を算出することで入力姿勢データ１２８を算出して外部メインメモリ１２に格納する。なお、ジャイロセンサの出力に基づく姿勢算出の基本概念や基本的な算出手法等については当業者には既知であるため、本処理の詳しい説明は省略する。
【０１２１】
次に、ステップＳ３において、追従姿勢算出処理が実行される。図１７は、当該ステップＳ３で示した追従姿勢算出処理の詳細を示すフローチャートである。図１７において、まず、ステップＳ１１で、追従姿勢を構成する３軸成分のうち、Ｘ軸を移動させる処理ための処理である、追従姿勢Ｘ軸移動処理が実行される。
【０１２２】
図１８は、当該追従姿勢Ｘ軸移動処理の詳細を示すフローチャートである。まず、ステップＳ２１において、上記入力Ｘ軸ベクトル１２９についての移動ベクトル＜ｖｘ，ｖｙ，ｖｚ＞を算出する処理が実行される。より具体的には、ＣＰＵ１０は、次のような数式を用いて、直前のフレームから現在のフレームまでの入力Ｘ軸ベクトル１２９の移動ベクトル＜ｖｘ，ｖｙ，ｖｚ＞を算出する。また、後述の処理で用いるための変数であるｓｐｅｅｄも算出する。当該変数ｓｐｅｅｄは、追従姿勢が入力姿勢に近づく早さ（つまり、追従姿勢の移動速度）を示すための情報である。
【数２】
2010020554.tif 000004
【０１２３】
続くステップＳ２２において、以下の数式を用いて、追従Ｘ軸ベクトル１３７についての追従ベクトル＜ｎｘ，ｎｙ，ｎｚ＞が算出される。
【数３】
2010020554.tif 000005
【０１２４】
続くステップＳ２３で、上記移動ベクトルと追従ベクトルとの内積ａが以下の式を用いて算出される。
【数４】
2010020554.tif 000006
【０１２５】
次に、ステップＳ２４において、入力Ｘ軸ベクトル１２９が追従Ｘ軸ベクトル１３７に近づいているか否か（接近動作であるか否か）が判定される。すなわち、ステップＳ２３で算出した内積ａが０より小さいか否かが判定される。当該判定の結果、０以上のときは（ステップＳ２４でＮＯ）、入力Ｘ軸ベクトル１２９は離反動作を行っている、あるいは、静止状態であることになるため、処理が後述するステップＳ２９に進められる。
【０１２６】
一方、０未満のときは（ステップＳ２４でＹＥＳ）、接近動作が行われていると考えられるため、追従Ｘ軸ベクトル１３７を入力Ｘ軸ベクトル１２９に近づけるための処理が実行される。具体的には、まず、追従姿勢Ｆｄｉｒを回転運動させるための準備（すなわち、移動させるための準備）として、ステップＳ２５において、追従ベクトル＜ｎｘ，ｎｙ，ｎｚ＞を追従姿勢Ｆｄｉｒと直角な成分のみにする処理が実行される。そのために、次のような数式を用いて、上記平行な成分を取り除く処理が実行される。
【数５】
2010020554.tif 000007
【０１２７】
続くステップＳ２６で、以下の数式を用いてベクトルの長さを算出する処理が実行される。つまり、追従Ｘ軸ベクトル１３７を移動させるべき距離が算出される。
【数６】
2010020554.tif 000008
【０１２８】
次のステップＳ２７で、算出された長さが０であるか否かが判定される。つまり、追従Ｘ軸ベクトル１３７を動かす必要があるか否かが判定される。長さが０の場合は（ステップＳ２７でＹＥＳ）、追従Ｘ軸ベクトル１３７と入力Ｘ軸ベクトル１２９が一致している状態であるため、動かす必要がないことになる。そのため、処理が後述するステップＳ２９に進められる。一方、長さが０ではないときは（ステップＳ２７でＮＯ）、以下の数式を用いて、追従Ｘ軸ベクトル１３７を入力Ｘ軸ベクトル１２９に近づける処理が実行される。
【数７】
2010020554.tif 000009
ここで、変数ｂは回転割合を示す。また、係数Ｃ３は、追従Ｘ軸ベクトル１３７を入力Ｘ軸ベクトル１３７に近づける強さを示す係数であり、（０＜Ｃ３≦１）の範囲の値である。つまり、この処理の結果、Ｆｄｉｒを追従ベクトル分だけ一気に移動させるのではなく、回転割合ｂの値ずつ移動させることが可能となる。
【０１２９】
次に、ステップＳ２９で、現在の入力Ｘ軸ベクトル＜ＧｄｉｒＸｘ、ＧｄｉｒＸｙ、ＧｄｉｒＸｚ＞を旧入力Ｘ軸ベクトル１３３として外部メインメモリ１２に保存する処理が実行される。以上で、追従姿勢Ｘ軸移動処理が終了する。
【０１３０】
図１７に戻り、続いて、ステップＳ１２において、追従Ｙ軸ベクトルについての移動処理が実行される。この処理は、図１８を用いて上述したのと同様の処理を、Ｙ軸を対象として実行するものである。具体的には、上述した各数式等において、Ｘ軸ベクトルについてのＸ，Ｙ，Ｚ軸成分（例えば＜ＧｄｉｒＸｘ、ＧｄｉｒＸｙ、ＧｄｉｒＸｚ＞）を用いていたところを、Ｙ軸ベクトルについてのＸ，Ｙ，Ｚ軸成分＜ＧｄｉｒＹｘ、ＧｄｉｒＹｙ、ＧｄｉｒＹｚ＞に置き換えて、上述したような処理を行う。そのため、処理の詳細説明は省略する。
【０１３１】
次に、ステップＳ１３において、追従Ｚ軸ベクトルについての移動処理が実行される。この処理も、図１８を用いて上述したのと同様の処理を、Ｚ軸を対象として実行するものである。具体的には、上述した各数式等において、Ｘ軸ベクトルについてのＸ，Ｙ，Ｚ軸成分を用いていたところを、Ｚ軸ベクトルについてのＸ，Ｙ，Ｚ軸成分＜ＧｄｉｒＺｘ、ＧｄｉｒＺｙ、ＧｄｉｒＺｚ＞に置き換えて、上述したような処理を行う。そのため、処理の詳細説明は省略する。以上の処理を行うことで、移動後の追従姿勢Ｆｄｉｒが算出される。
【０１３２】
次に、ステップＳ１４において、上記の処理で算出された追従姿勢Ｆｄｉｒが直交正規化される。以上で、追従姿勢算出処理は終了する。
【０１３３】
図１６に戻り、次に、ステップＳ４において、相対姿勢算出処理が実行される。図１９は、上記ステップＳ４で示した相対姿勢算出処理の詳細を示すフローチャートである。図１９において、まず、ステップＳ４１において、上記入力姿勢Ｇｄｉｒと追従姿勢Ｆｄｉｒに基づいて、上記相対姿勢Ｒｄｉｒが算出される。具体的には、以下の数式を用いて、相対姿勢Ｒｄｉｒが算出される。
【数８】
2010020554.tif 000010
【０１３４】
次に、ステップＳ４２において、基本姿勢Ｂｄｉｒと相対姿勢Ｒｄｉｒとに基づいて、上述したようなオフセット補正（基本姿勢の位置に近づける補正）を行うための処理が実行される。具体的には、以下の数式を用いて上述したようなオフセット補正が実行される。    
【数９】
2010020554.tif 000011
このような処理が実行されることで、最終的に剣オブジェクト１０１に反映する姿勢を示す最終姿勢ＳＤｉｒ（最終姿勢データ１５０）が求められることになる。以上で、相対姿勢算出処理は終了する。
【０１３５】
図１６に戻り、相対姿勢算出が終われば、ステップＳ５において、ゲーム処理が実行される。すなわち、算出された最終姿勢Ｓｄｉｒで示される姿勢で剣オブジェクト１０１を描画する処理が実行される。また、その他のゲーム処理も適宜実行される。ステップＳ５の後、ステップＳ６において、ゲーム終了か否かが判断され、ＹＥＳの場合、ゲーム処理を終了し、ＮＯの場合、ステップＳ２に戻って、ゲーム処理が繰り返される。以上で、本実施形態にかかる補正処理の説明を終了する。
【０１３６】
このように、本実施形態では、入力姿勢の動きが接近動作となっているときのみ、追従姿勢を入力姿勢に近づけてから最終的な姿勢の算出を行っている。つまり、入力姿勢が接近動作のときのみ補正を行っている。これにより、プレイヤに違和感を与えることなく入力姿勢の補正を行うことが可能となる。また、ジャイロセンサのみで入力姿勢を算出するような場合であっても、精度の高い入力姿勢を算出することが可能となる。また、ジャイロセンサのみで算出処理を実行することで、入力装置にかかる費用効率面で有利となる。
【０１３７】
なお、上記実施形態では、上記補正処理以外の他のゲーム処理に及ぼす影響を考慮して、上記のような追従姿勢や相対姿勢という概念を用い、入力姿勢（入力姿勢データ１２８）については直接的に変更を加えないようにしていた。これに限らず、他のゲーム処理に影響を及ぼさないことを前提とすれば、上記追従姿勢や相対姿勢を用いずに、上記基本姿勢と入力姿勢との関係のみで処理するようにしてもよい。すなわち、入力姿勢が基本姿勢に接近動作をしているか否かを判定する。この判定の結果、接近動作である場合のみ、当該入力姿勢をより基本姿勢に近づけるように直接的に入力姿勢データ１２８を補正する。そして、当該補正後の入力姿勢データ１２８に基づいて剣オブジェクト１０１の姿勢を変更するようにしてもよい。
【０１３８】
また、入力姿勢の算出に関し、上記実施形態では、Ｘ軸、Ｙ軸、Ｚ軸という３軸それぞれの空間内でのコントローラ５の向きを示す３次元ベクトルを算出することで入力姿勢を算出する場合を例にしたが、これに限らず、コントローラ５の入力姿勢が算出できれば、どのような処理方法を用いても良い。そして、いずれかの処理方法で算出された入力姿勢の動作が、仮想的な姿勢である上記基本姿勢あるいは追従姿勢に対しての接近動作か離反動作かを判定し、接近動作の場合にのみ入力姿勢を補正する処理をおこなうようにすればよい。
【０１３９】
（第２の実施形態）
次に、図２０から図２４を参照して、本発明の第２の実施形態について説明する。第２の実施形態では、上述の第１の実施形態で行ったような補正処理に加え、更にコントローラ８の振り方を判定し、これに基づいて、コントローラ８の向いている方向に関する補正を実行する処理を行う。より具体的には、プレイヤによるコントローラ８の振り始めから振り終わりまでの一連の振り操作（以下、一振り分操作と呼ぶ）を検出し、その振り方が「縦振り（上から下に振り下ろす、または、下から上へ振り上げるような振り方）」であれば、コントローラ８の向いている方向がゲーム内においては正面方向となるように補正する処理を実行する。
【０１４０】
例えば、図２０に示すように、プレイヤがモニタ２を対向した状態でコントローラを振っている状態が正面を向いている状態とする。そして、図２１に示すように、モニタ２に対してプレイヤが９０度右を向いてコントローラ８を振っているような場合、縦振り操作が行われたタイミングで、ゲーム処理においては、テレビ２のほうを向いている、つまり、正面を向いてコントローラ８を振っているものとして扱うような補正を実行する。より具体的には、図２１のような状態で、縦振り操作が検出されたときに、そのときのプレイヤの向いている方向（以下、前方方向と呼ぶ）と、正面方向（図２０の状態）との角度のズレを算出する。そして、剣オブジェクト１０１に、そのズレ角度の分だけ正面方向に向けてＹ軸周りの回転を加えて描画するという処理を実行する。
【０１４１】
これは、例えば、ゲーム画面として真正面に敵オブジェクトが表示されていることを前提とすると、コントローラ８を振っている内に、計算誤差の蓄積などにより、プレイヤが気付かない間に剣オブジェクト１０１の切っ先が斜め前に向いてしまう状態があり得る。あるいは、プレイヤ自身の体の向き（コントローラ８の先端の向き）が多少斜めを向いてしまうような場合もあり得る（極端な例は、図２１に示したような状態である）。この場合、厳密には剣オブジェクト１０１が真正面の敵オブジェクトに当たらないような状態となり得る。そこで、このような状態となっても、以下に説明するような処理を実行することで剣オブジェクト１０１の向きを正面向きに補正し、真正面に表示される敵オブジェクト等に剣オブジェクト１０１を当てるようにするものである。
【０１４２】
ここで、縦振り操作が検出されたときに補正を行うのは、横振り操作の場合は正面方向を正確に算出することが困難であり、その結果、正面からのズレ角度を正確に算出することが困難であるためである。
【０１４３】
なお、当該実施形態に係るゲーム装置３は、上述した第１の実施形態と同様であるため、同一の参照符号を付して詳細な説明を省略する。
【０１４４】
次に、第２の実施形態にかかる処理の概要を説明する。第２の実施形態では、コントローラ８が振られている間（一振り分操作の間）、上述の第１の実施形態で説明したような補正が行われた後の剣オブジェクト１０１の姿勢を示すデータ（上記最終姿勢データ１５０）をフレーム毎にバッファに蓄積する。そして、一振り分操作が終わったことが検出されたときに、蓄積されたデータを解析して、一振り分操作の内容が「縦振り操作」にどの程度近い操作であったかを示す、信頼度係数を算出する。当該信頼度係数は、真っ直ぐ縦に振った場合は”１”という値となり、真横に振った場合は”０”という値になる係数である。更に、上記前方方向を示す前方ベクトルを算出し、正面方向を示す正面ベクトルとの角度の差を算出する。そして、当該角度に基づいて、剣オブジェクト１０１の姿勢をＹ軸周りに回転させることで剣オブジェクトの姿勢を補正する。但し、このとき、上記信頼度係数に応じて補正する角度を調整する。すなわち、信頼度係数が小さいときは、補正する幅も小さくするような調整も行う。また、本実施形態では、一度に上記補正角度分の補正を行わずに、数フレームかけて徐々に補正していく。例えば、ズレ角度が４０度あった場合は、１フレーム毎に１０度ずつ補正し、４フレーム分の処理をかけて補正するような処理を行う。これは、一度で補正を行ってしまうことでプレイヤに違和感を感じさせることを防ぐためである（換言すれば、補正を行っていることをプレイヤに気付かせないようにするためである）。
【０１４５】
次に、第２の実施形態で用いられるデータについて説明する。図２２は、第２の実施形態にかかる外部メインメモリ１２のメモリマップを示す図である。図２２において、第２の実施形態での外部メインメモリ１２には、第１の実施形態で説明した各種データに加えて、姿勢バッファ２０１、回転軸ベクトル２０２、正面ベクトル２０３、真上ベクトル２０４、前方ベクトル２０５、信頼度係数２０６、第１バッファデータ２０７、第２バッファデータ２０８、Ｚ軸差分ベクトル２０９、外積データ２１０、カウンタ２１１、総合補正角度２１２、今回補正角度２１３が記憶される。
【０１４６】
姿勢バッファ２０１には、上記一振り分操作にかかるフレーム毎の剣オブジェクトの姿勢を示すデータ（第１の実施形態において１フレーム毎に算出された最終姿勢データ１５０）が時系列で記憶される。以下の説明では、姿勢バッファ２０１内に格納される各フレームの姿勢データをｂｕｆ［ｎ］と示す（［ｎ］は０から始まる整数であり、配列の添字の役割を果たす。また、数字が小さいほど古いデータであることを示す）。
【０１４７】
回転軸ベクトル２０２は、一振り分操作における回転軸を示すベクトルである。例えば、図８に示したような座標系で、真上から真下にコントローラ８を振りおろした場合は、コントローラ８の先端がＸ軸を中心に回転するような動作になるため、Ｘ軸方向のベクトルが回転軸ベクトルに相当する。
【０１４８】
正面ベクトル２０３は、コントローラ８が正面を向いた状態を定義した単位ベクトルであり、本実施形態では＜０，０，１＞であるとする。
【０１４９】
真上ベクトル２０４は、真上方向を示すための単位ベクトルであり、本実施形態では、上記図８の状態におけるＹ軸ベクトル＜０，１，０＞であるとする。
【０１５０】
前方ベクトルは、コントローラ８の先端が向いている方向（プレイヤが向いている方向）を示すためのベクトルである。例えば、図２０の状態では、前方ベクトルは＜０，０，１＞で示され、図２１のような、右を向いた状態であれば＜−１、０，０＞で示される。
【０１５１】
信頼度係数２０６は、上記のように、一振り分操作がどの程度「縦振り操作」に近いかを示す情報である。当該信頼度係数は、１〜０の範囲の値を採り、後述する処理においては、コントローラ８を真っ直ぐ縦に振った場合（つまり、縦振り操作）は”１”という値となり、真横に振った場合は”０”という値になる。
【０１５２】
第１バッファデータ２０７、第２バッファデータ２０８、Ｚ軸差分ベクトル２０９および外積データ２１０は、以下の処理において、上記姿勢バッファ２０１に格納された姿勢データを解析するために用いられる変数である。また、カウンタ２１１は、後述する処理においてカウンタとして用いられる変数である。
【０１５３】
総合補正角度２１２および今回補正角度２１３は、上述したような補正すべき角度を示す。上記のように、本実施形態では、一度に上記補正角度分の補正を行わずに、数フレームかけて徐々に補正していく。そして、今回補正角度２１３は、総合補正角度２１２で示される角度の内、１フレーム分の処理において補正すべき角度を示す。
【０１５４】
以下、第２の実施形態にかかる処理の詳細を説明する。図２３は、第２の実施形態にかかる処理の全体処理を示すフローチャートである。図２３において、まず、ステップＳ５１において、第１次姿勢算出処理が実行される。この処理では、上記第１の実施形態で説明したような処理が実行される。すなわち、ジャイロセンサからのデータに基づいて入力姿勢を算出し、上記追従姿勢や相対姿勢、基本姿勢を用いて上述したような補正が行われた後の剣オブジェクト１０１の姿勢（上記最終姿勢データ１５０）がこの処理で算出される。
【０１５５】
次に、ステップＳ５２において、コントローラ８が振られているか否かの判定が実行される。すなわち、一振り分操作の途中であるか、コントローラ８を振っていない状態（プレイヤが手を止めている状態）であるかが判定される。これは、例えば、角速度データ１２４のＸ−Ｙ成分の長さが所定の閾値を超えているか否かで判定すればよい。
【０１５６】
ステップＳ５２の判定の結果、コントローラ８が一振り分操作中であると判定されたときは（ステップＳ５２でＹＥＳ）、次に、ステップＳ５３において、直前のフレームでの処理ループにおいても、一振り分操作中であったか否かが判定される。すなわち、一振り分操作が開始された直後であるのか、一振り分操作が継続中の状態であるのかが判定される。この判定に際しては、上記ステップＳ５２の判定の結果を外部メインメモリ１２にフレーム毎に記憶するようにしておき、この判定結果を参照することで一振り分操作の継続中の判定を行えばよい。
【０１５７】
当該判定の結果、一振り分操作が開始された直後のときは（ステップＳ５３でＮＯ）、ステップＳ５４において、姿勢バッファ２０１がクリアされる。一方、直前のフレームにおける処理ループにおいて一振り分操作が行われていたときは（ステップＳ５３でＹＥＳ）、ステップＳ５４の処理は行わずに、ステップＳ５５に処理が進められる。
【０１５８】
次に、ステップＳ５５において、上記ステップＳ５１で算出された最終姿勢データ１５０が姿勢バッファ２０１に格納される。その後、後述するステップＳ５８へ処理が進められる。
【０１５９】
一方、上記ステップＳ５２の判定の結果、コントローラ８の一振り分操作中ではないときは（ステップＳ５２でＮＯ）、ステップＳ５６において、直前のフレームにおける処理ループにおいて、一振り分操作が行われていたか否かが判定される。つまり、一振り分操作が終わったか、一振り分操作が行われていなかったかが判定される。当該判定の結果、一振り分操作が行われていないと判定されたときは（ステップＳ５６でＮＯ）、後述するステップＳ５８に処理が進められる。一方、直前のフレームにおける処理ループにおいて、一振り分操作が行われていた（一振り分操作が終わった）と判定されたときは（ステップＳ５６でＹＥＳ）、続くステップＳ５７において、補正角度算出処理が実行される。
【０１６０】
図２４は、上記ステップＳ５７で示した補正角度算出処理の詳細を示すフローチャートである。本処理では、姿勢バッファ２０１に溜まっている姿勢データを解析し、剣オブジェクト１０１の姿勢（向いている方向）を補正するための角度を算出する処理が実行される。図２４において、まず、ステップＳ７１において、カウンタ２１１に”０”が設定される。また、このとき、姿勢バッファ２０１内に記憶された姿勢データの数（以下、姿勢データ数と呼ぶ）が算出される。
【０１６１】
次に、ステップＳ７２において、回転軸ベクトル２０２が＜０，０，０＞に初期化される。
【０１６２】
次に、ステップＳ７３において、姿勢バッファ２０１内の最初のデータであるｂｕｆ［０］が第１バッファデータ２０７として設定される。続く、ステップＳ７４において、カウンタ２１１に１が加算される。
【０１６３】
続くステップＳ７５において、カウンタ２１１が上記ステップＳ７１で算出された姿勢データ数以上か否かが判定される。つまり、姿勢バッファ２０１内のデータを全てについて以下に述べるような処理が行われたか否かが判定される。当該判定の結果、カウンタ２１１が上記姿勢データ数未満のときは（ステップＳ７５でＮＯ）、次に、ステップＳ７６において、姿勢バッファ２０１中から上記カウンタ２１１で示される姿勢データ、すなわち、ｂｕｆ［カウンタ２１１］が取得され、第２バッファデータ２０８として設定される。例えば、当該処理が最初に実行されたときは、ｂｕｆ［１］で示される姿勢データが第２バッファデータ２０８として設定される。
【０１６４】
次に、ステップＳ７７において、以下の数式を用いて、Ｚ軸差分ベクトル２０９が算出される。
Ｚ軸差分ベクトル＝第２バッファデータのＺ軸ベクトル−第１バッファデータのＺ軸ベクトル
【０１６５】
次に、ステップＳ７８において、以下の数式を用いて、回転軸ベクトル２０２が算出される。
外積データ＝Ｚ軸差分ベクトル×第２バッファデータのＺ軸ベクトル
回転軸ベクトル＝回転軸ベクトル＋外積データ
すなわち、上記Ｚ軸差分ベクトルと第２バッファデータのＺ軸ベクトルとの外積を算出することで、上記２フレーム分の姿勢にかかる回転軸が算出される。たとえば、本処理が最初に実行されたときは、ｂｕｆ［０］とｂｕｆ［１］で示される姿勢データの変化における回転軸が算出される。そして、当該算出された回転軸が上記回転軸ベクトル２０２に加算される。
【０１６６】
次に、ステップＳ７９において、次の処理ループでの処理のために、第２バッファデータ２０８が第１バッファデータ２０７として設定される。そして、上記ステップＳ７４の処理に戻り、処理が繰り返される。
【０１６７】
一方、上記ステップＳ７５の判定の結果、カウンタ２１１が上記ステップＳ７１で算出された姿勢データ数以上と判定されたときは（ステップＳ７５でＹＥＳ）、姿勢バッファ２０１内のデータ全てについて上記のような回転軸の算出及び回転軸ベクトル２０２への加算処理が行われたことになる。このときは、ステップＳ８０において、回転軸ベクトル２０２の正規化が実行される。
【０１６８】
次に、ステップＳ８１において、前方ベクトル２０５が算出される。これは、回転軸ベクトル２０２と上記真上ベクトル２０４との外積を求めることで算出される。例えば、上記図８に示すような座標系を例にすると、真っ直ぐ縦振り操作を行った場合は、コントローラ８の姿勢の変化はＸ軸周りを回転するような変化となる。すなわち、回転軸ベクトルはＸ軸方向のベクトルになり、真上方向を示すＹ軸ベクトルとの外積を求めると、前方ベクトル２０５としてＺ軸方向のベクトルが算出されることになる。
【０１６９】
次に、ステップＳ８２において、上記信頼度係数２０６が算出される。これは、前方ベクトル２０５の長さに所定の定数αを乗じることで求められる。
信頼度係数＝前方ベクトルの長さ×定数α
上記のように、信頼度係数２０６は、コントローラ８の振り方が縦振り操作にどれだけ近かったかを示す係数、いわば「縦振り度」であり、上記前方ベクトル２０５の長さが”１”に近いほど、縦振り度が大きいことになる。例えば、コントローラ８を真っ直ぐ縦に振り下ろした動きであれば、上記のように回転軸はＸ軸方向のベクトルとなり、前方ベクトル２０５の長さは１となるが、仮に真横に振ったとすると、回転軸はＹ軸方向のベクトルとなり、前方ベクトル２０５の長さは“０”となる。
【０１７０】
次に、ステップＳ８３において、補正角度の更新処理が実行される。具体的には、以下のような処理が実行される。まず、ＣＰＵ１０は、前方ベクトル２０５の逆余弦を算出することで、正面ベクトル２０３と前方ベクトル２０５との角度差（すなわち、正面からのズレ角度）を算出する。次に、ＣＰＵ１０は、前方ベクトル２０５のＸ軸成分が“０”より大きいか否かを判定し、“０”より大きい場合、すなわち、コントローラ８の先端が左向き（左寄り）の場合は、上記算出したズレ角度の符号（プラス／マイナス）を反転する。つまり、コントローラ８が正面から右向きにずれているか左向きにずれているかを判定して、いずれの場合も、補正する方向が正面方向になるように調整される（例えば、上記逆余弦の算出の結果、角度差が４５度と算出されたとき、コントローラ８が左向きなら−４５度、右向きなら＋４５度補正する）。更に、ＣＰＵ１０は、以下の式を用いて、信頼度係数２０６が小さい場合は、補正する幅も小さくするような調整を加えることで、総合補正角度２１２を算出する。
総合補正角度＝算出した補正角度×信頼度係数
以上で、補正角度算出処理は終了する。
【０１７１】
図２３に戻り、次に、ステップＳ５８において、今回補正角度２１３が算出される。上記のように、本実施形態では、一度に総合補正角度２１２分の補正を行わずに、数フレームかけて徐々に補正していくため、現在のフレームでの処理でどの程度補正するのかを算出する。具体的には、以下の式を用いて、総合補正角度２１２の数割だけ補正するような調整が行われる。
今回補正角度＝総合補正角度×０．０３
総合補正角度＝総合補正角度−今回補正角度
【０１７２】
次に、ステップＳ５９において、上記今回補正角度２１３で示される分だけ、剣オブジェクト１０１の姿勢がＹ軸回りに回転される。そして、回転後の姿勢が反映された剣オブジェクト１０１がゲーム画面として描画される。以上で、第２の実施形態にかかる処理が終了する。
【０１７３】
このように、第２の実施形態では、縦振り操作が行われたときに、コントローラ８の向きが正面向きとなるような補正を行う。これにより、プレイヤに違和感を与えることなく、入力姿勢について補正を行い、ゲーム処理に反映させることが可能となる。
【０１７４】
なお、上記第２の実施形態では、第１の実施形態で説明したような補正処理が実行された後の姿勢を更に補正する場合を例にしたが、第１の実施形態にかかる補正処理は行わずに、入力姿勢に対して上記のような向きの補正のみを行うようにしてもよい。
【０１７５】
また、上記各実施形態では、ジャイロセンサからの出力に基づいてコントローラ５の姿勢を算出する場合を例としていたが、例えば加速度センサからの出力に基づいてコントローラ５の姿勢を算出する場合にも本発明は適用可能である。もちろん、加速度センサとジャイロセンサの双方の出力を用いてコントローラ５の姿勢を算出する場合であっても適用可能であることはいうまでもない。
【産業上の利用可能性】
【０１７６】
本発明にかかる情報処理プログラムおよび情報処理装置は、ユーザに違和感を感じさせることなく、検出された入力装置の姿勢を補正して情報処理に反映することができ、ゲーム装置等に有用である。
【図面の簡単な説明】
【０１７７】
【図１】ゲームシステム１の外観図
【図２】ゲーム装置３の構成を示すブロック図
【図３】入力装置８の外観構成を示す斜視図
【図４】コントローラ５の外観構成を示す斜視図
【図５】コントローラ５の内部構造を示す図
【図６】コントローラ５の内部構造を示す図
【図７】入力装置８の構成を示すブロック図
【図８】入力装置８の姿勢を表す３次元ベクトルの概念を説明するための図
【図９】基本姿勢を説明するための図
【図１０】入力姿勢と追従姿勢の基本的な概念を説明するための図
【図１１】本実施形態における入力姿勢と追従姿勢との関係を説明するための図
【図１２】相対姿勢の基本概念を示す図
【図１３】接近動作か否かを判定する処理の概念を説明するための図
【図１４】接近動作か否かを判定する処理の概念を説明するための図
【図１５】外部メインメモリ１２のメモリマップを示す図
【図１６】ゲーム装置３によって実行される補正処理の全体処理を示すフローチャート
【図１７】図１６のステップＳ３で示した追従姿勢算出処理の詳細を示すフローチャート
【図１８】図１７のステップＳ１１で示した追従姿勢Ｘ軸移動処理の詳細を示すフローチャート
【図１９】図１６のステップＳ４で示した相対姿勢算出処理の詳細を示すフローチャート
【図２０】第２の実施形態について説明するための図
【図２１】第２の実施形態について説明するための図
【図２２】第２の実施形態にかかる外部メインメモリ１２のメモリマップを示す図
【図２３】第２の実施形態にかかる処理の全体処理を示すフローチャート
【図２４】図２３のステップＳ５７で示した補正角度算出処理の詳細を示すフローチャート
【符号の説明】
【０１７８】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置
４…光ディスク
５…コントローラ
７…ジャイロセンサユニット
８…入力装置
１０…ＣＰＵ
１１…システムＬＳＩ
１１ａ…入出力プロセッサ
１１ｂ…ＧＰＵ
１１ｃ…ＤＳＰ
１１ｄ…ＶＲＡＭ
１１ｅ…内部メインメモリ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２…アンテナ
２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
３０…基板
３１…ハウジング
３２…操作部
３３…コネクタ
３４…ＬＥＤ
３５…撮像情報演算部
３６…通信部
３７…加速度センサ
３８…赤外線フィルタ
３９…レンズ
４０…撮像素子
４１…画像処理回路
４２…マイコン
４３…メモリ
４４…無線モジュール
４５…アンテナ
４８…バイブレータ
４９…スピーカ
５３…プラグ
５４…マイコン
５５…２軸ジャイロセンサ
５６…１軸ジャイロセンサ
【図１】
2010020554.tif 000012
【図２】
2010020554.tif 000013
【図３】
2010020554.tif 000014
【図４】
2010020554.tif 000015
【図５】
2010020554.tif 000016
【図６】
2010020554.tif 000017
【図７】
2010020554.tif 000018
【図８】
2010020554.tif 000019
【図９】
2010020554.tif 000020
【図１０】
2010020554.tif 000021
【図１１】
2010020554.tif 000022
【図１２】
2010020554.tif 000023
【図１３】
2010020554.tif 000024
【図１４】
2010020554.tif 000025
【図１５】
2010020554.tif 000026
【図１６】
2010020554.tif 000027
【図１７】
2010020554.tif 000028
【図１８】
2010020554.tif 000029
【図１９】
2010020554.tif 000030
【図２０】
2010020554.tif 000031
【図２１】
2010020554.tif 000032
【図２２】
2010020554.tif 000033
【図２３】
2010020554.tif 000034
【図２４】
2010020554.tif 000035