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