情報処理プログラムおよび情報処理装置
【課題】入力装置の動きを正確に検知する。
【解決手段】コントローラは、所定の撮像対象を撮像するための撮像手段と、当該入力装置に加わる加速度を検出する加速度検出手段とを備えている。ゲーム装置は、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像に関する当該撮像画像内における対象位置を繰り返し算出し、所定期間内に算出された対象位置に基づいて入力装置の所定の動き(上方向への動き)を検知する。また、ゲーム装置は、加速度検出手段によって検出された加速度に基づいて入力装置の所定の動きを検知する。さらに、ゲーム装置は、第1動き判別ステップおよび第2動き判別ステップの少なくともいずれかで所定の動きが検知された場合、所定の処理(プレイヤキャラクタにジャンプ動作を行わせる処理)を実行する。
【解決手段】コントローラは、所定の撮像対象を撮像するための撮像手段と、当該入力装置に加わる加速度を検出する加速度検出手段とを備えている。ゲーム装置は、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像に関する当該撮像画像内における対象位置を繰り返し算出し、所定期間内に算出された対象位置に基づいて入力装置の所定の動き(上方向への動き)を検知する。また、ゲーム装置は、加速度検出手段によって検出された加速度に基づいて入力装置の所定の動きを検知する。さらに、ゲーム装置は、第1動き判別ステップおよび第2動き判別ステップの少なくともいずれかで所定の動きが検知された場合、所定の処理(プレイヤキャラクタにジャンプ動作を行わせる処理)を実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラムおよび情報処理装置に関し、より特定的には、撮像手段および動きセンサを備える入力装置の動きや傾きに応じた処理を行う情報処理装置および当該情報処理装置において実行される情報処理プログラムに関する。
【背景技術】
【0002】
従来、入力装置の動きを検出することによって、入力装置の動きに応じた入力指示を判別することが行われている。例えば、特許文献1には、ユーザが加速度センサを備えた入力装置を動かすことによって入力指示を行うことができる装置が記載されている。この装置においては、加速度センサによって入力装置の動きを判別して、入力装置の動きに応じた処理を実行するようにしている。
【特許文献1】特開2003−333361号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
加速度センサなどの動きセンサによって入力装置の大まかな動きを検知することは可能であるが、入力装置の動きを正確に検知することは困難である。なぜなら、例えば入力装置をある方向に振った場合のように、入力装置が比較的単純な移動を行った場合でも、その時に検出される加速度の変化は複雑なものになるので、加速度から入力装置の動きを解析する処理が困難になるからである。
【0004】
それ故、本発明の目的は、入力装置の動きを正確に検知することができる情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【0005】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0006】
第1の発明は、入力装置(コントローラ5)の動きに応じた処理を行う情報処理装置(ゲーム装置3)のコンピュータ(CPU10等)で実行される情報処理プログラム(ゲームプログラム60)である。入力装置は、所定の撮像対象(マーカ部6)を撮像するための撮像手段(撮像素子40)と、当該入力装置の動きを検出する動き検出手段(加速度センサ37)とを備えている。情報処理プログラムは、第1判別ステップ(S38)と、第2判別ステップ(S39またはS41)と、第1処理実行ステップ(S42)とをコンピュータに実行させる。第1判別ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動きに基づいて、入力装置の所定の動き(上方向への動き)を判別する。第2判別ステップにおいて、コンピュータは、動き検出手段による検出結果に基づいて入力装置の所定の動き(上方向の動き)を判別する。処理実行ステップにおいて、コンピュータは、第1判別ステップによる判別結果、および、第2判別ステップによる判別結果に応じて、所定の処理(プレイヤキャラクタにジャンプ動作を行わせる処理)を実行する。
【0007】
なお、上記第1の発明および後述する第10の発明において、入力装置と情報処理装置とは別体であってもよいし、一体であってもよい。つまり、第1および第2の発明では、ユーザによって把持される入力装置が有線または無線で情報処理装置と通信可能に構成される形態(図1)であってもよいし、ユーザによって把持される筐体(ハウジング)内に、入力装置と上記情報処理プログラムを実行する情報処理装置とが搭載される形態であってもよい。
【0008】
上記第1の発明において、「撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動き」は、例えば、後述する実施形態におけるマーカ座標や、マーカ座標の中点や、ポインティング位置の動き(移動)によって表される。つまり、マーカ座標や、マーカ座標の中点や、ポインティング位置を繰り返し取得し、取得した履歴から撮像対象の画像の動きを判断することができる。また、撮像対象の画像の動きは、撮像対象の画像の特徴点の位置を算出し、当該特徴点の位置の動きとして算出されてもよい。
【0009】
上記第1の発明において「動き検出手段」は、入力装置に一体的に設けられ、撮像手段とは異なる手段であり、入力装置の動きに応じてデータを出力するセンサである。例えば、直線運動に応じた値を出力するものでもよいし、回転運動に応じた値を出力するものでもよい。直線運動に応じた値を出力するものとして、加速度センサをあげることができ、回転運動に応じた値を出力するものとして、ジャイロセンサをあげることができる。また、加速度センサおよびジャイロセンサは、多軸検出可能なものだけなく1軸検出のものでもよい。また、これらのセンサを組み合わせて、より正確な検出を行うものであってもかまわない。また、上記第1の発明において、判別ステップにおいては、入力装置の直線運動または回転運動を判別する。なお、加速度センサから出力されるデータに後述の処理をおこなうことにより、加速度センサを用いて回転運動を判別することもできる。第1判別ステップおよび第2判別ステップは、用いるセンサの種類に応じて、入力装置の直線運動およびまたは回転運動を判別する。
【0010】
加速度センサを用いて回転運動を判別する例を説明する。単純な例として、1軸の加速度センサとし、入力装置の所定方向に生じる加速度を加速度センサで検出する。そして、加速度センサが検出した加速度を用いて、重力加速度成分の変化を分析することによって、重力方向に直交する軸周りに入力装置が回転したことを判定することが可能である。
【0011】
ここで、加速度センサを用いる場合、加速度センサの検出軸が入力装置の回転運動における回転軸と一致する場合など、加速度センサの検出軸の傾きが変化しない向きに入力装置が回転する場合には、重力加速度の検出軸方向の成分が変化しないので、入力装置の回転を判断することが難しい。一方、加速度センサの検出軸が入力装置の回転運動における回転軸と一致しない場合であれば、入力装置の回転が判断できる。
【0012】
なお、開発者が予め定める正しい操作方法に従って操作されることを前提として正しい処理が行われるようにしておけば十分なケースも多く、その場合には、それ以外の操作をした場合に正しい処理が行われないとしても格段の問題は生じない。したがって、取扱説明書や説明画面などにおいて、正しい操作方法として、入力装置の回転操作の方法(より具体的には、どの軸周りに回転操作させるか)を指示しておけば、ユーザはその指示にしたがって入力装置を回転させる操作するのであり、ユーザが指示された操作から逸脱した操作を行った場合には、入力装置の回転を正確に判断することができないが、その逸脱した程度が許容範囲内であれば、処理としてもおおよそ正しい処理結果が得られる。
【0013】
なお、加速度センサを用いる場合、例えば以下の方法によって加速度センサの出力値から入力装置の傾き(または入力装置の回転)を算出することが可能である。すなわち、加速度センサは、入力装置に作用する重力加速度の成分のみならず、入力装置の動きに応じて作用する加速度の成分を検出するが、これら両方の成分を含む加速度の値のそのままでは入力装置の傾きを正確に算出することができないことがある。したがって、当業者にとって既知の処理により、重力加速度の成分を抽出または選出し、重力加速度の成分に基づいて入力装置の傾きを算出するようにしてもよい。例えば、単純な例としては、加速度センサが検出した加速度の大きさが重力加速度の大きさよりも大きな値(または、十分大きな値)を示すときには、検出された加速度の値が重力加速度を示していないと判断して、当該加速度の値を排除する(入力装置の傾きの算出には用いない)ような処理としてもよい。また、加速度センサが検出した加速度の値の変動が小さいときにのみ、検出された加速度の値が重力加速度を示しているとして、当該加速度の値を姿勢の分析に採用する(入力装置の傾きの算出に用いる)ような処理としてもよい。さらに、加速度センサが検出した加速度の値から当該加速度の高周波成分を除去してもよい。また、入力装置を激しく動かす必要のない情報処理の場合には、入力装置の動きに応じて作用する加速度の成分を除去する処理をしなくてもよい。なぜなら、入力装置の動きに応じた加速度が検出されても、ユーザが入力装置を激しく動かさなければ、ある程度正しい結果が得られるのであって、十分な実用性を有するからである。
【0014】
なお、多軸検出可能な加速度センサを用いて、当該多軸方向にそれぞれ生じた加速度の値を用いる場合には、入力装置の回転の大きさを算出して、より詳細な判断することが可能である。例えば、加速度センサが検出する2つの軸方向の加速度の値を用いて、所定の演算処理をすることにより、入力装置の回転角度を算出することが可能である。典型的には、2つの軸方向の加速度の値を逆正接関数に代入するなどの、三角関数を利用した演算処理を、入力装置の回転角度の算出に用いることができる。または、加速度センサが検出する2つの軸方向の加速度を成分とするベクトルによっても、回転の大きさを判断することができる。
【0015】
次に、第1の発明における動き検出手段としてジャイロセンサを用いて回転運動を判別する場合を説明する。この場合、入力装置を所定軸まわりに回転運動させると、ジャイロセンサはその回転を直接検出して、角速度データを出力する。そして、出力された角速度データに基づいて、入力装置の回転を直接的に判定することが可能である。
【0016】
また、第1の発明において、第1判別ステップでは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、入力装置の所定の動きを判別してもよいが、これに限らず、当業者にとって周知の撮像画像解析方法により、入力装置の動きは判別できる。
【0017】
また、第1の発明において、第1判別ステップで判別される入力装置の動きと、第2判別ステップで判別される入力装置の動きは同一の動きとしてもよいし、異なる動きとしてもよい。
【0018】
(1)第1判定ステップと第2判定ステップが同一の動きを判別する場合
この場合、例えば、第1判別ステップおよび第2判別ステップは、いずれも、入力装置が所定方向に直線運動(移動)したことを判別してもよいし、または、いずれも、入力装置が所定軸を中心に回転したことを判別してもよい。まず、第1判定ステップと第2判定ステップがともに所定方向に直線運動したことを判別する場合について説明する。第1判別ステップは、撮像画像において対象物が移動したことに基づいて、入力装置が撮像方向に対して直交する方向に直線運動したことを判別できる(なお、撮像画像において対象物が移動した場合、入力装置が回転運動した可能性もある。しかしながら、入力装置の動きを正確に判断する必要がない場合には、撮像画像において対象物が移動したことに基づいて、入力装置が撮像方向に対して直交する方向に直線運動したと判別してもよい)。そして、動き検出手段として加速度センサを、撮像方向に対して直交する少なくとも1方向に生じる加速度を検出可能に設けることにより、第2判別ステップでは、入力装置が撮像方向に対して直交する方向に直線運動したことを判別できる。第1判別ステップは、撮像方向に対して直交する任意の方向への直線運動を判別可能であるが、そのうち、加速度センサの検出方向についての直線運動を判別することにより、第1判別ステップおよび第2判別ステップは共通の方向の直線運動を判別できる。または、撮像方向に対して直交する2方向に生じる加速度を2軸以上の加速度センサで検出可能に設ければ、第2判別ステップは、撮像方向に対して直交する任意の方向への直線運動を判別できるので、第1判別ステップおよび第2判別ステップは共通の方向の直線運動を判別可能である。また、2軸または3軸の加速度センサを用いる場合、入力装置の姿勢を判断することが可能であり(2軸の加速度センサの場合には2次元的な姿勢のみ)、当該姿勢に応じて、加速度センサの検出値や撮像画像を補正することにより、第1判別ステップおよびまたは第2判別ステップは、鉛直方向または水平方向の直線運動を判別することもできる。
【0019】
次に、第1判定ステップと第2判定ステップがともに所定軸を中心に回転運動したことを判別する場合について説明する。第1判別ステップは、撮像方向を軸とした回転を判別できる。そして、動き検出手段として加速度センサまたはジャイロセンサを用いて、例えば、加速度センサを撮像方向に直交する方向に生じる加速度を検出可能に設け、典型的な例として撮像方向を水平方向として回転させれば、第2判定ステップにおいて、加速度センサにより検出される重力加速度の大きさに基づいて、撮像方向を軸とする回転を判別できる。また、2軸以上の加速度センサを用いて、撮像方向に直交する2方向に生じる加速度を検出可能に設けることにより、2つの検出値に基づいて、撮像方向を軸とする回転をより正確に判別できる。ジャイロセンサを用いる場合には、撮像方向を軸とする回転を検出可能に設けることにより、第2判定ステップは、当該回転を直接判別できる。また、入力装置が撮像方向に直交する方向を軸として回転したときには、撮像画像において対象物が当該軸に直交する方向に移動するから、これに基づいて、第1判定ステップは、撮像方向に直交する方向を軸とした回転を判別することも可能である(撮像画像において対象物が移動したときには、入力装置が直線運動した可能性もあるが、入力装置の動きを正確に判断する必要がない場合には、撮像方向に直交する方向を軸とした回転と判別してよいことは前述と同様)。そして、加速度センサを撮像方向に生じる加速度を検出可能に設けて、典型的な例として撮像方向が鉛直上下方向に変化するように回転させれば、第2判定ステップにおいて、加速度センサにより検出される重力加速度の大きさに基づいて、撮像方向に直交する方向を軸とする回転を判別できる。また、2軸以上の加速度センサを用いて、撮像方向および撮像方向に直交する方向に生じる加速度を検出可能に設けることにより、2つの検出値に基づいて、撮像方向に直交する方向を軸とする回転をより正確に判別できる。ジャイロセンサを用いる場合には、撮像方向に直交する方向を軸とする回転を検出可能に設けることにより、第2判定ステップは、当該回転を直接判別できる。このようにして、第1判定ステップおよび第2判定ステップは共通の軸を中心とする回転を判別できる。
【0020】
なお、第1判定ステップと第2判定ステップが同一の動きを判別する場合は、第1処理実行ステップは、第1判定ステップと第2判定ステップのいずれかで当該動きの判別がされた場合に所定の処理を実行し、すなわち、第1判定ステップと第2判定ステップは相補的に当該動きの判別をおこなう。
【0021】
(2)第1判定ステップと第2判定ステップが異なる動きを判別する場合
この場合、例えば、第1判定ステップが第1方向の直線運動を判別し、第2判定ステップが第2方向の直線運動を判別するようにしてもよいし、または、第1判定ステップが第1軸まわりの回転運動を判別し、第2判定ステップが第2軸回りの回転運動を判別するようにしてもよい。さらには、第1判定ステップが直線運動を判別し、第2判定ステップが回転運動を判別するか、または、第1判定ステップが回転運動を判別し、第2判定ステップが直線運動を判別してもよい。
【0022】
例えば、動き検出手段として加速度センサを用い、加速度センサが撮像方向に生じる加速度を検出可能に設ける。第1判別ステップでは、入力装置が撮像方向に対して直交する方向に直線運動したことを判別できる。そして、第2判別ステップでは、入力装置が撮像方向に直線運動したことを判別できるので、両者により、入力装置の撮像方向への直線運動と撮像方向に直交する方向の直線運動を判別できる。
【0023】
または、動き検出手段として、加速度センサを撮像方向に生じる加速度を検出可能に設け(または、撮像方向および撮像方向に直交する方向に生じる加速度を検出可能に設け)、または、撮像方向に直交する方向を軸とする回転運動を検出可能にジャイロセンサを設ける。第1判別ステップでは、入力装置が撮像方向を軸として回転運動したことを判別できる。そして、第2判別ステップでは、入力装置が撮像方向に直交する方向を軸として回転運動したことを判別できるので、両者により、入力装置の撮像方向を軸とする回転と撮像方向に直交する方向を軸とする回転を判別できる。
【0024】
または、動き検出手段として、加速度センサを撮像方向に直交する方向に生じる加速度を検出可能に設ける。第1判別ステップは、入力装置が撮像方向を軸として回転運動したことを判別できる。そして、第2判別ステップは、入力装置が撮像方向に直交する方向に直線運動したことを判別できるので、両者により、入力装置の撮像方向を軸とする回転と撮像方向に直交する方向の直線運動を判別できる。
【0025】
または、動き検出手段として、加速度センサを撮像方向に方向に生じる加速度を検出可能に設ける。第1判別ステップは、入力装置が撮像方向を軸として回転運動したことを判別できる。そして、第2判別ステップは、入力装置が撮像方向に直線運動したことを判別できるので、両者により、入力装置の撮像方向を軸とする回転と撮像方向の直線運動を判別できる。
【0026】
なお、第1判定ステップおよび第2判定ステップで判別される動きは、単なる直線運動や回転運動に限らず、所定の軌跡を描くような動き等、複数種類の運動を組み合わせた動きを判別してもよい。
【0027】
また、第1処理実行ステップは、第1判別ステップの判別結果を用いて第1処理をし、第2判別ステップの判別を用いて当該第1処理と異なる第2処理を実行してもよいし、後述の実施例のように、第1判別ステップの判別結果と第2判別ステップの判別結果を総合して入力装置の回転をより詳細に判別して、当該判別結果を用いて所定の処理を実行してもよい。前者の場合、例えば、第1判別ステップの判別結果に応じて(すなわち、撮像手段の撮像方向を軸とした回転に応じて)、オブジェクトを左右方向(画面の左右方向またはオブジェクトの左右方向)に移動制御したり、オブジェクトを回転表示(画面に垂直な方向を軸として回転、または、オブジェクトの前後方向を軸として回転)したりしてもよい。また、第2回転判別ステップの判別結果に応じて(すなわち、撮像手段の撮像方向と異なる方向を軸とした回転に応じて)、オブジェクトを前後方向(画面の奥行き方向またはオブジェクトの前後方向)に移動制御したり、オブジェクトを上下方向(画面の上下方向またはオブジェクトの上下方向)に移動制御したり、オブジェクトを回転表示(画面に並行な方向を軸として回転、または、オブジェクトの左右方向を軸として回転)したりしてもよい。より一般的には、第1判別ステップの判別結果を用いて、オブジェクトに第1動作をさせ、第2判別ステップの判別結果を用いて、オブジェクトに当該第1動作と異なる第2動作をさせてもよい。すなわち、入力装置の異なる2つの軸まわりの回転を検出して、それぞれの回転に応じて、異なる2つの処理を実行することにより、入力装置の回転操作によって異なる2つの処理のための入力をおこなうことができる。
【0028】
第2の発明においては、第2判別ステップにおいて、コンピュータは、第1判別ステップで判別される所定の動きと同じ種類の動き(たとえば、上方向の動き)を判別してもよい。このとき、第1処理実行ステップにおいて、コンピュータは、第1判別ステップおよび第2判別ステップの少なくともいずれかで所定の動きが判別された場合、所定の処理を実行する。
【0029】
第3の発明においては、動き検出手段は加速度センサであってもよい。このとき、第1判別ステップにおいて、コンピュータは、撮影画像に含まれる撮像対象の当該画像内での移動に基づいて、入力装置が所定方向に移動または回転したことを判別してもよい(S38)。このとき、第2判別ステップにおいて、コンピュータは、加速度センサによる検出結果から算出される入力装置の動きに基づいて入力装置が所定方向に移動したことを判別する(S41)。第1処理実行ステップにおいて、コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置の動きが行われたことが判別された場合、前記所定の処理を実行する。
【0030】
また、第3の発明における「所定方向」は、入力装置における所定方向(入力装置において固定された方向;例えば、図3におけるX軸方向またはY軸方向など)でもよいし、鉛直方向や水平方向であってもよい。後者の場合には、第2判別ステップにおいては、例えば、加速度センサを所定方向の加速度を検出可能に設け、加速度センサの検出結果から重力加速度の成分を除去することによって、入力装置の動きを算出することができる。また、例えば、加速度センサを1軸以上の加速度センサとして(3軸が好ましい)、当該加速度センサの出力に基づいて入力装置の現在の姿勢(2軸の場合は2次元の姿勢)を算出し、第1判別ステップおよび第2判別ステップは、当該姿勢に基づいて加速度センサの出力値や撮像画像を補正することによって入力装置の動きを算出することができる。このように算出される入力装置の動きから、入力装置が所定方向へ移動したことを判別することができる。なお、第1判別ステップにおいては、姿勢に基づく回転補正をせず、(ユーザが入力装置を正しく把持していることを前提として、)入力装置が鉛直方向(または水平方向)に移動したことを判断してもよい(すなわち、ユーザが正しく把持した状態で鉛直方向となるような入力装置における所定方向(例えば、後述の図3におけるY軸方向)に移動したことを判断してもよい)。このとき、第2判別ステップにおいては、姿勢に基づく補正を行う。これにより、(ユーザが入力装置をどのように把持していたとしても)実際の現姿勢における鉛直方向(または水平方向)に移動したことを判断してもよい。
【0031】
第4の発明においては、情報処理プログラムは、加速度センサによる検出結果から算出される、水平方向(より特定的には、撮像方向に垂直な水平方向)を軸とした回転に関する入力装置の傾きに基づいて、当該軸を中心とした入力装置の回転を判別する第3判別ステップ(S39)をコンピュータにさらに実行させてもよい。このとき、第1判別ステップにおいて、コンピュータは、入力装置が鉛直方向に移動または回転したことを判別する。第2判別ステップにおいて、コンピュータは、入力装置が鉛直方向に移動したことを判別する。第1処理実行ステップにおいて、コンピュータは、第1判別ステップ、第2判別ステップ、および、第3判別ステップの少なくともいずれかで動きが行われたことが判別されたときに、前記所定の処理を実行する。
【0032】
また、加速度センサは、少なくとも1軸の加速度を検出可能であり、入力装置における所定方向(入力装置に対して固定される方向)に生じる加速度を検出可能なように入力装置に設けられる。第2傾き算出ステップにおいては、加速度センサの検出方向についての重力加速度成分を判断し、これにより、当該検出方向に直交する方向を軸とした回転に関する傾きを算出することができる。例えば、加速度センサが撮像手段の撮像方向(例えば、後述する図3におけるZ軸方向)に生じる加速度を検出可能となるように設けても良く、この場合、撮像方向が鉛直上下方向に変化するような入力装置の傾きの変化により、撮像方向に生じる重力加速度成分が変化するので、これを加速度センサにより検出することにより、撮像方向に直交する水平軸を中心とする回転に関する傾き(これは撮像軸が水平面と成す角度である)を判定することができる。
【0033】
また、2軸の加速度を検出可能な加速度センサを用いて、撮像手段の撮像方向(例えば、後述する図3におけるZ軸方向)およびそれに直交する方向A(例えば、後述する図3におけるY軸方向)に生じる加速度を検出可能となるように設けてもよい。この場合、撮像方向および当該直交する方向Aがともに鉛直上下方向に変化するような入力装置の傾きの変化により(例えば、後述する図3におけるZ軸およびY軸がともに鉛直上下方向に変化するような入力装置の傾きの変化により)、加速度センサによる2方向の検出値がいずれも変化して、その2つの検出値により、撮像方向に直交し、かつ、方向Aにも直交する方向(例えば、後述する図3におけるX軸方向)を軸とした回転に関する傾き(これは撮像軸が水平面と成す角度である)を算出することが可能である。
【0034】
なお、本明細書において、「ある方向を軸とした回転に関する傾き」とは、当該ある方向を軸とする回転により増減する傾きのことであり、基準姿勢からの当該回転の角度が傾き角度となるような傾きのことである。より具体的には、入力装置における軸(入力装置に対して固定される軸;例えば、後述の図3におけるX軸、Y軸、またはZ軸)のうちある方向(例えば、図3におけるZ軸方向)に直交する所定軸(例えば、図3におけるX軸またはY軸)について、現姿勢における当該所定軸が、基準姿勢における当該所定軸を基準として、当該ある方向を軸としてどの程度回転しているかを示すものである。
【0035】
なお、第3判別ステップでは、加速度センサの検出値に基づいて、水平方向を軸とした回転に関する傾きを判定または算出し、それに基づいて、当該軸を中心とした回転を判別するが、当該水平方向を軸とした回転に関する傾き(水平方向に対する傾き)は、例えば次のようにして算出することができる。
(1)ユーザが所定の操作をすることを前提にして、水平方向に対する傾きを算出する設計する場合
入力装置に設定される所定の1軸(例えば、後述する実施形態で言えば、図3に示すX軸)に垂直な1軸(例えば、後述する実施形態で言えば、図3に示すY軸またはZ軸)に生じる加速度を検出可能なように加速度センサを設けることによって、ユーザが、当該所定の1軸が水平方向を向く状態を保ったまま、当該所定の1軸を中心として入力装置を回転(すなわち、当該垂直な1軸が鉛直上下方向に向きを変えるような回転)させることを前提として、当該水平方向に対する傾きを算出することができる。また、この場合、上記所定の1軸に垂直な2軸(例えば、後述する実施形態で言えば、Y軸およびZ軸)に生じる加速度を検出可能なように加速度センサを設けることによって、当該垂直な2軸に生じる2つの加速度の検出値を用いてより正確に傾きを検出することができる。
【0036】
(2)ユーザが入力装置をどのように操作したとしても、水平方向に対する傾きを算出可能に設計する場合
上述の(1)は、ユーザが上記所定の1軸が水平方向に向く状態で回転させることを前提とした設計であったが、ユーザが入力装置の任意の軸が水平方向に向く状態で回転させたとしても、水平方向に対する傾きを算出できる設計も可能である。この場合、3軸の加速度を検出する加速度センサを用いればよい。例えば、後述する実施形態において説明する方法で当該所定の水平軸まわりの回転に関する傾きを算出することができる。
【0037】
また、第1判別ステップおよび第2判別ステップにおいて鉛直方向の移動等を判別する場合においても、上記(1)および(2)と同様、(1)ユーザが所定の操作を行うことを前提とする場合と、(2)任意の姿勢の状態で入力装置が操作される場合とのいずれの方法で判別が行われてもよい。例えば、第1判別ステップにおいては、撮像画像上における撮像対象の画像の位置の変化に基づいて鉛直方向の移動を判別することが可能である。すなわち、(1)の場合、所定の1軸方向に関する位置(座標)の変化に基づいて鉛直方向の移動を判別してもよい。(2)の場合、撮像対象の画像の位置座標を入力装置の姿勢(例えば加速度センサの出力結果から算出することができる)に応じて補正することによって、入力装置の姿勢を考慮した位置を算出し、算出された位置の変化に基づいて鉛直方向の移動を判別してもよい。また、例えば、第2判別ステップにおいては、(1)の場合、所定の1軸方向に関する加速度の変化に基づいて鉛直方向の移動を判別してもよい。また、(2)の場合、3軸方向の加速度を表すベクトルを、入力装置の姿勢に応じて補正する(例えばステップS8の処理)ことによって、入力装置の姿勢を考慮したベクトルを算出し、算出されたベクトルの変化に基づいて鉛直方向の移動を判別してもよい。
【0038】
第5の発明において、情報処理プログラムは、第1傾き算出ステップ(S22)と、第2傾き算出ステップ(S5)と、姿勢算出ステップ(S27)とを、コンピュータにさらに実行させてもよい。第1傾き算出ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像に関する当該撮像画像内における傾きに基づいて、撮像手段の撮像方向を軸とした回転に関する入力装置の傾きを第1の傾きとして算出する。第2傾き算出ステップにおいて、コンピュータは、加速度センサの検出結果に基づいて、水平方向を軸とした回転に関する入力装置の傾きを第2の傾きとして算出する。姿勢算出ステップにおいて、コンピュータは、第1の傾きおよび第2の傾きに基づいて、入力装置の姿勢を算出する。第3判別ステップにおいて、コンピュータは、第2の傾きに基づいて入力装置の回転を判別する。第2判別ステップにおいて、コンピュータは、加速度センサによって検出された3軸方向の加速度を姿勢算出ステップによって算出された姿勢に基づいて補正することにより得られる入力装置の動きを用いて判別を行う。
【0039】
なお、上記第5の発明において、第1傾き算出ステップにおいては、撮像画像を解析することにより、撮像方向を軸とした回転に関する傾きを算出するようにしてもよい。典型的には、撮像手段により所定の撮像対象(マーカ6aおよび6b)を撮像し、撮像画像に含まれる当該撮像対象の画像に関する当該撮像画像内における傾き(マーカ6aおよび6bを結ぶ線分の傾き)に基づいて第1の傾きを算出する。しかしながら、所定の撮像対象としてマーカ6aおよび6bのような特定の撮像対象を設けることは必須ではなく、特定の撮像対象を設けない場合は、或る時点の撮像画像とその後の或る時点の撮像画像を比較して、両画像における同一対象物の傾きの変化を算出することにより、撮像方向を軸とした回転を判定することができ、それに基づいて傾きを判定することが可能である。
【0040】
なお、第1傾き算出ステップおよび第2傾き算出ステップにおいて算出される傾きは、所定の傾きを基準(0°)として表される角度によって表現される形式であってもよいし、ベクトルによって表現される形式であってもよい。また、上記傾きは、任意の単位で表現されればよく、例えば1°単位で表されてもよいし、90°単位で表されてもよい。例えば、入力装置が水平方向を向いているか、それとも鉛直方向を向いているかという2値のみによって上記傾きを表現するようにしてもよい。
【0041】
第6の発明においては、加速度センサは、撮像手段の撮像方向を軸とした回転に応じて変化する値を出力可能であってもよい。このとき、情報処理プログラムは、判定ステップ(S21)と、第3傾き算出ステップ(S23,S24)とをさらにコンピュータに実行させてもよい。判定ステップにおいて、コンピュータは、第1傾き算出ステップにおいて第1の傾きを算出することが可能か否かを、撮像手段による撮像対象の撮像状況に基づいて判定する。第3傾き算出ステップにおいて、コンピュータは、判定ステップにおいて第1の傾きを算出することが不可能と判定された場合、加速度センサの出力値に基づいて第1の傾きを算出する。
【0042】
加速度センサは、例えば、撮像方向に生じる加速度を検出可能に設けられる。好ましくは、撮像方向(例えば、後述の図3におけるZ軸方向)および撮像方向に直交する或る方向A(例えば、後述の図3におけるY軸方向)に生じる加速度を検出可能に設けられる。そして、撮像方向に直交し、かつ、方向Aにも直交する軸(例えば、後述の図3におけるX軸)を中心に回転させるように操作することにより(典型的には、当該軸が水平のまま回転させることにより)、第3傾き算出ステップは、当該軸を中心とする回転に関する傾きを判別することができる。
【0043】
第7の発明において、動き検出手段は加速度センサであってもよい。このとき、第1判別ステップにおいて、コンピュータは、撮影画像に含まれる撮像対象の当該画像内での移動に基づいて、入力装置が鉛直方向に移動または回転したことを判別する(S38)。第2判別ステップにおいて、コンピュータは、加速度センサによる検出結果から算出される、水平方向を軸とした回転に関する入力装置の傾きに基づいて入力装置の回転を判別する(S39)。第1処理実行ステップにおいて、コンピュータは、第1判別ステップおよび第2判別ステップの少なくともいずれかで、入力装置の動きが行われたことが判別された場合、所定の処理を実行する。
【0044】
第8の発明においては、第1判別ステップにおいて、コンピュータは、撮像手段の撮像方向を軸として入力装置が回転したことを判別してもよい。このとき、第2判別ステップにおいて、コンピュータは、センサの検出結果に基づいて、入力装置が撮像方向を軸として回転したことを判別する。第1処理実行ステップにおいて、コンピュータは、第1判別ステップおよび第2判別ステップの少なくともいずれかで、入力装置が回転したと判別された場合、所定の処理を実行する。
【0045】
第9の発明においては、コンピュータは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、入力装置の所定の動きを判別してもよい。このとき、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、所定の処理とは異なる処理を実行する第2処理実行ステップをコンピュータにさらに実行させる。
【0046】
また、第10の発明は、入力装置(コントローラ5)の傾きに応じた処理を行う情報処理装置(ゲーム装置3)のコンピュータ(CPU10等)で実行されるプログラム(ゲームプログラム60)である。入力装置は、所定の撮像対象(マーカ部6)を撮像するための撮像手段(撮像素子40)と、当該入力装置の動きを検出する動き検出手段(加速度センサ37)とを備えている。情報処理プログラムは、第1判別ステップ(S5)と、第2判別ステップ(S22)と、処理実行ステップ(S27)とをコンピュータに実行させる。第1判別ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における傾きに基づいて、入力装置の所定の傾きを判別する。第2判別ステップにおいて、コンピュータは、動き検出手段による検出結果に基づいて入力装置の所定の傾きを判別する。処理実行ステップにおいて、コンピュータは、第1判別ステップによる判別結果、および、第2判別ステップによる判別結果に応じて、所定の処理を実行する。
【0047】
第11の発明においては、動き検出手段は、入力装置の撮像手段の撮像方向と異なる所定方向を軸とした回転に応じて変化する値を出力するセンサであってもよい。このとき、第1判別ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像に関する当該撮像画像内における傾きに基づいて、撮像方向を軸とした回転に関する入力装置の傾きを判別する。第2判別ステップにおいて、コンピュータは、センサの出力値に基づいて、入力装置の所定方向を軸とした回転に関する入力装置の傾きを判別する。処理実行ステップにおいて、コンピュータは、第1の傾きおよび第2の傾きに基づいて入力装置の姿勢を算出する。
【0048】
第12の発明においては、センサは、加速度センサであって、3軸方向の加速度をそれぞれ検出することが可能であってもよい。このとき、処理実行ステップにおいて、コンピュータは、加速度検出手段によって検出された3軸方向の加速度を、算出された姿勢に基づいて補正することにより入力装置の動きをさらに算出する。
【0049】
また、本発明は、上記各ステップを実行する情報処理装置と同等の機能を有する情報処理装置の形態で提供されてもよい。
【発明の効果】
【0050】
第1の発明によれば、撮像手段と動き検出手段とによってそれぞれ入力装置の動きを判別するので、加速度センサ等の動きセンサのみによって動きを検知する場合に比べて、入力装置の動きをより正確に検知することができる。
【0051】
第2〜第8の発明によれば、撮像手段と動き検出手段とによって入力装置の同じ動きを判別する。そして、いずれか一方において所定方向への動きが判別された場合、所定の処理が実行される。このように、2種類の方法で動きを検知することによって、加速度のみに基づいて動きを検知する場合に比べて、より正確に動きを検知することができる。
【0052】
さらに、第4の発明によれば、第1判別ステップ、第2判別ステップ、および第3判別ステップの少なくともいずれかで入力装置の動きが検知された場合、所定の処理を実行する。したがって、入力装置の動きをより確実に検知することができる。
【0053】
またさらに、第5の発明によれば、第3判別ステップにおいて第2の傾きに基づいて判別を行うとともに、第2判別ステップにおいては、当該第2の傾きを用いて算出される入力装置の動きに基づいて判別を行う。したがって、第2判別ステップにおいては、入力装置の動きを正確に算出することができるので判別を正確に行うことができるとともに、第3判別ステップで用いる第2の傾きを用いて姿勢を算出することによって、処理を簡易化することができる。
【0054】
第6の発明によれば、撮像手段によって撮像対象が撮像されていないために第1傾き算出ステップにおいて第1の傾きを算出することが不可能となる場合であっても、第1の傾きを算出することができる。撮像手段を用いた第1の傾きの算出は、撮像手段によって撮像対象が撮像されなければ実行できないのに対して、加速度センサを用いた第1の傾きの算出は常に実行することができる。したがって、第7の発明によれば、常に入力装置の姿勢を算出することができ、より操作性の良い入力装置を提供することができる。
【0055】
第9の発明によれば、入力装置によって指示位置を指定する操作と、入力装置を動かす操作とを操作に用いることができる。
【0056】
第10の発明によれば、撮像手段と動き検出手段とによってそれぞれ入力装置の傾きを判別するので、加速度センサ等の動きセンサのみによって傾きを検知する場合に比べて、入力装置の傾きをより正確に検知することができる。
【0057】
第11の発明によれば、撮像手段と動き検出手段とによってそれぞれ入力装置の傾きを算出し、それらに基づいて入力装置の姿勢を算出するので、入力装置の姿勢をより正確に算出することができる。
【0058】
第12の発明によれば、正確に算出される姿勢を用いることによって、加速度センサの検出結果から入力装置の動きを正確に算出することができる。
【発明を実施するための最良の形態】
【0059】
(ゲームシステムの全体構成)
図1を参照して、本発明の一実施形態に係るゲーム装置を含むゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置3、光ディスク4、コントローラ5、およびマーカ部6を含む。本システムは、コントローラ5を用いたゲーム操作に基づいてゲーム装置3でゲーム処理を実行するものである。
【0060】
ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるためのゲームプログラムが記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【0061】
ゲーム装置3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ2の画面の周辺(図1では画面の上側)には、マーカ部6が設置される。マーカ部6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部6はゲーム装置3に接続されており、ゲーム装置3はマーカ部6が備える各赤外LEDの点灯を制御することが可能である。
【0062】
コントローラ5は、自機に対して行われた操作の内容を示す操作データをゲーム装置3に与える入力装置である。コントローラ5とゲーム装置3とは無線通信によって接続される。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。
【0063】
(ゲーム装置3の内部構成)
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の構成を示すブロック図である。ゲーム装置3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
【0064】
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSIの内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
【0065】
また、システムLSI11には、入出力プロセッサ11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
【0066】
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
【0067】
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
【0068】
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
【0069】
入出力プロセッサ(I/Oプロセッサ)11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
【0070】
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
【0071】
また、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
【0072】
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【0073】
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
【0074】
(コントローラ5の構成)
次に、図3〜図6を参照して、コントローラ5について説明する。図3および図4は、コントローラ5の外観構成を示す斜視図である。図3は、コントローラ5の上側後方から見た斜視図であり、図4は、コントローラ5を下側前方から見た斜視図である。
【0075】
図3および図4において、コントローラ5は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ5を用いることによって、それに設けられたボタンを押下すること、および、コントローラ5自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
【0076】
ハウジング31には、複数の操作ボタンが設けられる。図3に示すように、ハウジング31の上面には、十字キー32a、1番ボタン32b、2番ボタン32c、Aボタン32d、マイナスボタン32e、ホームボタン32f、プラスボタン32g、および電源ボタン32hが設けられる。一方、図4に示すように、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作ボタン32a〜32iには、ゲーム装置3が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン32hは遠隔からゲーム装置3本体の電源をオン/オフするためのものである。ホームボタン32fおよび電源32hは、その上面がハウジング31の上面に埋没している。これによって、プレイヤがホームボタン32fまたは電源32hを誤って押下することを防止することができる。
【0077】
ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、コントローラ5に他の機器(例えば、他のコントローラ)を接続するために利用される。
【0078】
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のメインコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ5の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
【0079】
また、コントローラ5は撮像情報演算部35(図5B)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
【0080】
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ49(図5A)からの音を外部に放出するための音抜き孔31aが形成されている。
【0081】
次に、図5Aおよび図5Bを参照して、コントローラ5の内部構造について説明する。図5Aおよび図5Bは、コントローラ5の内部構造を示す図である。なお、図5Aは、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bは、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bに示す斜視図は、図5Aに示す基板30を裏面から見た斜視図となっている。
【0082】
図5Aにおいて、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ49等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図5B参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
【0083】
一方、図5Bにおいて、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
【0084】
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ48が設けられている。バイブレータ48は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ48が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ48は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ48がコントローラ5の中心よりも端側に配置することによって、バイブレータ48の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5Aおよび図5Bに示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ49に音声信号を出力するアンプ等を備えている。
【0085】
なお、図3〜図5A、図5Bに示したコントローラ5の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はZ軸方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【0086】
図6は、コントローラ5の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、コネクタ33、撮像情報演算部35、通信部36、および加速度センサ37を備えている。コントローラ5は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置3へ送信するものである。
【0087】
操作部32は、上述した各操作ボタン32a〜32iを含み、各操作ボタン32a〜32iに対する入力状態(各操作ボタン32a〜32iが押下されたか否か)を示すデータを通信部36のマイコン42へ出力する。
【0088】
撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ5の動きでも追跡して解析することができる。
【0089】
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ5の前方から入射する光から赤外線のみを通過させる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDセンサのような固体撮像素子であり、レンズ39が集光した赤外線を受光して画像信号を出力する。ここで、テレビ2の表示画面近傍に配置されるマーカ部6のマーカ6Rおよび6Lは、テレビ2の前方に向かって赤外光を出力する赤外LEDで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、マーカ6Rおよび6Lの画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ6Rおよび6L)の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。なお、他の実施形態では、コントローラ5は、マーカ座標を算出するために必要なデータ(例えば、撮像画像のデータ)をゲーム装置3へ送信し、ゲーム装置3が当該データに基づいてマーカ座標を算出するようにしてもよい。
【0090】
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、3軸または2軸の加速度センサは、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。なお、加速度センサ37は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
【0091】
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるXYZ座標系における3次元のベクトルとして表される。以下では、加速度センサ37によって検出される3軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【0092】
加速度センサ37が検出した加速度(加速度ベクトル)を示すデータ(加速度データ)は、通信部36へ出力される。本実施形態において、加速度センサ37は、コントローラ5の動きを算出するためのデータを出力するセンサとして用いられる。つまり、ゲーム装置3は、加速度データと、上記マーカ座標データとに基づいてコントローラ5の姿勢および動きを算出する。なお、コントローラ5の姿勢および動きを算出する方法については後述する。
【0093】
なお、加速度センサ37から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラのプロセッサ(例えばマイコン42)などのコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサを搭載するコントローラが静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合)、コントローラが現実に静的な状態であれば、検出された加速度に基づいてコントローラの姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサの検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサの場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ37からの出力に基づいて、プロセッサがコントローラ5の傾き角度のデータを算出する処理をおこなってもよいが、当該傾き角度のデータを算出する処理をおこなうことなく、加速度センサ37からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾き、姿勢または位置を判定することができる。一方、加速度センサ37が動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ37を備えるコントローラ5がユーザの手で動的に加速されて動かされる場合に、加速度センサ37によって生成される加速度信号を処理することによって、コントローラ5のさまざまな動きおよび/または位置を算出することができる。なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向対する傾きを知ることが可能である。他の実施例では、加速度センサ37は、信号をマイコン42に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
【0094】
なお、本実施形態では、コントローラの姿勢を算出するために例えば、静電容量式の加速度センサを用いることとしたが、他の方式の加速度センサやジャイロセンサを用いるようにしてもよい。ただし、加速度センサは各軸に沿った直線方向の加速度をそれぞれ検出するものであるのに対して、ジャイロセンサは回転に伴う角速度を検出するものである。つまり、加速度センサに代えてジャイロセンサを採用する場合には、検出される信号の性質が異なるため、両者を簡単に置き換えることはできない。そこで、加速度センサの代わりにジャイロセンサを用いて姿勢を算出する場合には、大幅な変更を行う。具体的には、検出開始の状態において姿勢の値を初期化する。そして、当該ジャイロセンサから出力される角速度のデータを積分する。さらに、積分結果を用いて、初期化された姿勢の値からの姿勢の変化量を算出する。この場合、算出される姿勢は、角度で表されることになる。
【0095】
なお、既に説明したように、加速度センサによって姿勢を算出する場合には、加速度ベクトルを用いて姿勢を算出する。したがって、算出される姿勢はベクトルで表すことが可能であり、初期化を行わずとも絶対的な方向を算出することが可能である点で、加速度センサを用いる場合とジャイロセンサを用いる場合とで異なる。また、姿勢として算出される値の性質についても上記のように角度であるかベクトルであるかの違いがあるので、加速度センサからジャイロセンサへの置き換えを行う際には当該姿勢のデータに対しても所定の変換を行う必要がある。
【0096】
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
【0097】
操作部32、撮像情報演算部35、および加速度センサ37からマイコン42へ出力されたデータは、一時的にメモリ43に格納される。これらのデータは、上記操作データとしてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3無線コントローラモジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ5から送信される。微弱電波信号はゲーム装置3側の無線コントローラモジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。なお、通信部36から無線コントローラモジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で各操作データをゲーム装置3の無線コントローラモジュール19へ出力する。
【0098】
上記コントローラ5を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作を行うことができる。
【0099】
(ゲーム操作およびゲーム処理の概要)
図7を参照して、ゲーム操作の例について説明する。図7は、コントローラ5を用いてゲーム操作を行うときの様子を示す図解図である。本実施形態では、プレイヤは、図7に示すように、コントローラ5によってテレビ2の画面上の位置Pを指し示すゲーム操作を行う。ここで、位置Pは、コントローラ5によって指し示される画面上の位置であり、理想的には、コントローラ5の前端部から上記長手方向に延ばした直線とテレビ2の画面とが交わる位置である。ただし、厳密に当該位置である必要はなく、その周辺の位置をゲーム装置3によって算出することができればよい。以下では、コントローラ5によって指し示される画面上の位置を「ポインティング位置」と呼ぶ。プレイヤは、画面上のポインティング位置を移動させることによってゲーム操作を行う。
【0100】
図8は、本実施形態においてテレビ2の画面に表示されるゲーム画像の一例を示す図である。図8に示すように、テレビ2の画面には、プレイヤキャラクタ51、障害物(例えば木52や切り株53)、および、ポインティングアイコン54等が表示される。
【0101】
ゲーム中において、プレイヤキャラクタ51は、プレイヤによる指示なしに自動的に画面奥方向に向かってゲーム空間を移動する。本ゲームでは、プレイヤは、木や切り株等の障害物にプレイヤキャラクタ51が当たらないようにプレイヤキャラクタ51を操作し、ゲーム空間を移動させることが目的である。
【0102】
プレイヤキャラクタ51は、画面の左右方向の移動、および、ジャンプ動作が可能である。したがって、プレイヤキャラクタ51は、画面の左右方向の移動によって障害物を避けることができるとともに、切り株のような低い障害物であればジャンプ動作によって(切り株を飛び越えることによって)障害物を避けることができる。
【0103】
プレイヤキャラクタ51の左右方向の移動は、コントローラ5の向きを変える操作、すなわち、画面上においてポインティング位置を移動させる操作によって行われる。本実施形態では、プレイヤキャラクタ51は、画面の左右方向に関してポインティング位置と同じ位置に位置するように移動される。したがって、プレイヤは、基本的にはコントローラ5を画面に向けた状態で把持してゲーム操作を行う。なお、本実施形態では、ポインティング位置にはポインティングアイコン54が表示されるので、プレイヤは、ポインティングアイコン54を見ることによって、コントローラ5が現在どこを指しているかを容易に知ることができる。
【0104】
一方、プレイヤキャラクタ51のジャンプ動作は、コントローラ5を上方向に動かす操作(以下、ジャンプ操作と呼ぶ)によって行われる。本実施形態では、コントローラ5を上方向に動かす操作は、コントローラ5の先端を上方向(重力方向の逆方向)に動かす操作であればよく、コントローラ5を上方向に平行移動させる操作でもよいし、コントローラ5の指し示す方向を上側に変化させる(コントローラ5を上に向ける)操作でもよい。本実施形態では、ジャンプ操作が行われたか否かの判断(コントローラ5の上方向への移動の検知)は、上記マーカ座標データと加速度データとに基づいて判断される。ジャンプ操作が行われたか否かの判断方法については後で詳細に説明する。
【0105】
(ゲーム処理の詳細)
以下、図9〜図15を参照して、ゲーム装置3において実行されるゲーム処理の詳細について説明する。まず、ゲーム処理において用いられる主なデータについて図9を用いて説明する。図9は、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図9に示すように、メインメモリには、ゲームプログラム60、操作データ61、およびゲーム処理用データ64等が記憶される。なお、メインメモリには、図9に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【0106】
ゲームプログラム60は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。ゲームプログラム60には、コントローラ5の姿勢を算出したり、算出された姿勢に基づいてコントローラ5の動きを判別したりするための処理を実行するのに必要なプログラムが含まれている。
【0107】
操作データ61は、コントローラ5からゲーム装置3へ送信されてくる操作データである。操作データ61には、加速度データ62およびマーカ座標データ63が含まれる。なお、図示していないが、操作データ61には、操作ボタンデータが含まれていてもよい。操作ボタンデータは、操作部32の各ボタン32a〜32iに対して行われた操作内容(各ボタン32a〜32iが押下されたか否か)を示すデータである。なお、上述したように、コントローラ5からゲーム装置3へ1/200秒に1回の割合で操作データが送信されるので、メインメモリに記憶される操作データはこの割合で更新される。また、メインメモリには、最新の(最後に取得された)操作データのみが記憶される。
【0108】
加速度データ62は、加速度センサ37によって検出された加速度(加速度ベクトル)を示すデータである。ここでは、加速度データ62は、図3に示すXYZの3軸の方向に関する加速度ベクトルA=(AX,AY,AZ)を示すデータである。
【0109】
マーカ座標データ63は、撮像情報演算部35の画像処理回路41によって算出される座標、すなわち上記マーカ座標を示すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための座標系(図13に示すxy座標系)で表現される。なお、撮像素子40によって2つのマーカ6Rおよび6Lが撮像される場合には、2つのマーカ座標((x1,y1)および(x2,y2)とする)が算出される。一方、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lのいずれか一方が位置しない場合には、撮像素子40によって1つのマーカのみが撮像され、1つのマーカ座標のみが算出される。また、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lの両方が位置しない場合には、撮像素子40によってマーカが撮像されず、マーカ座標は算出されない。したがって、マーカ座標データは、2つのマーカ座標を示す場合もあるし、1つのマーカ座標を示す場合もあるし、マーカ座標がないことを示す場合もある。
【0110】
ゲーム処理用データ64は、後述するゲーム処理(図10)において用いられるデータである。ゲーム処理用データ64は、対象位置履歴データ65、上下傾き履歴データ67、ロール傾きデータ69、動き履歴データ70、上下回転行列データ72、ロール回転行列データ73、ベクトル回転行列データ74等を含む。
【0111】
対象位置履歴データ65は、対象位置の履歴を示すデータであり、複数の対象位置データ66を含む。ここで、対象位置とは、撮像対象(マーカ6Rおよび6L)の画像の、撮像画像内における位置であり、対象位置データ66は対象位置を示すデータである。具体的には、対象位置は、2つのマーカ座標の中点の位置である。対象位置履歴データ65は、対象位置データ66が生成される度に、新しいものから順に所定個数(2つ以上)の対象位置データ66を含むように更新される。つまり、対象位置履歴データ65は、現在から過去所定期間内における対象位置の履歴を示している。
【0112】
上下傾き履歴データ67は、コントローラ5の上下方向の傾きの履歴を示すデータであり、当該傾きを示す上下傾きデータ68を複数含む。ここで、コントローラ5の上下方向の傾きとは、X軸周りの回転に関する傾き、すなわち、水平面(重力方向に垂直な面)に対するコントローラ5の傾きである。本実施形態では、コントローラ5の上下方向の傾きを、コントローラ5を基準としたXYZ座標系のZ軸と水平面とのなす角(AngX)によって表す(図11参照)。上下傾き履歴データ67は、上下傾きデータ68が生成される度に、新しいものから順に所定個数(2つ以上)の上下傾きデータ68を含むように更新される。つまり、上下傾き履歴データ67は、現在から過去所定期間内における上下方向の傾きの履歴を示している。
【0113】
ロール傾きデータ69は、コントローラ5のロール方向の傾きを示すデータである。ここで、コントローラ5のロール方向の傾きとは、コントローラ5を基準としたXYZ座標系のZ軸周りの回転に関する傾きである。本実施形態では、コントローラ5のロール方向の傾きを、コントローラ5を基準としたXYZ座標系のZ軸を含む所定面と、当該XYZ座標系のX軸とのなす角(AngZ)によって表す。
【0114】
動き履歴データ70は、コントローラ5の動きの履歴を示すデータであり、コントローラ5の動きを示す動きデータ71を複数含む。本実施形態では、動きデータ71は、XYZ座標系の各軸に関する動きを示すベクトル(V=(VX,VY,VZ))のうちのY成分(Vy)を示す。動き履歴データ70は、動きデータ71が生成される度に、新しいものから順に所定個数の動きデータ71を含むように更新される。つまり、動き履歴データ70は、現在から過去所定期間内におけるコントローラ5のY軸方向に関する動きの履歴を示している。
【0115】
上下回転行列データ72は、上下回転行列(Mx)を示すデータである。上下回転行列は、加速度ベクトルをX軸周りに回転させる行列である。また、ロール回転行列データ73は、ロール回転行列(Mz)を示すデータである。ロール回転行列は、加速度ベクトルをZ軸(ロール軸)周りに回転させる行列である。また、ベクトル回転行列データ74は、ベクトル回転行列(M)を示すデータである。ベクトル回転行列は、加速度ベクトルをX軸周りおよびZ軸周りに回転させる行列であり、上下回転行列Mxとロール回転行列Mzとから算出される。
【0116】
なお、ゲーム処理用データ64には、上記のデータの他、後述するタイマの値を示すデータや、後述する振りフラグを示すデータや、ゲーム空間におけるプレイヤキャラクタの位置を示すデータ等が含まれる。
【0117】
次に、ゲーム装置3において行われる処理の詳細を、図10〜図15を用いて説明する。図10は、ゲーム装置3において実行される処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入され、ゲームプログラムが記憶された光ディスク4がゲーム装置3に挿入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図10に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【0118】
図10に示すステップS1において、まずCPU10は初期化処理を実行する。初期化処理においては、振りフラグがオフに設定される。振りフラグは、コントローラ5に対してジャンプ操作が行われているか否かを判別するために用いられるフラグである。また、初期化処理においては、各履歴データ64,67,70にはデータが含まれない状態とされる。ステップS1の後、ステップS2〜S12の処理ループが、ゲームが実行される間繰り返し実行される。なお、1回の当該処理ループは、1フレーム時間(例えば1/60秒)に1回の割合で実行される。
【0119】
ステップS2において、CPU10は、操作データを取得する。すなわち、コントローラ5から送信されてくる操作データが無線コントローラモジュール19を介して受信されてメインメモリに記憶されるので、CPU10は、メインメモリから操作データを読み出す。
【0120】
続くステップS3において、CPU10は、対象位置を算出する。対象位置は、メインメモリに記憶されているマーカ座標データ63により示されるマーカ座標に基づいて算出される。対象位置は、例えば2つのマーカ座標の中点の位置として算出されるが、2つのマーカ座標から一義的に決められる位置であればどのような位置でもよい。算出された対象位置を示すデータは、対象位置データ66としてメインメモリに記憶される。なお、撮像素子40によって撮像対象(マーカ6Rおよび6L)が検出されていない場合には、上記ステップS3において対象位置を算出することができない場合がある。この場合、CPU10は、ステップS3および後述するステップS4の処理を省略してもよい。
【0121】
ステップS3において対象位置が算出されると、続くステップS4において、CPU10は、対象位置の履歴を更新する。具体的には、メインメモリに記憶されている対象位置履歴データ65に含まれている所定個数の対象位置データ66のうち、最も古いものを削除する。そして、上記ステップS3で算出された対象位置を示すデータを新たな対象位置データ66として対象位置履歴データ65に追加する。なお、ステップS2〜S12の処理ループの実行を開始した初期段階において、対象位置履歴データ65に含まれている対象位置データ66が所定個数に満たない場合には、対象位置データ66の削除を行わない。
【0122】
ステップS4の次のステップS5において、CPU10は、メインメモリに記憶されている加速度データ62により示される加速度ベクトルからコントローラ5の上下方向の傾きを算出する。ここでは、Z軸と水平面とのなす角度として上下方向の傾きを算出する。図11は、コントローラ5の上下方向の傾きを算出する方法を説明するための図である。まず、図11に示すように、重力方向に平行な面(鉛直面)における2次元のX’Y’座標系を定義する。ここで、Y’軸はZ軸と同じ方向であり、Z軸正方向をY’軸正方向とする。X’軸はY’軸に垂直な軸であり、かつ、重力方向に近い方向をX’軸負方向とする。
【0123】
コントローラ5の上下方向の傾きを算出する際、CPU10はまず、加速度ベクトルAを、X’軸方向の成分ACXとY’軸方向の成分ACYとに分解する(図11参照)。すなわち、加速度ベクトルAを、Z軸成分と、それ以外の成分とに分解し、それぞれの成分の大きさを算出する。したがって、Y’軸方向の成分ACYは、加速度ベクトルAのZ軸成分の大きさ(AZ)である。また、X’軸方向の成分ACXは、加速度ベクトルAのX軸成分(AX)とY軸成分(AY)との合成ベクトル(2次元)の大きさとして算出される。
【0124】
次に、CPU10は、X’軸方向の成分ACXとY’軸方向の成分ACYとから、上下方向の傾きを示す角度AngXを算出する。角度AngXは、加速度ベクトルAと、上記合成ベクトルACYとのなす角度として算出される。具体的には、角度AngXは、次の式(1)に従って算出される。
AngX=−atan(ACY/ACX) …(1)
なお、上式(1)において、−90°≦AngX≦90°で表現されるものとする。上式(1)によれば、コントローラ5の前端部が水平方向を向くときAngX=0となり、コントローラ5の前端部が鉛直上方を向くときAngX=90となり、コントローラ5の前端部が鉛直下方を向くときAngX=−90となる。
【0125】
上記の方法によれば、X’軸方向の成分ACXを、加速度ベクトルAのX軸成分AXとY軸成分AYとの合成ベクトルの大きさとして算出することによって、加速度ベクトルAとZ軸とのなす角度を算出することができる。これによって、コントローラ5の上下方向の傾きを正確に算出することができる。ここで、他の実施形態において、例えば、コントローラ5をZ軸(ロール軸)周りに傾けて使用することが想定されず、コントローラ5の上面を上側にして使用することが想定される場合には、X’軸方向の成分ACXは、加速度ベクトルAのY軸成分AYの大きさとして算出するようにしてもよい。
【0126】
コントローラ5の上下方向の傾きが算出されると、ステップS6において、CPU10は、上下方向の傾きの履歴を更新する。具体的には、メインメモリに記憶されている上下傾き履歴データ67に含まれている所定個数の上下傾きデータ68のうち、最も古いものを削除する。そして、上記ステップS5で算出された傾きAngXを示すデータを新たな上下傾きデータ68として上下傾き履歴データ67に追加する。なお、ステップS2〜S12の処理ループの実行を開始した初期段階において、上下傾き履歴データ67に含まれている上下傾きデータ68が所定個数に満たない場合には、上下傾きデータ68の削除を行わない。
【0127】
ステップS6の次のステップS7において、CPU10は、回転行列算出処理を実行する。回転行列算出処理は、コントローラ5の姿勢を算出し、算出した姿勢に基づいて、ベクトル回転行列を算出する処理である。以下、図12を参照して、回転行列算出処理の詳細を説明する。
【0128】
図12は、図10に示す回転行列算出処理(ステップS7)の流れを示すフローチャートである。認識範囲算出処理においては、まずステップS21において、CPU10は、マーカ座標を用いてロール方向の傾きを算出することが可能か否かを判定する。この判定は、マーカの撮像状況、具体的には、撮像素子40によって撮像対象(マーカ6Rおよび6L)が検出されたか否かによって行われる。ステップS4の判定は、メインメモリに記憶されているマーカ座標データ63を参照することによって行われる。すなわち、マーカ座標データ63が2つのマーカ座標を示す場合、マーカ6Rおよび6Lが検出されたと判定される。一方、マーカ座標データ63が1つのマーカ座標を示す場合、または、マーカ座標データ63がマーカ座標がないことを示す場合、マーカ6Rおよび6Lが検出されなかったと判定される。ステップS21の判定結果が肯定の場合、ステップS22の処理が実行される。一方、ステップS21の判定結果が否定の場合、後述するステップS23の処理が実行される。
【0129】
なお、ステップS21の判定処理は、ロール方向の傾きを算出するために必要なマーカが検出されたか否か(すなわち、ロール方向の傾きが算出可能であるか否か)を判定するための処理である。本実施形態では、2つのマーカ座標が検出された場合のみ、ロール方向の傾きが算出可能であると判断しているが、他の実施形態では、1つのマーカ座標のみを用いてロール方向の傾きを算出することも可能である。例えば、あるタイミングの前後のタイミングにおいて2つのマーカ座標が検出されていれば、当該あるタイミングにおいて1つのマーカ座標のみが検出された(またはマーカ座標が検出されない)場合であっても、補間によって2つのマーカ座標を算出し、ロール方向の傾きを算出することも可能である。したがって、他の実施形態において、1つのマーカ座標を用いて対象位置を算出する処理を採用する場合には、1つのマーカ座標のみが検出された場合であってもステップS21の判定結果を肯定として判断するようにしてもよい。
【0130】
ステップS22において、CPU10は、マーカ座標データ63により示されるマーカ座標に基づいてロール方向の傾きを算出する。図13は、マーカ座標に基づいてロール方向の傾きを算出する方法を説明するための図である。図13は、コントローラ5の撮像手段によって撮像された撮像画像を示しており、位置P1および位置P2にマーカの画像が含まれている。ここでは、位置P1のマーカ座標を(x1,y1)とし、位置P2のマーカ座標を(x2,y2)とする。
【0131】
ロール方向の傾きは、撮像対象の画像(マーカ画像)に関する撮像画像内における傾きに基づいて算出することができる。ここでは、ロール方向の傾きを、2つのマーカ座標を結ぶベクトルとx軸とのなす角(AngZ)として算出する。具体的には、CPU10はまず、次の式(2)に従ってロール方向の傾きAngZを算出する。
x2−x1≧0のとき、AngZ=AngZ’
x2−x1<0、かつ、AngZ>0のとき、AngZ=−180+AngZ’
x2−x1<0、かつ、AngZ≦0のとき、AngZ=180+AngZ’
ただし、AngZ’=atan((y2−y1)/(x2−x1))
…(2)
上式(2)において、コントローラ5が基準状態にある場合に撮像された撮像画像から算出される2つのマーカ座標のうち、x座標値が小さい方の座標を(x1,y1)とする。なお、上式(2)における変数AngZ’は−90°≦AngZ≦90°で表現されるので、変数AngZ’では、コントローラ5が基準状態(Y軸負方向が重力方向を向く状態)であるか、コントローラ5が基準状態から裏返しの状態(Y軸正方向が重力方向を向く状態)であるかを表現することができない。そのため、上式(2)では、(x2−x1)が負となる場合に変数AngZ’の値を補正してAngZを得るようにしている。これによって、AngZは、−180≦AngZ≦180で表現されるので、ロール方向の傾きを360°の範囲で算出することができる。なお、他の実施形態において、コントローラ5が裏返しの状態で使用されることを想定しない場合には、上式(2)における変数AngZ’をそのままロール方向の傾きとして用いるようにしてもよい。
【0132】
以上のように算出されたロール方向の傾きAngZを示すデータは、ロール傾きデータ69としてメインメモリに記憶される。以上のステップS22の後、ステップS25の処理が実行される。
【0133】
一方、ステップS23において、CPU10は、加速度データ62により示される加速度ベクトルに基づいてロール方向の傾きを算出する。図14は、加速度ベクトルに基づいてロール方向の傾きを算出する方法を説明するための図である。図14は、Z軸負方向からコントローラ5を見たときのコントローラ5を示している。図14に示すように、ロール方向の傾きは、加速度ベクトルAのX成分とY成分との合成ベクトルAXYと、Y軸とのなす角度として表すことができる。なお、合成ベクトルAXYとY軸とのなす角度とすることで、加速度ベクトルから算出されるロール方向の傾きは、マーカ座標から算出されるロール方向の傾きと同じ角度を表すものとなる。具体的には、ロール方向の傾きAngZは、加速度ベクトルAのX成分AXとY成分AYとに基づいて、次の式(3)に従って算出することができる。
AY≧0のとき、AngZ=AngZ’
AY<0、かつ、AngZ>0のとき、AngZ=−180+AngZ’
AY<0、かつ、AngZ≦0のとき、AngZ=180+AngZ’
ただし、AngZ’=atan(AX/AY)
…(3)
上式(3)において、AY<0のときにAngZ’の値を補正しているのは、上記ステップS22の場合と同様、コントローラ5が基準状態であるか裏返しの状態であるかを表現すべく、−180≦AngZ≦180の範囲で傾きAngZを表現するためである。以上のように算出されたロール方向の傾きAngZを示すデータは、ロール傾きデータ69としてメインメモリに記憶される。
【0134】
続くステップS24において、CPU10は、ステップS23で算出されたロール方向の傾きを補正する。補正後の傾きは、前回のステップS2〜S12の処理ループにおいて算出されたロール方向の傾きを、今回の処理ループにおけるステップS24で算出されたロール方向の傾きに所定の割合で近づけることによって算出される。ここで、前回の処理ループにおいて算出されたロール方向の傾きは、前回の処理ループにおいてステップS21の判定結果が肯定であった場合にはステップS22で算出された傾きであり、前回の処理ループにおいてステップS21の判定結果が否定であった場合にはステップS24で算出された傾きである。具体的には、前回の処理ループにおいて算出されたロール方向の傾きAngZ”とし、今回の処理ループにおけるステップS24で算出されたロール方向の傾きAngZ’とした場合、補正後のロール方向の傾きAngZは、次の式(4)に従って算出される。
AngZ=AngZ”+(AngZ’−AngZ”)×k …(4)
上式(4)において、定数kは、0<k<1の範囲で予め決められる。
【0135】
例えば、それまで検出されていたマーカ座標が検出されなくなった場合、ある処理ループにおいてはステップS22の処理によってロール方向の傾きが算出され、次の処理ループにおいてステップS23の処理によってロール方向の傾きが算出されることになる。この場合、ロール方向の傾きを算出する基になるデータが異なるので、当該傾きの値が大きく異なる場合がある。本実施形態では、ステップS24の処理によって、前回の処理ループと今回の処理ループとでロール方向の傾きが大きく異なる場合であっても、ロール方向の傾きが急激に変化することを防止することができる。
【0136】
また、コントローラ5が動かされている場合には、加速度ベクトルが急激に変化するので、当該加速度ベクトルはコントローラ5の姿勢を正確に表していない可能性が高い。したがって、そのような場合に加速度ベクトルから算出されるロール方向の傾きも不正確である可能性が高い。そこで、本実施形態では、上記ステップS24の処理によって、加速度ベクトルが急激に変化する場合でも、ロール方向の傾きが急激に変化することを抑制している。これによって、加速度ベクトルの急激に変化を緩和することができ、コントローラ5が動かされている場合にロール方向の傾きが不正確な値となることを防止することができる。
【0137】
以上のステップS24の処理によって補正されたロール方向の傾きを示すデータは、ロール傾きデータ69としてメインメモリに記憶される。ステップS24の後、ステップS25の処理が実行される。
【0138】
以上に説明したように、ステップS5においてコントローラ5の上下方向の傾きが算出され、ステップS22、または、ステップS23およびS24においてコントローラ5のロール方向の傾きが算出される。したがって、コントローラ5の上下方向の傾きおよびロール方向の傾きが算出されたことによって、コントローラ5の(上下方向およびロール方向に関する)姿勢が算出されたこととなる。本実施形態では、上述のように、(マーカ座標が検出される場合には)マーカ座標に基づいてロール方向の傾きが算出されるので、加速度ベクトルを用いてロール方向の傾きを算出する場合に比べて正確に傾きを算出することができる。その結果、コントローラ5の姿勢を正確に算出することができる。なお、以降のステップS25〜S28では、コントローラ5の姿勢(すなわち、上下方向の傾きおよびロール方向の傾き)に基づいて、ベクトル回転行列が算出される。
【0139】
ステップS25において、CPU10は、コントローラ5の上下方向の傾きに基づいて上下回転行列を算出する。なお、当該上下方向の傾きは、メインメモリに記憶されている最新の上下傾きデータ68により示される。具体的には、上下回転行列Mxは次の式(5)によって算出される。
【数1】
上式(5)に示されるように、上下回転行列Mxは、3次元ベクトルをX軸周りに角度AngXだけ回転させる回転行列である。ステップS25で算出された上下回転行列Mxを示すデータは、上下回転行列データ72としてメインメモリに記憶される。
【0140】
続くステップS26において、CPU10は、コントローラ5のロール方向の傾きに基づいてロール回転行列を算出する。なお、当該ロール方向の傾きは、メインメモリに記憶されているロール傾きデータ69により示される。具体的には、ロール回転行列Mzは次の式(6)によって算出される。
【数2】
上式(6)に示されるように、ロール回転行列Mzは、3次元ベクトルをZ軸周りに角度AngZだけ回転させる回転行列である。ステップS26で算出されたロール回転行列Mzを示すデータは、ロール回転行列データ73としてメインメモリに記憶される。
【0141】
続くステップS27において、CPU10は、上記上下回転行列およびロール回転行列に基づいてベクトル回転行列を算出する。ベクトル回転行列Mは、上下回転行列の逆行列と、ロール回転行列の逆行列とを掛けることによって算出される。具体的には、CPU10は、メインメモリに記憶されている上下回転行列データ72およびロール回転行列データ73を用いて、次の式(7)に従ってベクトル回転行列Mを算出する。
M=Mx-1・Mz-1 …(7)
なお、上式(7)において、上下回転行列Mxの逆行列Mx-1は、上下回転行列MxにおけるAngXを−AngXとすることによって得るようにしてもよい。同様に、ロール回転行列Mzの逆行列Mz-1は、ロール回転行列MzにおけるAngZを−AngZとすることによって得るようにしてもよい。上式(7)から明らかなように、ベクトル回転行列Mは、3次元ベクトルをX軸周りに(−AngX)だけ回転させるとともに、Z軸周りに角度(−AngX)だけ回転させる回転行列である。ステップS27で算出されたベクトル回転行列Mを示すデータは、ベクトル回転行列データ74としてメインメモリに記憶される。ステップS27の後、CPU10は回転行列算出処理を終了する。
【0142】
図10の説明に戻り、ステップS7の次のステップS8において、CPU10は、コントローラ5の動きを表す動きベクトルを算出する。動きベクトルVは、メインメモリに記憶されている加速度データ62により示される加速度ベクトルAと、メインメモリに記憶されているベクトル回転行列データ74により示されるベクトル回転行列Mとに基づいて算出される。具体的には、動きベクトルV=(VX,VY,VZ)は、次の式(7)に従って算出される。
[VX VY VZ]=[AX AY AZ]M …(7)
式(7)に示されるように、動きベクトルVは、加速度ベクトルAをベクトル回転行列Mを用いて回転させることによって得られる。
【0143】
ここで、加速度センサによって検出された加速度ベクトルには、重力加速度に起因する成分とコントローラ5の動きに起因する成分とが含まれている。本実施形態では、上記ステップS8に示すように、加速度センサによって検出された加速度ベクトルの向きを、コントローラ5の姿勢に対応したベクトル回転行列を用いて変化(回転)させる。これによって、加速度ベクトルの向きに関しては加速度ベクトルから重力加速度に起因する方向成分を除去することができ、加速度ベクトルの向きを、コントローラ5の動きに対応した向きにすることができる。つまり、動きベクトルのY成分VYは重力方向(鉛直方向)の動きを表す。また、動きベクトルのX成分VXは、コントローラ5を基準としたXYZ座標系のY軸負方向が重力方向となる場合における当該XYZ座標系のX方向の動きを表す。Z成分VZは、コントローラ5を基準としたXYZ座標系のY軸負方向が重力方向となる場合における当該XYZ座標系のZ方向の動きを表す。以上のように、上記ステップS8で得られる動きベクトルによって、コントローラ5の動きを正確に判別することができる。
【0144】
本実施形態では、コントローラ5の鉛直方向の動きを判別するために、上記動きベクトルVのY成分(VY)を用いる。なお、コントローラ5が鉛直方向に関して静止している場合、VY=G(Gは重力加速度の大きさ)となる。また、コントローラ5が上方向に動かされている場合、VYの値は、Gよりも小さい値となり、コントローラ5が下方向に動かされている場合、VYの値は、Gよりも大きい値となる。なお、本実施形態では、Y軸正方向を鉛直上向きとしているので、Gは負の値となる。
【0145】
なお、上記ステップS8において、CPU10は、算出された動きベクトルから、静止状態における動きベクトル(0,G,0)を減算するようにしてもよい。すなわち、VY−Gの値を動きデータ71としてメインメモリに記憶しておいてもよい。これによれば、コントローラ5が静止状態にある場合の動きベクトルのY成分の値を0として表すことができる。
【0146】
ステップS8の次のステップS9において、CPU10は、コントローラ5の動きの履歴を更新する。具体的には、メインメモリに記憶されている動き履歴データ70に含まれている所定個数の動きデータ71のうち、最も古いものを削除する。そして、上記ステップS7で算出された動きベクトルVのY成分VYを示すデータを新たな動きデータ71として動き履歴データ70に追加する。なお、ステップS2〜S12の処理ループの実行を開始した初期段階において、動き履歴データ70に含まれている動きデータ71が所定個数に満たない場合には、動きデータ71の削除を行わない。
【0147】
なお、本実施形態では、ステップS2〜S12の処理ループにおいて、ベクトル回転行列を毎回算出するようにした。ここで、他の実施形態においては、加速度ベクトルが所定の条件を満たす場合にのみ、ベクトル回転行列の算出を行うようにしてもよい。具体的には、加速度ベクトルが所定の条件を満たすか否かを判定し、判定結果が肯定である場合のみ、上記ステップS5〜S7の処理を実行するようにしてもよい。
【0148】
なお、上記所定の条件としては、例えば、最新の加速度ベクトルと所定個数前に取得された加速度ベクトルとの差分ベクトルの大きさが所定値以下であること(第1条件)や、最新の加速度ベクトルの大きさが重力加速度の大きさに近い(両者の差が所定値以下)であること(第2条件)等が考えられる。CPU10は、上記第1条件が満たされた場合にのみベクトル回転行列および動きベクトルの算出を行うようにしてもよいし、上記第2条件が満たされた場合にのみベクトル回転行列および動きベクトルの算出を行うようにしてもよいし、上記第1条件および第2条件の両方が満たされた場合(または一方が満たされた場合)にのみベクトル回転行列および動きベクトルの算出を行うようにしてもよい。上記第1条件および第2条件は、加速度ベクトルがコントローラ5の姿勢に対応しているか否かを判定するための条件である。上記差分ベクトルの大きさが大きい場合や、加速度ベクトルの大きさが重力加速度の大きさとは大きく異なる場合、コントローラ5が激しく動かされていると考えられる。この場合、加速度ベクトルには重力加速度に起因する成分に加えて、コントローラ5の動きに起因する成分が含まれているので、加速度ベクトルからコントローラ5の傾き(上下方向およびロール方向の傾き)を正確に算出することができないおそれがある。したがって、上記所定の条件を満たさない場合には、コントローラ5の傾きを正確に算出することができないおそれがあると判断し、ベクトル回転行列の算出を行わないようにする。これによれば、加速度ベクトルからコントローラ5の姿勢を正確に算出することができる場合にのみ、ベクトル回転行列の算出を行うので、ベクトル回転行列を正確に算出することができる。なお、上記のように加速度ベクトルが所定の条件を満たす場合にのみベクトル回転行列の算出を行う場合には、加速度ベクトルが当該所定の条件を満たさないと判定された処理ループにおいては、それまでの処理ループにおいて算出された最新のベクトル回転行列を用いてステップS8の処理を実行する。
【0149】
また、他の実施形態においては、過去所定フレーム分の加速度ベクトルを用いてベクトル回転行列の算出を行うようにしてもよい。すなわち、CPU10は、過去所定フレーム分の加速度ベクトルの履歴をメインメモリに記憶しておき、記憶されている加速度ベクトルのうち、上記第1および/または第2条件を満たす加速度ベクトルを選出する。そして、選出された加速度ベクトルを加算したベクトルを用いて、ステップS5〜S7の処理を実行するようにしてもよい。
【0150】
ステップS9の次のステップS10において、CPU10は、操作検知処理を実行する。操作検知処理は、コントローラ5に対して行われるジャンプ操作(コントローラ5を上方向に動かす操作)を検知するための処理である。ここでは、コントローラ5が上方向に移動されたか、または、コントローラ5の指し示す方向が上側に変化された(コントローラ5が上側に向けられた)場合、コントローラ5が上方向に動かされたと判断し、ジャンプ操作が行われたと判断するものとする。以下、図12を参照して、操作検知処理の詳細を説明する。
【0151】
図15は、図10に示す操作検知処理(ステップS10)の流れを示すフローチャートである。操作検知処理においては、まずステップS31において、CPU10は、上記動きベクトルの鉛直方向成分(Y成分)VYが所定値よりも小さいか否かを判定する。上記所定値は、上記Gよりも小さい値である。コントローラ5が上方向に移動し始めた時点では、コントローラ5に上方向の加速度が加わる(加速度センサは下方向の加速度を検知する)ので、動きベクトルのY成分VYは、上記Gよりも小さい値となる。つまり、ステップS31の判定処理によって、コントローラ5が上方向に動かされているか否かを判定することができる。ステップS31の判定結果が肯定の場合、ステップS32およびS33の処理が実行される。一方、ステップS31の判定結果が否定の場合、ステップS32およびS33の処理がスキップされてステップS34の処理が実行される。
【0152】
ステップS32において、CPU10は、振りフラグをオンに設定する。続くステップS33において、タイマーの値をリセットして、タイマーのカウントを開始する。ステップS33の処理によって、コントローラ5が上方向に移動し始めてからの経過時間を計時する。ステップS33の後、ステップS34の処理が実行される。
【0153】
ステップS34において、CPU10は、振りフラグがオンに設定されているか否かを判定する。ステップS34の処理は、コントローラ5が上方向に移動している最中であるか否かを判定する処理である。ステップS34の判定結果が肯定の場合、ステップS35およびS36の処理が実行される。一方、ステップS34の判定結果が否定の場合、ステップS35およびS36の処理がスキップされてステップS37の処理が実行される。
【0154】
ステップS35において、CPU10は、タイマーの値が所定値以上であるか否かを判定する。この判定は、コントローラ5が上方向に移動し始めてから所定時間が経過したか否かを判定するものである。ステップS35の判定結果が肯定の場合、ステップS36の処理が実行される。一方、ステップS35の判定結果が否定の場合、ステップS36の処理がスキップされてステップS37の処理が実行される。ステップS36において、CPU10は、振りフラグをオフに設定する。また、このとき、CPU10はタイマーのカウントを停止する。ステップS36の後、ステップS37の処理が実行される。
【0155】
ステップS37において、CPU10は、マーカ座標データに基づくゲーム処理を実行する。本実施形態では、CPU10は、当該ゲーム処理として、マーカ座標データに基づいて画面上のポインティング位置を算出し、ポインティング位置に応じてプレイヤキャラクタを移動させる処理を実行する。具体的には、プレイヤキャラクタの左右方向の位置は、画面の左右方向に関してポインティング位置と同じ位置となるように決定される。
【0156】
なお、ポインティング位置を算出するためのアルゴリズムは、撮像画像から画面上のポインティング位置を算出するものであればどのようなものであってもよい。以下、ポインティング位置の算出方法の一例を説明する。ここでは、ポインティング位置を算出するために、マーカ座標から算出される上記対象位置を用いる。CPU10は、図13に示されるxy座標系における対象位置を示す座標を、テレビ2の画面上の位置を表すための座標系(x’y’座標系)の座標に変換する。ここで、xy座標系は、撮像画像の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とするものとする(図13参照)。また、x’y’座標系は、画面の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とするものとする。このとき、上記変換は次のように行うことができる。すなわち、対象位置の座標のx成分の正負を反転させて所定の割合(例えば、撮像画像のx軸方向の長さを、テレビ2の画面のx’軸方向の長さに一致させる割合)でスケーリングすることによって、ポインティング位置のx’成分を得ることができる。また、対象位置の座標のy成分を所定の割合(例えば、撮像画像のy軸方向の長さを、テレビ2の画面のy’軸方向の長さに一致させる割合)でスケーリングすることによって、ポインティング位置のy’成分を得ることができる。以上のようにして算出されたx’y’座標値により示される位置がポインティング位置となる。また、より正確なポインティング位置の算出方法の例としては、上記2つのマーカ座標を結ぶベクトルがy軸に平行になるように撮像画像の中央を中心として対象位置を回転する処理を行い、回転後の対象位置に対して上記変換処理を行う。このような回転による補正処理を行うことによって、コントローラ5がロール方向に傾いている場合等にも、ポインティング位置を正確に算出することができる。
【0157】
ステップS37の次のステップS38において、CPU10は、対象位置に基づいて、コントローラ5に対してジャンプ操作が行われたか否かを判定する。ステップS38の判定は、メインメモリに記憶されている対象位置履歴データ65に含まれる複数の対象位置データ66により示される各対象位置を用いて行われる。この対象位置の時間変化に基づいて、コントローラ5が上方向に動かされた(コントローラ5が上に向けられた)ことを容易に判別することができる。例えば、最新の対象位置と1つ前の対象位置とを比較して、対象位置が(図13に示すy軸正方向)に所定距離以上移動していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の対象位置の移動量を算出するとともに所定数のフレーム間における移動量の平均を算出し、平均移動量が上方向に所定距離以上移動していることを表していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の対象位置の移動量を算出し、対象位置が下方向に所定距離以上移動している期間(フレーム)が所定期間以上であれば、ジャンプ操作が行われたと判断してもよい。上記ステップS38の判定結果が肯定の場合、後述するステップS42の処理が実行される。一方、ステップS38の判定結果が否定の場合、ステップS39の処理が実行される。
【0158】
なお、本実施形態においては、対象位置の履歴を用いてステップS38の判定処理を行ったが、当該判定処理は、対象位置に基づいて行われればよく、例えば、対象位置から算出されるポインティング位置の履歴を用いて行われてもよい。ポインティング位置の履歴を用いる場合も本実施形態と同様、最新のポインティング位置と1つ前のポインティング位置とを比較する方法や、1フレーム毎のポインティング位置の移動量の平均を算出する方法や、ポインティング位置が上方向に所定距離以上移動している期間(フレーム)が所定期間以上であるかを判定する方法によって、ステップS38の判定処理を行うことができる。
【0159】
また、上記ステップS38においては、マーカ座標から算出される対象位置を用いてコントローラ5が移動または回転したことを判別した。ここで、コントローラ5が移動または回転したことの判別は、撮像画像に含まれるマーカ6aおよび6bの画像の画像内での移動に基づいて行われればよい。例えば、他の実施形態では、撮像画像を用いて、マーカ6aおよび6bの画像の輪郭抽出を行い、抽出された輪郭の移動に基づいてコントローラ5が移動または回転していることを判別してもよい。
【0160】
ステップS39において、CPU10は、コントローラ5の上下方向の傾きに基づいて、コントローラ5に対してジャンプ操作が行われたか否かを判定する。ステップS39の判定は、メインメモリに記憶されている上下傾き履歴データ67に含まれる複数の上下傾きデータ68により示される各傾き(AngX)を用いて行われる。この傾きAngXの時間変化に基づいて、コントローラ5が上側に向けられたことを容易に判別することができる。例えば、最新の傾きと1つ前に算出された傾きとを比較して、傾きが上側に所定角度以上変化していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の傾きの変化量を算出するとともに所定数のフレーム間における変化量の平均を算出し、平均変化量が、傾きが上側に所定角度以上変化していることを表していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の傾きの変化量を算出し、変化量が上方向に所定角度以上移動している期間(フレーム)が所定期間以上であれば、ジャンプ操作が行われたと判断してもよい。上記ステップS39の判定結果が肯定の場合、後述するステップS42の処理が実行される。一方、ステップS39の判定結果が否定の場合、ステップS40の処理が実行される。
【0161】
ステップS40において、CPU10は、振りフラグが振りフラグがオンに設定されているか否かを判定する。ステップS40の判定結果が肯定の場合、ステップS41の処理が実行される。一方、ステップS40の判定結果が否定の場合、CPU10は、操作検知処理を終了する。
【0162】
ステップS41において、CPU10は、上記動きベクトルの鉛直方向成分(Y成分)VYの変化量が所定値以上であるか否かを判定する。ここで、コントローラ5を上方向に動かす操作を行う場合、プレイヤは、コントローラ5を上方向に移動させた後、移動を停止させる。したがって、動きベクトルのY成分VYは、コントローラ5が上方向に移動し始めた時点では、負の値となり、移動の停止時においては、負の値から増加していく。したがって、ステップS41の処理によって、コントローラ5の上方向の移動が停止されたか否かを判別することができる。ステップS41の判定結果が肯定の場合、ステップS42の処理が実行される。一方、ステップS41の判定結果が否定の場合、CPU10は、操作検知処理を終了する。
【0163】
コントローラ5に対してジャンプ操作が行われる場合、まず、コントローラ5が上方向の移動を開始するので、ゲーム装置3はこれを検知して(ステップS31でYes)、振りフラグをオンに設定し(ステップS32)、タイマをスタートさせる(ステップS33)。その後、移動開始から所定時間内においては、ステップS40の判定結果が肯定となるのでステップS41の処理が実行され、コントローラ5の上方向の移動が停止されたか否かが判定される。その結果、移動が停止されたと判断されると(ステップS41でYes)、ジャンプ操作が行われたと判断されてステップS42の処理が実行される。一方、開始から所定時間内に移動の停止が検知されない場合、ステップS35の判定結果が否定となり、振りフラグがオフに設定される(ステップS36)。このとき、ステップS40の判定結果が否定となるので、ステップS41およびS42が実行されない。以上のように、本実施形態では、コントローラ5が移動開始から所定期間内に停止された場合、ジャンプ操作が正しく行われたと判断している。
【0164】
なお、他の実施形態においては、上記ステップS41において、CPU10は、最新の動きベクトルのみに基づいて判定を行ってもよい。例えば、最新の動きベクトルのY成分VYの値が所定値以上であるか否かを判定するようにしてもよい。なお、当該所定値は、重力加速度の大きさGよりも大きい値(VY−Gの値を動きデータ71とする場合は、0より大きい値)である。最新の動きベクトルのみに基づいてステップS41の判定を行う場合、メインメモリには最新の動きデータのみを記憶しておけばよく、上記ステップS9の処理は不要である。
【0165】
ステップS42において、CPU10は、ジャンプ操作に従って所定のゲーム処理を実行する。本実施形態では、CPU10は、当該ゲーム処理として、プレイヤキャラクタにジャンプ動作を行わせる。ステップS42の後、CPU10は、操作検知処理を終了する。
【0166】
以上のように、本実施形態における操作検知処理によれば、コントローラ5の撮像手段によって撮像される撮像画像から得られる対象位置を用いてジャンプ操作の検知が行われる(ステップS38)とともに、加速度センサ37の出力(加速度ベクトル)から得られるデータ(上下傾きデータまたは動きデータ)を用いてジャンプ操作の検知が行われる(ステップS39およびS41)。対象位置の変化はコントローラ5の動きの変化に直接対応しており、例えば、コントローラ5が上に移動した場合には対象位置は下に移動し、コントローラ5が下に移動した場合には対象位置は上に移動する。したがって、対象位置の変化に基づいてコントローラ5の動きを検知することによって、加速度センサの出力を用いて検知を行う場合に比べて、コントローラ5の動きを正確に検知することができる。一方、対象位置は、マーカ6Rおよび6Lが検出されない場合には算出されないので、コントローラ5の向きによっては対象位置を用いた検知が行えないことがある。例えば、本実施形態においてプレイヤがコントローラ5を上方向に動かす操作を行った場合、コントローラ5が上に向きすぎてマーカ6Rおよび6Lが検出されなくなり、対象位置を用いた検知が行えない。これに対して、本実施形態によれば、対象位置を用いた検知が行えない場合でも、加速度センサ37の出力を用いた検知を行うことによって、確実に検知を行うことができる。したがって、本実施形態によれば、ジャンプ操作の検知を正確に行うことができるとともに、検知不能となることを防止し、常に検知を行うことができる。なお、他の実施形態においては、ステップS39およびS41の処理のいずれか一方のみを行うようにしてもよい。
【0167】
図10の説明に戻り、ステップS10の次のステップS11において、CPU10は、ゲーム画像を生成して表示する。すなわち、仮想のゲーム空間内においてプレイヤキャラクタおよび障害物等が配置された画像にポインティングアイコンの画像が重畳されたゲーム画像が生成され、テレビ2に表示される(図8)。このとき、プレイヤキャラクタの位置および動作は、コントローラ5を用いたゲーム操作に従って決められる。すなわち、プレイヤキャラクタは、上記ステップS37の処理によって決められた位置に表示され、上記ステップS42の処理が実行された場合はプレイヤキャラクタがジャンプ動作を行う様子を表す画像が表示される。
【0168】
続くステップS12において、CPU10は、ゲームを終了するか否かを判定する。ステップS12の判定は、例えば、ゲームがクリアされたりゲームオーバーとなったか否かや、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS12の判定結果が否定である場合、ステップS2の処理が再度実行される。以降、ステップS12でゲームを終了すると判定されるまで、ステップS2〜S12の処理が繰り返し実行される。一方、ステップS12の判定結果が肯定である場合、CPU10は、図10に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【0169】
(変形例)
上記実施形態においては、コントローラ5のロール方向の傾きAngZを、−180≦AngZ≦180の範囲で表現することによって、コントローラ5が基準状態であるか裏返しの状態であるかを判別するようにした。ここで、他の実施形態においては、以下の変形例に示す方法によってコントローラ5が基準状態であるか裏返しの状態であるかを判別するようにしてもよい。以下、図16および図17を用いて、上記実施形態の変形例におけるゲーム処理を説明する。図16は、本実施形態の変形例における回転行列算出処理の流れを示すフローチャートである。本変形例においては、上記ステップS22およびS23(図12)では、式(2)および(3)に示した変数AngZ’をそのままAngZ’として用いる。そして、ステップS28(図12)の次に、ステップS51の処理が実行される。すなわち、ステップS51において、CPU10は、CPU10は動きベクトルVを算出する。ステップS51の処理は上記ステップS8と同じ処理である。
【0170】
続くステップS52において、CPU10は、ステップS51で算出された動きベクトルVが、重力加速度を示すベクトルから大きくずれているか否かを判定する。具体的には、動きベクトルVと重力加速度を示すベクトル(本実施形態では、(0,G,0))との差分ベクトルを算出し、当該差分ベクトルの大きさが所定値以上であるか否かを判定する。ステップS52の処理は、コントローラ5が基準状態(Y軸負方向が重力方向を向く状態)であるか、コントローラ5が基準状態から裏返しの状態(Y軸正方向が重力方向を向く状態)であるかを判別するための処理である。ステップS52の判定結果が否定の場合、ステップS53の処理が実行される。一方、ステップS52の判定結果が肯定の場合、ステップS54〜S56の処理が実行される。
【0171】
ステップS53においては、CPU10は、補正フラグをオフに設定する。補正フラグは、ベクトル回転行列を補正する必要があるか否かを示すフラグであり、コントローラ5が上記基準状態であるか裏返しの状態であるかに応じてオン/オフが設定される。ステップS53の後、CPU10は回転行列算出処理を終了する。
【0172】
一方、ステップS54においては、CPU10は、上下方向の傾きを逆にして上下回転行列Mxを算出し直す。つまり、上下方向の傾きを“−AngX”として上下回転行列Mxを算出する。ステップS54の処理は、上下方向の傾きを“−AngX”とする点以外はステップS25と同様である。続くステップS55において、CPU10は、ステップS54で算出された上下回転行列Mxと、ステップS26で算出されたロール回転行列Mzとに基づいて、ベクトル回転行列Mを算出する。ベクトル回転行列Mの算出方法は、上記ステップS28と同様である。続くステップS56において、CPU10は、補正フラグをオンに設定する。ステップS56の後、CPU10は回転行列算出処理を終了する。
【0173】
また、図17は、本実施形態の変形例における処理の流れの一部を示すフローチャートである。本変形例では、ステップS8の処理の後、ステップS61の処理が実行される。すなわち、ステップS61において、CPU10は、補正フラグがオンであるか否かを判定する。ステップS61の判定結果が否定の場合、上記ステップS9の処理が実行される。一方、ステップS61の判定結果が肯定の場合、ステップS62の処理が実行される。
【0174】
ステップS62において、CPU10は、ステップS8で算出された動きベクトルVのX成分VXおよびY成分VYにそれぞれ−1をかける。上記ステップS54〜S55の処理によって算出されたベクトル回転行列を用いて得られる動きベクトルは、X成分VXおよびY成分VYの符号が逆になっている。ステップS62の処理は、X成分VXおよびY成分VYの正負の符号を逆にするための処理である。ステップS62の処理の後、ステップS9の処理が実行される。本変形例においては、以上によって得られた動きベクトルを用いて、ステップS10の処理が実行される。
【0175】
以上のように、上記変形例においては、コントローラ5が基準状態であるか、コントローラ5が基準状態から裏返しの状態であるかを判別する(ステップS52)。そして、コントローラ5が裏返しの状態である場合には、上下方向の傾きを逆にして再度上下回転行列およびベクトル回転行列を算出し直す。これによって、上記変形例では、コントローラ5が基準状態である場合も裏返しの状態である場合も、正確にベクトル回転行列および動きベクトルを算出することができる。
【0176】
なお、上記変形例においては、コントローラ5が激しく動かされていない場合にのみ、上記ステップS51〜S56の処理を実行するようにしてもよい。コントローラ5が激しく動かされている場合には、ステップS52の判定処理において正確に判定を行うことができない可能性があるからである。具体的には、加速度ベクトルが上記第1条件および/第2条件を満たす場合にのみ、ステップS51〜S56の処理を実行するようにしてもよい。
【0177】
なお、上記実施形態においては、ポインティング位置を移動させる操作によってプレイヤキャラクタを移動させるとともに、ジャンプ操作によってプレイヤキャラクタにジャンプ動作を行わせるゲームを例として説明したが、本発明は、これに限定されない。本発明は、入力装置が備える撮像手段によって撮像された撮像画像からロール方向の傾きを算出するとともに、入力装置が備える加速度検出手段によって検出された加速度ベクトルから上下方向の傾きを算出し、ロール方向および上下方向の傾きに基づいて入力装置の姿勢を算出する処理を実行する任意の情報処理装置および情報処理プログラムに適用することが可能である。
【0178】
なお、上記実施形態においては、コントローラ5が上方向に動かされた(上方向に移動または回転された)ことを判別すべく、ステップS38,S39,S41等の処理を行ったが、コントローラ5の判別すべき動きは、上方向に限らず、下方向でもよいし、左右方向でもよいし、前後方向でもよい。また、上記実施形態では、撮像画像に基づく判別処理(ステップS38)で、コントローラ5が上方向に移動されたのか回転されたのかを区別せずに判別を行ったが、移動と回転とを区別して、コントローラ5が移動されたことを判別してもよいし、回転されたことを判別してもよい。例えば、撮像手段の撮像方向(Z軸方向)を中心とした回転については、撮像画像に基づいて判別することが可能であるし、加速度センサやジャイロセンサの出力に基づいて判別することも可能である。したがって、撮像手段の撮像方向を中心とした回転をコントローラ5が行ったかどうかを、撮像画像に基づいて判別するとともに、加速度センサやジャイロセンサの出力に基づいて判別するようにしてもよい。これによれば、撮像手段の撮像方向を中心とした回転をより正確に検知することができる。
【産業上の利用可能性】
【0179】
以上のように、本発明は、入力装置の動きを正確に検知すること等を目的として、例えばゲーム装置やゲームプログラムとして利用することが可能である。
【図面の簡単な説明】
【0180】
【図1】ゲームシステム1の外観図
【図2】ゲーム装置3の機能ブロック図
【図3】コントローラ5の外観構成を示す斜視図
【図4】コントローラ5の外観構成を示す斜視図
【図5A】コントローラ5の内部構造を示す図
【図5B】コントローラ5の内部構造を示す図
【図6】コントローラ5の構成を示すブロック図
【図7】コントローラ5を用いてゲーム操作を行うときの様子を示す図解図
【図8】本実施形態においてテレビ2の画面に表示されるゲーム画像の一例を示す図
【図9】ゲーム装置3のメインメモリに記憶される主なデータを示す図
【図10】ゲーム装置3において実行される処理の流れを示すメインフローチャート
【図11】コントローラ5の上下方向の傾きを算出する方法を説明するための図
【図12】図10に示す回転行列算出処理(ステップS7)の流れを示すフローチャート
【図13】マーカ座標に基づいてロール方向の傾きを算出する方法を説明するための図
【図14】加速度ベクトルに基づいてロール方向の傾きを算出する方法を説明するための図
【図15】図10に示す操作検知処理(ステップS10)の流れを示すフローチャート
【図16】本実施形態の変形例における回転行列算出処理の流れを示すフローチャート
【図17】本実施形態の変形例における処理の流れの一部を示すフローチャート
【符号の説明】
【0181】
1 ゲームシステム
2 テレビ
3 ゲーム装置
4 光ディスク
5 コントローラ
6 センサバー
6R,6L マーカ
10 CPU
13 メインメモリ
35 撮像情報演算部
37 加速度センサ
40 撮像素子
【技術分野】
【0001】
本発明は、情報処理プログラムおよび情報処理装置に関し、より特定的には、撮像手段および動きセンサを備える入力装置の動きや傾きに応じた処理を行う情報処理装置および当該情報処理装置において実行される情報処理プログラムに関する。
【背景技術】
【0002】
従来、入力装置の動きを検出することによって、入力装置の動きに応じた入力指示を判別することが行われている。例えば、特許文献1には、ユーザが加速度センサを備えた入力装置を動かすことによって入力指示を行うことができる装置が記載されている。この装置においては、加速度センサによって入力装置の動きを判別して、入力装置の動きに応じた処理を実行するようにしている。
【特許文献1】特開2003−333361号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
加速度センサなどの動きセンサによって入力装置の大まかな動きを検知することは可能であるが、入力装置の動きを正確に検知することは困難である。なぜなら、例えば入力装置をある方向に振った場合のように、入力装置が比較的単純な移動を行った場合でも、その時に検出される加速度の変化は複雑なものになるので、加速度から入力装置の動きを解析する処理が困難になるからである。
【0004】
それ故、本発明の目的は、入力装置の動きを正確に検知することができる情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【0005】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0006】
第1の発明は、入力装置(コントローラ5)の動きに応じた処理を行う情報処理装置(ゲーム装置3)のコンピュータ(CPU10等)で実行される情報処理プログラム(ゲームプログラム60)である。入力装置は、所定の撮像対象(マーカ部6)を撮像するための撮像手段(撮像素子40)と、当該入力装置の動きを検出する動き検出手段(加速度センサ37)とを備えている。情報処理プログラムは、第1判別ステップ(S38)と、第2判別ステップ(S39またはS41)と、第1処理実行ステップ(S42)とをコンピュータに実行させる。第1判別ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動きに基づいて、入力装置の所定の動き(上方向への動き)を判別する。第2判別ステップにおいて、コンピュータは、動き検出手段による検出結果に基づいて入力装置の所定の動き(上方向の動き)を判別する。処理実行ステップにおいて、コンピュータは、第1判別ステップによる判別結果、および、第2判別ステップによる判別結果に応じて、所定の処理(プレイヤキャラクタにジャンプ動作を行わせる処理)を実行する。
【0007】
なお、上記第1の発明および後述する第10の発明において、入力装置と情報処理装置とは別体であってもよいし、一体であってもよい。つまり、第1および第2の発明では、ユーザによって把持される入力装置が有線または無線で情報処理装置と通信可能に構成される形態(図1)であってもよいし、ユーザによって把持される筐体(ハウジング)内に、入力装置と上記情報処理プログラムを実行する情報処理装置とが搭載される形態であってもよい。
【0008】
上記第1の発明において、「撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動き」は、例えば、後述する実施形態におけるマーカ座標や、マーカ座標の中点や、ポインティング位置の動き(移動)によって表される。つまり、マーカ座標や、マーカ座標の中点や、ポインティング位置を繰り返し取得し、取得した履歴から撮像対象の画像の動きを判断することができる。また、撮像対象の画像の動きは、撮像対象の画像の特徴点の位置を算出し、当該特徴点の位置の動きとして算出されてもよい。
【0009】
上記第1の発明において「動き検出手段」は、入力装置に一体的に設けられ、撮像手段とは異なる手段であり、入力装置の動きに応じてデータを出力するセンサである。例えば、直線運動に応じた値を出力するものでもよいし、回転運動に応じた値を出力するものでもよい。直線運動に応じた値を出力するものとして、加速度センサをあげることができ、回転運動に応じた値を出力するものとして、ジャイロセンサをあげることができる。また、加速度センサおよびジャイロセンサは、多軸検出可能なものだけなく1軸検出のものでもよい。また、これらのセンサを組み合わせて、より正確な検出を行うものであってもかまわない。また、上記第1の発明において、判別ステップにおいては、入力装置の直線運動または回転運動を判別する。なお、加速度センサから出力されるデータに後述の処理をおこなうことにより、加速度センサを用いて回転運動を判別することもできる。第1判別ステップおよび第2判別ステップは、用いるセンサの種類に応じて、入力装置の直線運動およびまたは回転運動を判別する。
【0010】
加速度センサを用いて回転運動を判別する例を説明する。単純な例として、1軸の加速度センサとし、入力装置の所定方向に生じる加速度を加速度センサで検出する。そして、加速度センサが検出した加速度を用いて、重力加速度成分の変化を分析することによって、重力方向に直交する軸周りに入力装置が回転したことを判定することが可能である。
【0011】
ここで、加速度センサを用いる場合、加速度センサの検出軸が入力装置の回転運動における回転軸と一致する場合など、加速度センサの検出軸の傾きが変化しない向きに入力装置が回転する場合には、重力加速度の検出軸方向の成分が変化しないので、入力装置の回転を判断することが難しい。一方、加速度センサの検出軸が入力装置の回転運動における回転軸と一致しない場合であれば、入力装置の回転が判断できる。
【0012】
なお、開発者が予め定める正しい操作方法に従って操作されることを前提として正しい処理が行われるようにしておけば十分なケースも多く、その場合には、それ以外の操作をした場合に正しい処理が行われないとしても格段の問題は生じない。したがって、取扱説明書や説明画面などにおいて、正しい操作方法として、入力装置の回転操作の方法(より具体的には、どの軸周りに回転操作させるか)を指示しておけば、ユーザはその指示にしたがって入力装置を回転させる操作するのであり、ユーザが指示された操作から逸脱した操作を行った場合には、入力装置の回転を正確に判断することができないが、その逸脱した程度が許容範囲内であれば、処理としてもおおよそ正しい処理結果が得られる。
【0013】
なお、加速度センサを用いる場合、例えば以下の方法によって加速度センサの出力値から入力装置の傾き(または入力装置の回転)を算出することが可能である。すなわち、加速度センサは、入力装置に作用する重力加速度の成分のみならず、入力装置の動きに応じて作用する加速度の成分を検出するが、これら両方の成分を含む加速度の値のそのままでは入力装置の傾きを正確に算出することができないことがある。したがって、当業者にとって既知の処理により、重力加速度の成分を抽出または選出し、重力加速度の成分に基づいて入力装置の傾きを算出するようにしてもよい。例えば、単純な例としては、加速度センサが検出した加速度の大きさが重力加速度の大きさよりも大きな値(または、十分大きな値)を示すときには、検出された加速度の値が重力加速度を示していないと判断して、当該加速度の値を排除する(入力装置の傾きの算出には用いない)ような処理としてもよい。また、加速度センサが検出した加速度の値の変動が小さいときにのみ、検出された加速度の値が重力加速度を示しているとして、当該加速度の値を姿勢の分析に採用する(入力装置の傾きの算出に用いる)ような処理としてもよい。さらに、加速度センサが検出した加速度の値から当該加速度の高周波成分を除去してもよい。また、入力装置を激しく動かす必要のない情報処理の場合には、入力装置の動きに応じて作用する加速度の成分を除去する処理をしなくてもよい。なぜなら、入力装置の動きに応じた加速度が検出されても、ユーザが入力装置を激しく動かさなければ、ある程度正しい結果が得られるのであって、十分な実用性を有するからである。
【0014】
なお、多軸検出可能な加速度センサを用いて、当該多軸方向にそれぞれ生じた加速度の値を用いる場合には、入力装置の回転の大きさを算出して、より詳細な判断することが可能である。例えば、加速度センサが検出する2つの軸方向の加速度の値を用いて、所定の演算処理をすることにより、入力装置の回転角度を算出することが可能である。典型的には、2つの軸方向の加速度の値を逆正接関数に代入するなどの、三角関数を利用した演算処理を、入力装置の回転角度の算出に用いることができる。または、加速度センサが検出する2つの軸方向の加速度を成分とするベクトルによっても、回転の大きさを判断することができる。
【0015】
次に、第1の発明における動き検出手段としてジャイロセンサを用いて回転運動を判別する場合を説明する。この場合、入力装置を所定軸まわりに回転運動させると、ジャイロセンサはその回転を直接検出して、角速度データを出力する。そして、出力された角速度データに基づいて、入力装置の回転を直接的に判定することが可能である。
【0016】
また、第1の発明において、第1判別ステップでは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、入力装置の所定の動きを判別してもよいが、これに限らず、当業者にとって周知の撮像画像解析方法により、入力装置の動きは判別できる。
【0017】
また、第1の発明において、第1判別ステップで判別される入力装置の動きと、第2判別ステップで判別される入力装置の動きは同一の動きとしてもよいし、異なる動きとしてもよい。
【0018】
(1)第1判定ステップと第2判定ステップが同一の動きを判別する場合
この場合、例えば、第1判別ステップおよび第2判別ステップは、いずれも、入力装置が所定方向に直線運動(移動)したことを判別してもよいし、または、いずれも、入力装置が所定軸を中心に回転したことを判別してもよい。まず、第1判定ステップと第2判定ステップがともに所定方向に直線運動したことを判別する場合について説明する。第1判別ステップは、撮像画像において対象物が移動したことに基づいて、入力装置が撮像方向に対して直交する方向に直線運動したことを判別できる(なお、撮像画像において対象物が移動した場合、入力装置が回転運動した可能性もある。しかしながら、入力装置の動きを正確に判断する必要がない場合には、撮像画像において対象物が移動したことに基づいて、入力装置が撮像方向に対して直交する方向に直線運動したと判別してもよい)。そして、動き検出手段として加速度センサを、撮像方向に対して直交する少なくとも1方向に生じる加速度を検出可能に設けることにより、第2判別ステップでは、入力装置が撮像方向に対して直交する方向に直線運動したことを判別できる。第1判別ステップは、撮像方向に対して直交する任意の方向への直線運動を判別可能であるが、そのうち、加速度センサの検出方向についての直線運動を判別することにより、第1判別ステップおよび第2判別ステップは共通の方向の直線運動を判別できる。または、撮像方向に対して直交する2方向に生じる加速度を2軸以上の加速度センサで検出可能に設ければ、第2判別ステップは、撮像方向に対して直交する任意の方向への直線運動を判別できるので、第1判別ステップおよび第2判別ステップは共通の方向の直線運動を判別可能である。また、2軸または3軸の加速度センサを用いる場合、入力装置の姿勢を判断することが可能であり(2軸の加速度センサの場合には2次元的な姿勢のみ)、当該姿勢に応じて、加速度センサの検出値や撮像画像を補正することにより、第1判別ステップおよびまたは第2判別ステップは、鉛直方向または水平方向の直線運動を判別することもできる。
【0019】
次に、第1判定ステップと第2判定ステップがともに所定軸を中心に回転運動したことを判別する場合について説明する。第1判別ステップは、撮像方向を軸とした回転を判別できる。そして、動き検出手段として加速度センサまたはジャイロセンサを用いて、例えば、加速度センサを撮像方向に直交する方向に生じる加速度を検出可能に設け、典型的な例として撮像方向を水平方向として回転させれば、第2判定ステップにおいて、加速度センサにより検出される重力加速度の大きさに基づいて、撮像方向を軸とする回転を判別できる。また、2軸以上の加速度センサを用いて、撮像方向に直交する2方向に生じる加速度を検出可能に設けることにより、2つの検出値に基づいて、撮像方向を軸とする回転をより正確に判別できる。ジャイロセンサを用いる場合には、撮像方向を軸とする回転を検出可能に設けることにより、第2判定ステップは、当該回転を直接判別できる。また、入力装置が撮像方向に直交する方向を軸として回転したときには、撮像画像において対象物が当該軸に直交する方向に移動するから、これに基づいて、第1判定ステップは、撮像方向に直交する方向を軸とした回転を判別することも可能である(撮像画像において対象物が移動したときには、入力装置が直線運動した可能性もあるが、入力装置の動きを正確に判断する必要がない場合には、撮像方向に直交する方向を軸とした回転と判別してよいことは前述と同様)。そして、加速度センサを撮像方向に生じる加速度を検出可能に設けて、典型的な例として撮像方向が鉛直上下方向に変化するように回転させれば、第2判定ステップにおいて、加速度センサにより検出される重力加速度の大きさに基づいて、撮像方向に直交する方向を軸とする回転を判別できる。また、2軸以上の加速度センサを用いて、撮像方向および撮像方向に直交する方向に生じる加速度を検出可能に設けることにより、2つの検出値に基づいて、撮像方向に直交する方向を軸とする回転をより正確に判別できる。ジャイロセンサを用いる場合には、撮像方向に直交する方向を軸とする回転を検出可能に設けることにより、第2判定ステップは、当該回転を直接判別できる。このようにして、第1判定ステップおよび第2判定ステップは共通の軸を中心とする回転を判別できる。
【0020】
なお、第1判定ステップと第2判定ステップが同一の動きを判別する場合は、第1処理実行ステップは、第1判定ステップと第2判定ステップのいずれかで当該動きの判別がされた場合に所定の処理を実行し、すなわち、第1判定ステップと第2判定ステップは相補的に当該動きの判別をおこなう。
【0021】
(2)第1判定ステップと第2判定ステップが異なる動きを判別する場合
この場合、例えば、第1判定ステップが第1方向の直線運動を判別し、第2判定ステップが第2方向の直線運動を判別するようにしてもよいし、または、第1判定ステップが第1軸まわりの回転運動を判別し、第2判定ステップが第2軸回りの回転運動を判別するようにしてもよい。さらには、第1判定ステップが直線運動を判別し、第2判定ステップが回転運動を判別するか、または、第1判定ステップが回転運動を判別し、第2判定ステップが直線運動を判別してもよい。
【0022】
例えば、動き検出手段として加速度センサを用い、加速度センサが撮像方向に生じる加速度を検出可能に設ける。第1判別ステップでは、入力装置が撮像方向に対して直交する方向に直線運動したことを判別できる。そして、第2判別ステップでは、入力装置が撮像方向に直線運動したことを判別できるので、両者により、入力装置の撮像方向への直線運動と撮像方向に直交する方向の直線運動を判別できる。
【0023】
または、動き検出手段として、加速度センサを撮像方向に生じる加速度を検出可能に設け(または、撮像方向および撮像方向に直交する方向に生じる加速度を検出可能に設け)、または、撮像方向に直交する方向を軸とする回転運動を検出可能にジャイロセンサを設ける。第1判別ステップでは、入力装置が撮像方向を軸として回転運動したことを判別できる。そして、第2判別ステップでは、入力装置が撮像方向に直交する方向を軸として回転運動したことを判別できるので、両者により、入力装置の撮像方向を軸とする回転と撮像方向に直交する方向を軸とする回転を判別できる。
【0024】
または、動き検出手段として、加速度センサを撮像方向に直交する方向に生じる加速度を検出可能に設ける。第1判別ステップは、入力装置が撮像方向を軸として回転運動したことを判別できる。そして、第2判別ステップは、入力装置が撮像方向に直交する方向に直線運動したことを判別できるので、両者により、入力装置の撮像方向を軸とする回転と撮像方向に直交する方向の直線運動を判別できる。
【0025】
または、動き検出手段として、加速度センサを撮像方向に方向に生じる加速度を検出可能に設ける。第1判別ステップは、入力装置が撮像方向を軸として回転運動したことを判別できる。そして、第2判別ステップは、入力装置が撮像方向に直線運動したことを判別できるので、両者により、入力装置の撮像方向を軸とする回転と撮像方向の直線運動を判別できる。
【0026】
なお、第1判定ステップおよび第2判定ステップで判別される動きは、単なる直線運動や回転運動に限らず、所定の軌跡を描くような動き等、複数種類の運動を組み合わせた動きを判別してもよい。
【0027】
また、第1処理実行ステップは、第1判別ステップの判別結果を用いて第1処理をし、第2判別ステップの判別を用いて当該第1処理と異なる第2処理を実行してもよいし、後述の実施例のように、第1判別ステップの判別結果と第2判別ステップの判別結果を総合して入力装置の回転をより詳細に判別して、当該判別結果を用いて所定の処理を実行してもよい。前者の場合、例えば、第1判別ステップの判別結果に応じて(すなわち、撮像手段の撮像方向を軸とした回転に応じて)、オブジェクトを左右方向(画面の左右方向またはオブジェクトの左右方向)に移動制御したり、オブジェクトを回転表示(画面に垂直な方向を軸として回転、または、オブジェクトの前後方向を軸として回転)したりしてもよい。また、第2回転判別ステップの判別結果に応じて(すなわち、撮像手段の撮像方向と異なる方向を軸とした回転に応じて)、オブジェクトを前後方向(画面の奥行き方向またはオブジェクトの前後方向)に移動制御したり、オブジェクトを上下方向(画面の上下方向またはオブジェクトの上下方向)に移動制御したり、オブジェクトを回転表示(画面に並行な方向を軸として回転、または、オブジェクトの左右方向を軸として回転)したりしてもよい。より一般的には、第1判別ステップの判別結果を用いて、オブジェクトに第1動作をさせ、第2判別ステップの判別結果を用いて、オブジェクトに当該第1動作と異なる第2動作をさせてもよい。すなわち、入力装置の異なる2つの軸まわりの回転を検出して、それぞれの回転に応じて、異なる2つの処理を実行することにより、入力装置の回転操作によって異なる2つの処理のための入力をおこなうことができる。
【0028】
第2の発明においては、第2判別ステップにおいて、コンピュータは、第1判別ステップで判別される所定の動きと同じ種類の動き(たとえば、上方向の動き)を判別してもよい。このとき、第1処理実行ステップにおいて、コンピュータは、第1判別ステップおよび第2判別ステップの少なくともいずれかで所定の動きが判別された場合、所定の処理を実行する。
【0029】
第3の発明においては、動き検出手段は加速度センサであってもよい。このとき、第1判別ステップにおいて、コンピュータは、撮影画像に含まれる撮像対象の当該画像内での移動に基づいて、入力装置が所定方向に移動または回転したことを判別してもよい(S38)。このとき、第2判別ステップにおいて、コンピュータは、加速度センサによる検出結果から算出される入力装置の動きに基づいて入力装置が所定方向に移動したことを判別する(S41)。第1処理実行ステップにおいて、コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置の動きが行われたことが判別された場合、前記所定の処理を実行する。
【0030】
また、第3の発明における「所定方向」は、入力装置における所定方向(入力装置において固定された方向;例えば、図3におけるX軸方向またはY軸方向など)でもよいし、鉛直方向や水平方向であってもよい。後者の場合には、第2判別ステップにおいては、例えば、加速度センサを所定方向の加速度を検出可能に設け、加速度センサの検出結果から重力加速度の成分を除去することによって、入力装置の動きを算出することができる。また、例えば、加速度センサを1軸以上の加速度センサとして(3軸が好ましい)、当該加速度センサの出力に基づいて入力装置の現在の姿勢(2軸の場合は2次元の姿勢)を算出し、第1判別ステップおよび第2判別ステップは、当該姿勢に基づいて加速度センサの出力値や撮像画像を補正することによって入力装置の動きを算出することができる。このように算出される入力装置の動きから、入力装置が所定方向へ移動したことを判別することができる。なお、第1判別ステップにおいては、姿勢に基づく回転補正をせず、(ユーザが入力装置を正しく把持していることを前提として、)入力装置が鉛直方向(または水平方向)に移動したことを判断してもよい(すなわち、ユーザが正しく把持した状態で鉛直方向となるような入力装置における所定方向(例えば、後述の図3におけるY軸方向)に移動したことを判断してもよい)。このとき、第2判別ステップにおいては、姿勢に基づく補正を行う。これにより、(ユーザが入力装置をどのように把持していたとしても)実際の現姿勢における鉛直方向(または水平方向)に移動したことを判断してもよい。
【0031】
第4の発明においては、情報処理プログラムは、加速度センサによる検出結果から算出される、水平方向(より特定的には、撮像方向に垂直な水平方向)を軸とした回転に関する入力装置の傾きに基づいて、当該軸を中心とした入力装置の回転を判別する第3判別ステップ(S39)をコンピュータにさらに実行させてもよい。このとき、第1判別ステップにおいて、コンピュータは、入力装置が鉛直方向に移動または回転したことを判別する。第2判別ステップにおいて、コンピュータは、入力装置が鉛直方向に移動したことを判別する。第1処理実行ステップにおいて、コンピュータは、第1判別ステップ、第2判別ステップ、および、第3判別ステップの少なくともいずれかで動きが行われたことが判別されたときに、前記所定の処理を実行する。
【0032】
また、加速度センサは、少なくとも1軸の加速度を検出可能であり、入力装置における所定方向(入力装置に対して固定される方向)に生じる加速度を検出可能なように入力装置に設けられる。第2傾き算出ステップにおいては、加速度センサの検出方向についての重力加速度成分を判断し、これにより、当該検出方向に直交する方向を軸とした回転に関する傾きを算出することができる。例えば、加速度センサが撮像手段の撮像方向(例えば、後述する図3におけるZ軸方向)に生じる加速度を検出可能となるように設けても良く、この場合、撮像方向が鉛直上下方向に変化するような入力装置の傾きの変化により、撮像方向に生じる重力加速度成分が変化するので、これを加速度センサにより検出することにより、撮像方向に直交する水平軸を中心とする回転に関する傾き(これは撮像軸が水平面と成す角度である)を判定することができる。
【0033】
また、2軸の加速度を検出可能な加速度センサを用いて、撮像手段の撮像方向(例えば、後述する図3におけるZ軸方向)およびそれに直交する方向A(例えば、後述する図3におけるY軸方向)に生じる加速度を検出可能となるように設けてもよい。この場合、撮像方向および当該直交する方向Aがともに鉛直上下方向に変化するような入力装置の傾きの変化により(例えば、後述する図3におけるZ軸およびY軸がともに鉛直上下方向に変化するような入力装置の傾きの変化により)、加速度センサによる2方向の検出値がいずれも変化して、その2つの検出値により、撮像方向に直交し、かつ、方向Aにも直交する方向(例えば、後述する図3におけるX軸方向)を軸とした回転に関する傾き(これは撮像軸が水平面と成す角度である)を算出することが可能である。
【0034】
なお、本明細書において、「ある方向を軸とした回転に関する傾き」とは、当該ある方向を軸とする回転により増減する傾きのことであり、基準姿勢からの当該回転の角度が傾き角度となるような傾きのことである。より具体的には、入力装置における軸(入力装置に対して固定される軸;例えば、後述の図3におけるX軸、Y軸、またはZ軸)のうちある方向(例えば、図3におけるZ軸方向)に直交する所定軸(例えば、図3におけるX軸またはY軸)について、現姿勢における当該所定軸が、基準姿勢における当該所定軸を基準として、当該ある方向を軸としてどの程度回転しているかを示すものである。
【0035】
なお、第3判別ステップでは、加速度センサの検出値に基づいて、水平方向を軸とした回転に関する傾きを判定または算出し、それに基づいて、当該軸を中心とした回転を判別するが、当該水平方向を軸とした回転に関する傾き(水平方向に対する傾き)は、例えば次のようにして算出することができる。
(1)ユーザが所定の操作をすることを前提にして、水平方向に対する傾きを算出する設計する場合
入力装置に設定される所定の1軸(例えば、後述する実施形態で言えば、図3に示すX軸)に垂直な1軸(例えば、後述する実施形態で言えば、図3に示すY軸またはZ軸)に生じる加速度を検出可能なように加速度センサを設けることによって、ユーザが、当該所定の1軸が水平方向を向く状態を保ったまま、当該所定の1軸を中心として入力装置を回転(すなわち、当該垂直な1軸が鉛直上下方向に向きを変えるような回転)させることを前提として、当該水平方向に対する傾きを算出することができる。また、この場合、上記所定の1軸に垂直な2軸(例えば、後述する実施形態で言えば、Y軸およびZ軸)に生じる加速度を検出可能なように加速度センサを設けることによって、当該垂直な2軸に生じる2つの加速度の検出値を用いてより正確に傾きを検出することができる。
【0036】
(2)ユーザが入力装置をどのように操作したとしても、水平方向に対する傾きを算出可能に設計する場合
上述の(1)は、ユーザが上記所定の1軸が水平方向に向く状態で回転させることを前提とした設計であったが、ユーザが入力装置の任意の軸が水平方向に向く状態で回転させたとしても、水平方向に対する傾きを算出できる設計も可能である。この場合、3軸の加速度を検出する加速度センサを用いればよい。例えば、後述する実施形態において説明する方法で当該所定の水平軸まわりの回転に関する傾きを算出することができる。
【0037】
また、第1判別ステップおよび第2判別ステップにおいて鉛直方向の移動等を判別する場合においても、上記(1)および(2)と同様、(1)ユーザが所定の操作を行うことを前提とする場合と、(2)任意の姿勢の状態で入力装置が操作される場合とのいずれの方法で判別が行われてもよい。例えば、第1判別ステップにおいては、撮像画像上における撮像対象の画像の位置の変化に基づいて鉛直方向の移動を判別することが可能である。すなわち、(1)の場合、所定の1軸方向に関する位置(座標)の変化に基づいて鉛直方向の移動を判別してもよい。(2)の場合、撮像対象の画像の位置座標を入力装置の姿勢(例えば加速度センサの出力結果から算出することができる)に応じて補正することによって、入力装置の姿勢を考慮した位置を算出し、算出された位置の変化に基づいて鉛直方向の移動を判別してもよい。また、例えば、第2判別ステップにおいては、(1)の場合、所定の1軸方向に関する加速度の変化に基づいて鉛直方向の移動を判別してもよい。また、(2)の場合、3軸方向の加速度を表すベクトルを、入力装置の姿勢に応じて補正する(例えばステップS8の処理)ことによって、入力装置の姿勢を考慮したベクトルを算出し、算出されたベクトルの変化に基づいて鉛直方向の移動を判別してもよい。
【0038】
第5の発明において、情報処理プログラムは、第1傾き算出ステップ(S22)と、第2傾き算出ステップ(S5)と、姿勢算出ステップ(S27)とを、コンピュータにさらに実行させてもよい。第1傾き算出ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像に関する当該撮像画像内における傾きに基づいて、撮像手段の撮像方向を軸とした回転に関する入力装置の傾きを第1の傾きとして算出する。第2傾き算出ステップにおいて、コンピュータは、加速度センサの検出結果に基づいて、水平方向を軸とした回転に関する入力装置の傾きを第2の傾きとして算出する。姿勢算出ステップにおいて、コンピュータは、第1の傾きおよび第2の傾きに基づいて、入力装置の姿勢を算出する。第3判別ステップにおいて、コンピュータは、第2の傾きに基づいて入力装置の回転を判別する。第2判別ステップにおいて、コンピュータは、加速度センサによって検出された3軸方向の加速度を姿勢算出ステップによって算出された姿勢に基づいて補正することにより得られる入力装置の動きを用いて判別を行う。
【0039】
なお、上記第5の発明において、第1傾き算出ステップにおいては、撮像画像を解析することにより、撮像方向を軸とした回転に関する傾きを算出するようにしてもよい。典型的には、撮像手段により所定の撮像対象(マーカ6aおよび6b)を撮像し、撮像画像に含まれる当該撮像対象の画像に関する当該撮像画像内における傾き(マーカ6aおよび6bを結ぶ線分の傾き)に基づいて第1の傾きを算出する。しかしながら、所定の撮像対象としてマーカ6aおよび6bのような特定の撮像対象を設けることは必須ではなく、特定の撮像対象を設けない場合は、或る時点の撮像画像とその後の或る時点の撮像画像を比較して、両画像における同一対象物の傾きの変化を算出することにより、撮像方向を軸とした回転を判定することができ、それに基づいて傾きを判定することが可能である。
【0040】
なお、第1傾き算出ステップおよび第2傾き算出ステップにおいて算出される傾きは、所定の傾きを基準(0°)として表される角度によって表現される形式であってもよいし、ベクトルによって表現される形式であってもよい。また、上記傾きは、任意の単位で表現されればよく、例えば1°単位で表されてもよいし、90°単位で表されてもよい。例えば、入力装置が水平方向を向いているか、それとも鉛直方向を向いているかという2値のみによって上記傾きを表現するようにしてもよい。
【0041】
第6の発明においては、加速度センサは、撮像手段の撮像方向を軸とした回転に応じて変化する値を出力可能であってもよい。このとき、情報処理プログラムは、判定ステップ(S21)と、第3傾き算出ステップ(S23,S24)とをさらにコンピュータに実行させてもよい。判定ステップにおいて、コンピュータは、第1傾き算出ステップにおいて第1の傾きを算出することが可能か否かを、撮像手段による撮像対象の撮像状況に基づいて判定する。第3傾き算出ステップにおいて、コンピュータは、判定ステップにおいて第1の傾きを算出することが不可能と判定された場合、加速度センサの出力値に基づいて第1の傾きを算出する。
【0042】
加速度センサは、例えば、撮像方向に生じる加速度を検出可能に設けられる。好ましくは、撮像方向(例えば、後述の図3におけるZ軸方向)および撮像方向に直交する或る方向A(例えば、後述の図3におけるY軸方向)に生じる加速度を検出可能に設けられる。そして、撮像方向に直交し、かつ、方向Aにも直交する軸(例えば、後述の図3におけるX軸)を中心に回転させるように操作することにより(典型的には、当該軸が水平のまま回転させることにより)、第3傾き算出ステップは、当該軸を中心とする回転に関する傾きを判別することができる。
【0043】
第7の発明において、動き検出手段は加速度センサであってもよい。このとき、第1判別ステップにおいて、コンピュータは、撮影画像に含まれる撮像対象の当該画像内での移動に基づいて、入力装置が鉛直方向に移動または回転したことを判別する(S38)。第2判別ステップにおいて、コンピュータは、加速度センサによる検出結果から算出される、水平方向を軸とした回転に関する入力装置の傾きに基づいて入力装置の回転を判別する(S39)。第1処理実行ステップにおいて、コンピュータは、第1判別ステップおよび第2判別ステップの少なくともいずれかで、入力装置の動きが行われたことが判別された場合、所定の処理を実行する。
【0044】
第8の発明においては、第1判別ステップにおいて、コンピュータは、撮像手段の撮像方向を軸として入力装置が回転したことを判別してもよい。このとき、第2判別ステップにおいて、コンピュータは、センサの検出結果に基づいて、入力装置が撮像方向を軸として回転したことを判別する。第1処理実行ステップにおいて、コンピュータは、第1判別ステップおよび第2判別ステップの少なくともいずれかで、入力装置が回転したと判別された場合、所定の処理を実行する。
【0045】
第9の発明においては、コンピュータは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、入力装置の所定の動きを判別してもよい。このとき、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、所定の処理とは異なる処理を実行する第2処理実行ステップをコンピュータにさらに実行させる。
【0046】
また、第10の発明は、入力装置(コントローラ5)の傾きに応じた処理を行う情報処理装置(ゲーム装置3)のコンピュータ(CPU10等)で実行されるプログラム(ゲームプログラム60)である。入力装置は、所定の撮像対象(マーカ部6)を撮像するための撮像手段(撮像素子40)と、当該入力装置の動きを検出する動き検出手段(加速度センサ37)とを備えている。情報処理プログラムは、第1判別ステップ(S5)と、第2判別ステップ(S22)と、処理実行ステップ(S27)とをコンピュータに実行させる。第1判別ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における傾きに基づいて、入力装置の所定の傾きを判別する。第2判別ステップにおいて、コンピュータは、動き検出手段による検出結果に基づいて入力装置の所定の傾きを判別する。処理実行ステップにおいて、コンピュータは、第1判別ステップによる判別結果、および、第2判別ステップによる判別結果に応じて、所定の処理を実行する。
【0047】
第11の発明においては、動き検出手段は、入力装置の撮像手段の撮像方向と異なる所定方向を軸とした回転に応じて変化する値を出力するセンサであってもよい。このとき、第1判別ステップにおいて、コンピュータは、撮像手段によって撮像された撮像画像に含まれる撮像対象の画像に関する当該撮像画像内における傾きに基づいて、撮像方向を軸とした回転に関する入力装置の傾きを判別する。第2判別ステップにおいて、コンピュータは、センサの出力値に基づいて、入力装置の所定方向を軸とした回転に関する入力装置の傾きを判別する。処理実行ステップにおいて、コンピュータは、第1の傾きおよび第2の傾きに基づいて入力装置の姿勢を算出する。
【0048】
第12の発明においては、センサは、加速度センサであって、3軸方向の加速度をそれぞれ検出することが可能であってもよい。このとき、処理実行ステップにおいて、コンピュータは、加速度検出手段によって検出された3軸方向の加速度を、算出された姿勢に基づいて補正することにより入力装置の動きをさらに算出する。
【0049】
また、本発明は、上記各ステップを実行する情報処理装置と同等の機能を有する情報処理装置の形態で提供されてもよい。
【発明の効果】
【0050】
第1の発明によれば、撮像手段と動き検出手段とによってそれぞれ入力装置の動きを判別するので、加速度センサ等の動きセンサのみによって動きを検知する場合に比べて、入力装置の動きをより正確に検知することができる。
【0051】
第2〜第8の発明によれば、撮像手段と動き検出手段とによって入力装置の同じ動きを判別する。そして、いずれか一方において所定方向への動きが判別された場合、所定の処理が実行される。このように、2種類の方法で動きを検知することによって、加速度のみに基づいて動きを検知する場合に比べて、より正確に動きを検知することができる。
【0052】
さらに、第4の発明によれば、第1判別ステップ、第2判別ステップ、および第3判別ステップの少なくともいずれかで入力装置の動きが検知された場合、所定の処理を実行する。したがって、入力装置の動きをより確実に検知することができる。
【0053】
またさらに、第5の発明によれば、第3判別ステップにおいて第2の傾きに基づいて判別を行うとともに、第2判別ステップにおいては、当該第2の傾きを用いて算出される入力装置の動きに基づいて判別を行う。したがって、第2判別ステップにおいては、入力装置の動きを正確に算出することができるので判別を正確に行うことができるとともに、第3判別ステップで用いる第2の傾きを用いて姿勢を算出することによって、処理を簡易化することができる。
【0054】
第6の発明によれば、撮像手段によって撮像対象が撮像されていないために第1傾き算出ステップにおいて第1の傾きを算出することが不可能となる場合であっても、第1の傾きを算出することができる。撮像手段を用いた第1の傾きの算出は、撮像手段によって撮像対象が撮像されなければ実行できないのに対して、加速度センサを用いた第1の傾きの算出は常に実行することができる。したがって、第7の発明によれば、常に入力装置の姿勢を算出することができ、より操作性の良い入力装置を提供することができる。
【0055】
第9の発明によれば、入力装置によって指示位置を指定する操作と、入力装置を動かす操作とを操作に用いることができる。
【0056】
第10の発明によれば、撮像手段と動き検出手段とによってそれぞれ入力装置の傾きを判別するので、加速度センサ等の動きセンサのみによって傾きを検知する場合に比べて、入力装置の傾きをより正確に検知することができる。
【0057】
第11の発明によれば、撮像手段と動き検出手段とによってそれぞれ入力装置の傾きを算出し、それらに基づいて入力装置の姿勢を算出するので、入力装置の姿勢をより正確に算出することができる。
【0058】
第12の発明によれば、正確に算出される姿勢を用いることによって、加速度センサの検出結果から入力装置の動きを正確に算出することができる。
【発明を実施するための最良の形態】
【0059】
(ゲームシステムの全体構成)
図1を参照して、本発明の一実施形態に係るゲーム装置を含むゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置3、光ディスク4、コントローラ5、およびマーカ部6を含む。本システムは、コントローラ5を用いたゲーム操作に基づいてゲーム装置3でゲーム処理を実行するものである。
【0060】
ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるためのゲームプログラムが記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【0061】
ゲーム装置3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ2の画面の周辺(図1では画面の上側)には、マーカ部6が設置される。マーカ部6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部6はゲーム装置3に接続されており、ゲーム装置3はマーカ部6が備える各赤外LEDの点灯を制御することが可能である。
【0062】
コントローラ5は、自機に対して行われた操作の内容を示す操作データをゲーム装置3に与える入力装置である。コントローラ5とゲーム装置3とは無線通信によって接続される。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。
【0063】
(ゲーム装置3の内部構成)
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の構成を示すブロック図である。ゲーム装置3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
【0064】
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSIの内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
【0065】
また、システムLSI11には、入出力プロセッサ11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
【0066】
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
【0067】
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
【0068】
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
【0069】
入出力プロセッサ(I/Oプロセッサ)11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
【0070】
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
【0071】
また、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
【0072】
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【0073】
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
【0074】
(コントローラ5の構成)
次に、図3〜図6を参照して、コントローラ5について説明する。図3および図4は、コントローラ5の外観構成を示す斜視図である。図3は、コントローラ5の上側後方から見た斜視図であり、図4は、コントローラ5を下側前方から見た斜視図である。
【0075】
図3および図4において、コントローラ5は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ5を用いることによって、それに設けられたボタンを押下すること、および、コントローラ5自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
【0076】
ハウジング31には、複数の操作ボタンが設けられる。図3に示すように、ハウジング31の上面には、十字キー32a、1番ボタン32b、2番ボタン32c、Aボタン32d、マイナスボタン32e、ホームボタン32f、プラスボタン32g、および電源ボタン32hが設けられる。一方、図4に示すように、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作ボタン32a〜32iには、ゲーム装置3が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン32hは遠隔からゲーム装置3本体の電源をオン/オフするためのものである。ホームボタン32fおよび電源32hは、その上面がハウジング31の上面に埋没している。これによって、プレイヤがホームボタン32fまたは電源32hを誤って押下することを防止することができる。
【0077】
ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、コントローラ5に他の機器(例えば、他のコントローラ)を接続するために利用される。
【0078】
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のメインコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ5の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
【0079】
また、コントローラ5は撮像情報演算部35(図5B)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
【0080】
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ49(図5A)からの音を外部に放出するための音抜き孔31aが形成されている。
【0081】
次に、図5Aおよび図5Bを参照して、コントローラ5の内部構造について説明する。図5Aおよび図5Bは、コントローラ5の内部構造を示す図である。なお、図5Aは、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bは、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bに示す斜視図は、図5Aに示す基板30を裏面から見た斜視図となっている。
【0082】
図5Aにおいて、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ49等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図5B参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
【0083】
一方、図5Bにおいて、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
【0084】
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ48が設けられている。バイブレータ48は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ48が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ48は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ48がコントローラ5の中心よりも端側に配置することによって、バイブレータ48の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5Aおよび図5Bに示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ49に音声信号を出力するアンプ等を備えている。
【0085】
なお、図3〜図5A、図5Bに示したコントローラ5の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はZ軸方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【0086】
図6は、コントローラ5の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、コネクタ33、撮像情報演算部35、通信部36、および加速度センサ37を備えている。コントローラ5は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置3へ送信するものである。
【0087】
操作部32は、上述した各操作ボタン32a〜32iを含み、各操作ボタン32a〜32iに対する入力状態(各操作ボタン32a〜32iが押下されたか否か)を示すデータを通信部36のマイコン42へ出力する。
【0088】
撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ5の動きでも追跡して解析することができる。
【0089】
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ5の前方から入射する光から赤外線のみを通過させる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDセンサのような固体撮像素子であり、レンズ39が集光した赤外線を受光して画像信号を出力する。ここで、テレビ2の表示画面近傍に配置されるマーカ部6のマーカ6Rおよび6Lは、テレビ2の前方に向かって赤外光を出力する赤外LEDで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、マーカ6Rおよび6Lの画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ6Rおよび6L)の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。なお、他の実施形態では、コントローラ5は、マーカ座標を算出するために必要なデータ(例えば、撮像画像のデータ)をゲーム装置3へ送信し、ゲーム装置3が当該データに基づいてマーカ座標を算出するようにしてもよい。
【0090】
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、3軸または2軸の加速度センサは、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。なお、加速度センサ37は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
【0091】
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるXYZ座標系における3次元のベクトルとして表される。以下では、加速度センサ37によって検出される3軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【0092】
加速度センサ37が検出した加速度(加速度ベクトル)を示すデータ(加速度データ)は、通信部36へ出力される。本実施形態において、加速度センサ37は、コントローラ5の動きを算出するためのデータを出力するセンサとして用いられる。つまり、ゲーム装置3は、加速度データと、上記マーカ座標データとに基づいてコントローラ5の姿勢および動きを算出する。なお、コントローラ5の姿勢および動きを算出する方法については後述する。
【0093】
なお、加速度センサ37から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラのプロセッサ(例えばマイコン42)などのコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサを搭載するコントローラが静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合)、コントローラが現実に静的な状態であれば、検出された加速度に基づいてコントローラの姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサの検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサの場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ37からの出力に基づいて、プロセッサがコントローラ5の傾き角度のデータを算出する処理をおこなってもよいが、当該傾き角度のデータを算出する処理をおこなうことなく、加速度センサ37からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾き、姿勢または位置を判定することができる。一方、加速度センサ37が動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ37を備えるコントローラ5がユーザの手で動的に加速されて動かされる場合に、加速度センサ37によって生成される加速度信号を処理することによって、コントローラ5のさまざまな動きおよび/または位置を算出することができる。なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向対する傾きを知ることが可能である。他の実施例では、加速度センサ37は、信号をマイコン42に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
【0094】
なお、本実施形態では、コントローラの姿勢を算出するために例えば、静電容量式の加速度センサを用いることとしたが、他の方式の加速度センサやジャイロセンサを用いるようにしてもよい。ただし、加速度センサは各軸に沿った直線方向の加速度をそれぞれ検出するものであるのに対して、ジャイロセンサは回転に伴う角速度を検出するものである。つまり、加速度センサに代えてジャイロセンサを採用する場合には、検出される信号の性質が異なるため、両者を簡単に置き換えることはできない。そこで、加速度センサの代わりにジャイロセンサを用いて姿勢を算出する場合には、大幅な変更を行う。具体的には、検出開始の状態において姿勢の値を初期化する。そして、当該ジャイロセンサから出力される角速度のデータを積分する。さらに、積分結果を用いて、初期化された姿勢の値からの姿勢の変化量を算出する。この場合、算出される姿勢は、角度で表されることになる。
【0095】
なお、既に説明したように、加速度センサによって姿勢を算出する場合には、加速度ベクトルを用いて姿勢を算出する。したがって、算出される姿勢はベクトルで表すことが可能であり、初期化を行わずとも絶対的な方向を算出することが可能である点で、加速度センサを用いる場合とジャイロセンサを用いる場合とで異なる。また、姿勢として算出される値の性質についても上記のように角度であるかベクトルであるかの違いがあるので、加速度センサからジャイロセンサへの置き換えを行う際には当該姿勢のデータに対しても所定の変換を行う必要がある。
【0096】
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
【0097】
操作部32、撮像情報演算部35、および加速度センサ37からマイコン42へ出力されたデータは、一時的にメモリ43に格納される。これらのデータは、上記操作データとしてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3無線コントローラモジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ5から送信される。微弱電波信号はゲーム装置3側の無線コントローラモジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。なお、通信部36から無線コントローラモジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で各操作データをゲーム装置3の無線コントローラモジュール19へ出力する。
【0098】
上記コントローラ5を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作を行うことができる。
【0099】
(ゲーム操作およびゲーム処理の概要)
図7を参照して、ゲーム操作の例について説明する。図7は、コントローラ5を用いてゲーム操作を行うときの様子を示す図解図である。本実施形態では、プレイヤは、図7に示すように、コントローラ5によってテレビ2の画面上の位置Pを指し示すゲーム操作を行う。ここで、位置Pは、コントローラ5によって指し示される画面上の位置であり、理想的には、コントローラ5の前端部から上記長手方向に延ばした直線とテレビ2の画面とが交わる位置である。ただし、厳密に当該位置である必要はなく、その周辺の位置をゲーム装置3によって算出することができればよい。以下では、コントローラ5によって指し示される画面上の位置を「ポインティング位置」と呼ぶ。プレイヤは、画面上のポインティング位置を移動させることによってゲーム操作を行う。
【0100】
図8は、本実施形態においてテレビ2の画面に表示されるゲーム画像の一例を示す図である。図8に示すように、テレビ2の画面には、プレイヤキャラクタ51、障害物(例えば木52や切り株53)、および、ポインティングアイコン54等が表示される。
【0101】
ゲーム中において、プレイヤキャラクタ51は、プレイヤによる指示なしに自動的に画面奥方向に向かってゲーム空間を移動する。本ゲームでは、プレイヤは、木や切り株等の障害物にプレイヤキャラクタ51が当たらないようにプレイヤキャラクタ51を操作し、ゲーム空間を移動させることが目的である。
【0102】
プレイヤキャラクタ51は、画面の左右方向の移動、および、ジャンプ動作が可能である。したがって、プレイヤキャラクタ51は、画面の左右方向の移動によって障害物を避けることができるとともに、切り株のような低い障害物であればジャンプ動作によって(切り株を飛び越えることによって)障害物を避けることができる。
【0103】
プレイヤキャラクタ51の左右方向の移動は、コントローラ5の向きを変える操作、すなわち、画面上においてポインティング位置を移動させる操作によって行われる。本実施形態では、プレイヤキャラクタ51は、画面の左右方向に関してポインティング位置と同じ位置に位置するように移動される。したがって、プレイヤは、基本的にはコントローラ5を画面に向けた状態で把持してゲーム操作を行う。なお、本実施形態では、ポインティング位置にはポインティングアイコン54が表示されるので、プレイヤは、ポインティングアイコン54を見ることによって、コントローラ5が現在どこを指しているかを容易に知ることができる。
【0104】
一方、プレイヤキャラクタ51のジャンプ動作は、コントローラ5を上方向に動かす操作(以下、ジャンプ操作と呼ぶ)によって行われる。本実施形態では、コントローラ5を上方向に動かす操作は、コントローラ5の先端を上方向(重力方向の逆方向)に動かす操作であればよく、コントローラ5を上方向に平行移動させる操作でもよいし、コントローラ5の指し示す方向を上側に変化させる(コントローラ5を上に向ける)操作でもよい。本実施形態では、ジャンプ操作が行われたか否かの判断(コントローラ5の上方向への移動の検知)は、上記マーカ座標データと加速度データとに基づいて判断される。ジャンプ操作が行われたか否かの判断方法については後で詳細に説明する。
【0105】
(ゲーム処理の詳細)
以下、図9〜図15を参照して、ゲーム装置3において実行されるゲーム処理の詳細について説明する。まず、ゲーム処理において用いられる主なデータについて図9を用いて説明する。図9は、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図9に示すように、メインメモリには、ゲームプログラム60、操作データ61、およびゲーム処理用データ64等が記憶される。なお、メインメモリには、図9に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【0106】
ゲームプログラム60は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。ゲームプログラム60には、コントローラ5の姿勢を算出したり、算出された姿勢に基づいてコントローラ5の動きを判別したりするための処理を実行するのに必要なプログラムが含まれている。
【0107】
操作データ61は、コントローラ5からゲーム装置3へ送信されてくる操作データである。操作データ61には、加速度データ62およびマーカ座標データ63が含まれる。なお、図示していないが、操作データ61には、操作ボタンデータが含まれていてもよい。操作ボタンデータは、操作部32の各ボタン32a〜32iに対して行われた操作内容(各ボタン32a〜32iが押下されたか否か)を示すデータである。なお、上述したように、コントローラ5からゲーム装置3へ1/200秒に1回の割合で操作データが送信されるので、メインメモリに記憶される操作データはこの割合で更新される。また、メインメモリには、最新の(最後に取得された)操作データのみが記憶される。
【0108】
加速度データ62は、加速度センサ37によって検出された加速度(加速度ベクトル)を示すデータである。ここでは、加速度データ62は、図3に示すXYZの3軸の方向に関する加速度ベクトルA=(AX,AY,AZ)を示すデータである。
【0109】
マーカ座標データ63は、撮像情報演算部35の画像処理回路41によって算出される座標、すなわち上記マーカ座標を示すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための座標系(図13に示すxy座標系)で表現される。なお、撮像素子40によって2つのマーカ6Rおよび6Lが撮像される場合には、2つのマーカ座標((x1,y1)および(x2,y2)とする)が算出される。一方、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lのいずれか一方が位置しない場合には、撮像素子40によって1つのマーカのみが撮像され、1つのマーカ座標のみが算出される。また、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lの両方が位置しない場合には、撮像素子40によってマーカが撮像されず、マーカ座標は算出されない。したがって、マーカ座標データは、2つのマーカ座標を示す場合もあるし、1つのマーカ座標を示す場合もあるし、マーカ座標がないことを示す場合もある。
【0110】
ゲーム処理用データ64は、後述するゲーム処理(図10)において用いられるデータである。ゲーム処理用データ64は、対象位置履歴データ65、上下傾き履歴データ67、ロール傾きデータ69、動き履歴データ70、上下回転行列データ72、ロール回転行列データ73、ベクトル回転行列データ74等を含む。
【0111】
対象位置履歴データ65は、対象位置の履歴を示すデータであり、複数の対象位置データ66を含む。ここで、対象位置とは、撮像対象(マーカ6Rおよび6L)の画像の、撮像画像内における位置であり、対象位置データ66は対象位置を示すデータである。具体的には、対象位置は、2つのマーカ座標の中点の位置である。対象位置履歴データ65は、対象位置データ66が生成される度に、新しいものから順に所定個数(2つ以上)の対象位置データ66を含むように更新される。つまり、対象位置履歴データ65は、現在から過去所定期間内における対象位置の履歴を示している。
【0112】
上下傾き履歴データ67は、コントローラ5の上下方向の傾きの履歴を示すデータであり、当該傾きを示す上下傾きデータ68を複数含む。ここで、コントローラ5の上下方向の傾きとは、X軸周りの回転に関する傾き、すなわち、水平面(重力方向に垂直な面)に対するコントローラ5の傾きである。本実施形態では、コントローラ5の上下方向の傾きを、コントローラ5を基準としたXYZ座標系のZ軸と水平面とのなす角(AngX)によって表す(図11参照)。上下傾き履歴データ67は、上下傾きデータ68が生成される度に、新しいものから順に所定個数(2つ以上)の上下傾きデータ68を含むように更新される。つまり、上下傾き履歴データ67は、現在から過去所定期間内における上下方向の傾きの履歴を示している。
【0113】
ロール傾きデータ69は、コントローラ5のロール方向の傾きを示すデータである。ここで、コントローラ5のロール方向の傾きとは、コントローラ5を基準としたXYZ座標系のZ軸周りの回転に関する傾きである。本実施形態では、コントローラ5のロール方向の傾きを、コントローラ5を基準としたXYZ座標系のZ軸を含む所定面と、当該XYZ座標系のX軸とのなす角(AngZ)によって表す。
【0114】
動き履歴データ70は、コントローラ5の動きの履歴を示すデータであり、コントローラ5の動きを示す動きデータ71を複数含む。本実施形態では、動きデータ71は、XYZ座標系の各軸に関する動きを示すベクトル(V=(VX,VY,VZ))のうちのY成分(Vy)を示す。動き履歴データ70は、動きデータ71が生成される度に、新しいものから順に所定個数の動きデータ71を含むように更新される。つまり、動き履歴データ70は、現在から過去所定期間内におけるコントローラ5のY軸方向に関する動きの履歴を示している。
【0115】
上下回転行列データ72は、上下回転行列(Mx)を示すデータである。上下回転行列は、加速度ベクトルをX軸周りに回転させる行列である。また、ロール回転行列データ73は、ロール回転行列(Mz)を示すデータである。ロール回転行列は、加速度ベクトルをZ軸(ロール軸)周りに回転させる行列である。また、ベクトル回転行列データ74は、ベクトル回転行列(M)を示すデータである。ベクトル回転行列は、加速度ベクトルをX軸周りおよびZ軸周りに回転させる行列であり、上下回転行列Mxとロール回転行列Mzとから算出される。
【0116】
なお、ゲーム処理用データ64には、上記のデータの他、後述するタイマの値を示すデータや、後述する振りフラグを示すデータや、ゲーム空間におけるプレイヤキャラクタの位置を示すデータ等が含まれる。
【0117】
次に、ゲーム装置3において行われる処理の詳細を、図10〜図15を用いて説明する。図10は、ゲーム装置3において実行される処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入され、ゲームプログラムが記憶された光ディスク4がゲーム装置3に挿入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図10に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【0118】
図10に示すステップS1において、まずCPU10は初期化処理を実行する。初期化処理においては、振りフラグがオフに設定される。振りフラグは、コントローラ5に対してジャンプ操作が行われているか否かを判別するために用いられるフラグである。また、初期化処理においては、各履歴データ64,67,70にはデータが含まれない状態とされる。ステップS1の後、ステップS2〜S12の処理ループが、ゲームが実行される間繰り返し実行される。なお、1回の当該処理ループは、1フレーム時間(例えば1/60秒)に1回の割合で実行される。
【0119】
ステップS2において、CPU10は、操作データを取得する。すなわち、コントローラ5から送信されてくる操作データが無線コントローラモジュール19を介して受信されてメインメモリに記憶されるので、CPU10は、メインメモリから操作データを読み出す。
【0120】
続くステップS3において、CPU10は、対象位置を算出する。対象位置は、メインメモリに記憶されているマーカ座標データ63により示されるマーカ座標に基づいて算出される。対象位置は、例えば2つのマーカ座標の中点の位置として算出されるが、2つのマーカ座標から一義的に決められる位置であればどのような位置でもよい。算出された対象位置を示すデータは、対象位置データ66としてメインメモリに記憶される。なお、撮像素子40によって撮像対象(マーカ6Rおよび6L)が検出されていない場合には、上記ステップS3において対象位置を算出することができない場合がある。この場合、CPU10は、ステップS3および後述するステップS4の処理を省略してもよい。
【0121】
ステップS3において対象位置が算出されると、続くステップS4において、CPU10は、対象位置の履歴を更新する。具体的には、メインメモリに記憶されている対象位置履歴データ65に含まれている所定個数の対象位置データ66のうち、最も古いものを削除する。そして、上記ステップS3で算出された対象位置を示すデータを新たな対象位置データ66として対象位置履歴データ65に追加する。なお、ステップS2〜S12の処理ループの実行を開始した初期段階において、対象位置履歴データ65に含まれている対象位置データ66が所定個数に満たない場合には、対象位置データ66の削除を行わない。
【0122】
ステップS4の次のステップS5において、CPU10は、メインメモリに記憶されている加速度データ62により示される加速度ベクトルからコントローラ5の上下方向の傾きを算出する。ここでは、Z軸と水平面とのなす角度として上下方向の傾きを算出する。図11は、コントローラ5の上下方向の傾きを算出する方法を説明するための図である。まず、図11に示すように、重力方向に平行な面(鉛直面)における2次元のX’Y’座標系を定義する。ここで、Y’軸はZ軸と同じ方向であり、Z軸正方向をY’軸正方向とする。X’軸はY’軸に垂直な軸であり、かつ、重力方向に近い方向をX’軸負方向とする。
【0123】
コントローラ5の上下方向の傾きを算出する際、CPU10はまず、加速度ベクトルAを、X’軸方向の成分ACXとY’軸方向の成分ACYとに分解する(図11参照)。すなわち、加速度ベクトルAを、Z軸成分と、それ以外の成分とに分解し、それぞれの成分の大きさを算出する。したがって、Y’軸方向の成分ACYは、加速度ベクトルAのZ軸成分の大きさ(AZ)である。また、X’軸方向の成分ACXは、加速度ベクトルAのX軸成分(AX)とY軸成分(AY)との合成ベクトル(2次元)の大きさとして算出される。
【0124】
次に、CPU10は、X’軸方向の成分ACXとY’軸方向の成分ACYとから、上下方向の傾きを示す角度AngXを算出する。角度AngXは、加速度ベクトルAと、上記合成ベクトルACYとのなす角度として算出される。具体的には、角度AngXは、次の式(1)に従って算出される。
AngX=−atan(ACY/ACX) …(1)
なお、上式(1)において、−90°≦AngX≦90°で表現されるものとする。上式(1)によれば、コントローラ5の前端部が水平方向を向くときAngX=0となり、コントローラ5の前端部が鉛直上方を向くときAngX=90となり、コントローラ5の前端部が鉛直下方を向くときAngX=−90となる。
【0125】
上記の方法によれば、X’軸方向の成分ACXを、加速度ベクトルAのX軸成分AXとY軸成分AYとの合成ベクトルの大きさとして算出することによって、加速度ベクトルAとZ軸とのなす角度を算出することができる。これによって、コントローラ5の上下方向の傾きを正確に算出することができる。ここで、他の実施形態において、例えば、コントローラ5をZ軸(ロール軸)周りに傾けて使用することが想定されず、コントローラ5の上面を上側にして使用することが想定される場合には、X’軸方向の成分ACXは、加速度ベクトルAのY軸成分AYの大きさとして算出するようにしてもよい。
【0126】
コントローラ5の上下方向の傾きが算出されると、ステップS6において、CPU10は、上下方向の傾きの履歴を更新する。具体的には、メインメモリに記憶されている上下傾き履歴データ67に含まれている所定個数の上下傾きデータ68のうち、最も古いものを削除する。そして、上記ステップS5で算出された傾きAngXを示すデータを新たな上下傾きデータ68として上下傾き履歴データ67に追加する。なお、ステップS2〜S12の処理ループの実行を開始した初期段階において、上下傾き履歴データ67に含まれている上下傾きデータ68が所定個数に満たない場合には、上下傾きデータ68の削除を行わない。
【0127】
ステップS6の次のステップS7において、CPU10は、回転行列算出処理を実行する。回転行列算出処理は、コントローラ5の姿勢を算出し、算出した姿勢に基づいて、ベクトル回転行列を算出する処理である。以下、図12を参照して、回転行列算出処理の詳細を説明する。
【0128】
図12は、図10に示す回転行列算出処理(ステップS7)の流れを示すフローチャートである。認識範囲算出処理においては、まずステップS21において、CPU10は、マーカ座標を用いてロール方向の傾きを算出することが可能か否かを判定する。この判定は、マーカの撮像状況、具体的には、撮像素子40によって撮像対象(マーカ6Rおよび6L)が検出されたか否かによって行われる。ステップS4の判定は、メインメモリに記憶されているマーカ座標データ63を参照することによって行われる。すなわち、マーカ座標データ63が2つのマーカ座標を示す場合、マーカ6Rおよび6Lが検出されたと判定される。一方、マーカ座標データ63が1つのマーカ座標を示す場合、または、マーカ座標データ63がマーカ座標がないことを示す場合、マーカ6Rおよび6Lが検出されなかったと判定される。ステップS21の判定結果が肯定の場合、ステップS22の処理が実行される。一方、ステップS21の判定結果が否定の場合、後述するステップS23の処理が実行される。
【0129】
なお、ステップS21の判定処理は、ロール方向の傾きを算出するために必要なマーカが検出されたか否か(すなわち、ロール方向の傾きが算出可能であるか否か)を判定するための処理である。本実施形態では、2つのマーカ座標が検出された場合のみ、ロール方向の傾きが算出可能であると判断しているが、他の実施形態では、1つのマーカ座標のみを用いてロール方向の傾きを算出することも可能である。例えば、あるタイミングの前後のタイミングにおいて2つのマーカ座標が検出されていれば、当該あるタイミングにおいて1つのマーカ座標のみが検出された(またはマーカ座標が検出されない)場合であっても、補間によって2つのマーカ座標を算出し、ロール方向の傾きを算出することも可能である。したがって、他の実施形態において、1つのマーカ座標を用いて対象位置を算出する処理を採用する場合には、1つのマーカ座標のみが検出された場合であってもステップS21の判定結果を肯定として判断するようにしてもよい。
【0130】
ステップS22において、CPU10は、マーカ座標データ63により示されるマーカ座標に基づいてロール方向の傾きを算出する。図13は、マーカ座標に基づいてロール方向の傾きを算出する方法を説明するための図である。図13は、コントローラ5の撮像手段によって撮像された撮像画像を示しており、位置P1および位置P2にマーカの画像が含まれている。ここでは、位置P1のマーカ座標を(x1,y1)とし、位置P2のマーカ座標を(x2,y2)とする。
【0131】
ロール方向の傾きは、撮像対象の画像(マーカ画像)に関する撮像画像内における傾きに基づいて算出することができる。ここでは、ロール方向の傾きを、2つのマーカ座標を結ぶベクトルとx軸とのなす角(AngZ)として算出する。具体的には、CPU10はまず、次の式(2)に従ってロール方向の傾きAngZを算出する。
x2−x1≧0のとき、AngZ=AngZ’
x2−x1<0、かつ、AngZ>0のとき、AngZ=−180+AngZ’
x2−x1<0、かつ、AngZ≦0のとき、AngZ=180+AngZ’
ただし、AngZ’=atan((y2−y1)/(x2−x1))
…(2)
上式(2)において、コントローラ5が基準状態にある場合に撮像された撮像画像から算出される2つのマーカ座標のうち、x座標値が小さい方の座標を(x1,y1)とする。なお、上式(2)における変数AngZ’は−90°≦AngZ≦90°で表現されるので、変数AngZ’では、コントローラ5が基準状態(Y軸負方向が重力方向を向く状態)であるか、コントローラ5が基準状態から裏返しの状態(Y軸正方向が重力方向を向く状態)であるかを表現することができない。そのため、上式(2)では、(x2−x1)が負となる場合に変数AngZ’の値を補正してAngZを得るようにしている。これによって、AngZは、−180≦AngZ≦180で表現されるので、ロール方向の傾きを360°の範囲で算出することができる。なお、他の実施形態において、コントローラ5が裏返しの状態で使用されることを想定しない場合には、上式(2)における変数AngZ’をそのままロール方向の傾きとして用いるようにしてもよい。
【0132】
以上のように算出されたロール方向の傾きAngZを示すデータは、ロール傾きデータ69としてメインメモリに記憶される。以上のステップS22の後、ステップS25の処理が実行される。
【0133】
一方、ステップS23において、CPU10は、加速度データ62により示される加速度ベクトルに基づいてロール方向の傾きを算出する。図14は、加速度ベクトルに基づいてロール方向の傾きを算出する方法を説明するための図である。図14は、Z軸負方向からコントローラ5を見たときのコントローラ5を示している。図14に示すように、ロール方向の傾きは、加速度ベクトルAのX成分とY成分との合成ベクトルAXYと、Y軸とのなす角度として表すことができる。なお、合成ベクトルAXYとY軸とのなす角度とすることで、加速度ベクトルから算出されるロール方向の傾きは、マーカ座標から算出されるロール方向の傾きと同じ角度を表すものとなる。具体的には、ロール方向の傾きAngZは、加速度ベクトルAのX成分AXとY成分AYとに基づいて、次の式(3)に従って算出することができる。
AY≧0のとき、AngZ=AngZ’
AY<0、かつ、AngZ>0のとき、AngZ=−180+AngZ’
AY<0、かつ、AngZ≦0のとき、AngZ=180+AngZ’
ただし、AngZ’=atan(AX/AY)
…(3)
上式(3)において、AY<0のときにAngZ’の値を補正しているのは、上記ステップS22の場合と同様、コントローラ5が基準状態であるか裏返しの状態であるかを表現すべく、−180≦AngZ≦180の範囲で傾きAngZを表現するためである。以上のように算出されたロール方向の傾きAngZを示すデータは、ロール傾きデータ69としてメインメモリに記憶される。
【0134】
続くステップS24において、CPU10は、ステップS23で算出されたロール方向の傾きを補正する。補正後の傾きは、前回のステップS2〜S12の処理ループにおいて算出されたロール方向の傾きを、今回の処理ループにおけるステップS24で算出されたロール方向の傾きに所定の割合で近づけることによって算出される。ここで、前回の処理ループにおいて算出されたロール方向の傾きは、前回の処理ループにおいてステップS21の判定結果が肯定であった場合にはステップS22で算出された傾きであり、前回の処理ループにおいてステップS21の判定結果が否定であった場合にはステップS24で算出された傾きである。具体的には、前回の処理ループにおいて算出されたロール方向の傾きAngZ”とし、今回の処理ループにおけるステップS24で算出されたロール方向の傾きAngZ’とした場合、補正後のロール方向の傾きAngZは、次の式(4)に従って算出される。
AngZ=AngZ”+(AngZ’−AngZ”)×k …(4)
上式(4)において、定数kは、0<k<1の範囲で予め決められる。
【0135】
例えば、それまで検出されていたマーカ座標が検出されなくなった場合、ある処理ループにおいてはステップS22の処理によってロール方向の傾きが算出され、次の処理ループにおいてステップS23の処理によってロール方向の傾きが算出されることになる。この場合、ロール方向の傾きを算出する基になるデータが異なるので、当該傾きの値が大きく異なる場合がある。本実施形態では、ステップS24の処理によって、前回の処理ループと今回の処理ループとでロール方向の傾きが大きく異なる場合であっても、ロール方向の傾きが急激に変化することを防止することができる。
【0136】
また、コントローラ5が動かされている場合には、加速度ベクトルが急激に変化するので、当該加速度ベクトルはコントローラ5の姿勢を正確に表していない可能性が高い。したがって、そのような場合に加速度ベクトルから算出されるロール方向の傾きも不正確である可能性が高い。そこで、本実施形態では、上記ステップS24の処理によって、加速度ベクトルが急激に変化する場合でも、ロール方向の傾きが急激に変化することを抑制している。これによって、加速度ベクトルの急激に変化を緩和することができ、コントローラ5が動かされている場合にロール方向の傾きが不正確な値となることを防止することができる。
【0137】
以上のステップS24の処理によって補正されたロール方向の傾きを示すデータは、ロール傾きデータ69としてメインメモリに記憶される。ステップS24の後、ステップS25の処理が実行される。
【0138】
以上に説明したように、ステップS5においてコントローラ5の上下方向の傾きが算出され、ステップS22、または、ステップS23およびS24においてコントローラ5のロール方向の傾きが算出される。したがって、コントローラ5の上下方向の傾きおよびロール方向の傾きが算出されたことによって、コントローラ5の(上下方向およびロール方向に関する)姿勢が算出されたこととなる。本実施形態では、上述のように、(マーカ座標が検出される場合には)マーカ座標に基づいてロール方向の傾きが算出されるので、加速度ベクトルを用いてロール方向の傾きを算出する場合に比べて正確に傾きを算出することができる。その結果、コントローラ5の姿勢を正確に算出することができる。なお、以降のステップS25〜S28では、コントローラ5の姿勢(すなわち、上下方向の傾きおよびロール方向の傾き)に基づいて、ベクトル回転行列が算出される。
【0139】
ステップS25において、CPU10は、コントローラ5の上下方向の傾きに基づいて上下回転行列を算出する。なお、当該上下方向の傾きは、メインメモリに記憶されている最新の上下傾きデータ68により示される。具体的には、上下回転行列Mxは次の式(5)によって算出される。
【数1】
上式(5)に示されるように、上下回転行列Mxは、3次元ベクトルをX軸周りに角度AngXだけ回転させる回転行列である。ステップS25で算出された上下回転行列Mxを示すデータは、上下回転行列データ72としてメインメモリに記憶される。
【0140】
続くステップS26において、CPU10は、コントローラ5のロール方向の傾きに基づいてロール回転行列を算出する。なお、当該ロール方向の傾きは、メインメモリに記憶されているロール傾きデータ69により示される。具体的には、ロール回転行列Mzは次の式(6)によって算出される。
【数2】
上式(6)に示されるように、ロール回転行列Mzは、3次元ベクトルをZ軸周りに角度AngZだけ回転させる回転行列である。ステップS26で算出されたロール回転行列Mzを示すデータは、ロール回転行列データ73としてメインメモリに記憶される。
【0141】
続くステップS27において、CPU10は、上記上下回転行列およびロール回転行列に基づいてベクトル回転行列を算出する。ベクトル回転行列Mは、上下回転行列の逆行列と、ロール回転行列の逆行列とを掛けることによって算出される。具体的には、CPU10は、メインメモリに記憶されている上下回転行列データ72およびロール回転行列データ73を用いて、次の式(7)に従ってベクトル回転行列Mを算出する。
M=Mx-1・Mz-1 …(7)
なお、上式(7)において、上下回転行列Mxの逆行列Mx-1は、上下回転行列MxにおけるAngXを−AngXとすることによって得るようにしてもよい。同様に、ロール回転行列Mzの逆行列Mz-1は、ロール回転行列MzにおけるAngZを−AngZとすることによって得るようにしてもよい。上式(7)から明らかなように、ベクトル回転行列Mは、3次元ベクトルをX軸周りに(−AngX)だけ回転させるとともに、Z軸周りに角度(−AngX)だけ回転させる回転行列である。ステップS27で算出されたベクトル回転行列Mを示すデータは、ベクトル回転行列データ74としてメインメモリに記憶される。ステップS27の後、CPU10は回転行列算出処理を終了する。
【0142】
図10の説明に戻り、ステップS7の次のステップS8において、CPU10は、コントローラ5の動きを表す動きベクトルを算出する。動きベクトルVは、メインメモリに記憶されている加速度データ62により示される加速度ベクトルAと、メインメモリに記憶されているベクトル回転行列データ74により示されるベクトル回転行列Mとに基づいて算出される。具体的には、動きベクトルV=(VX,VY,VZ)は、次の式(7)に従って算出される。
[VX VY VZ]=[AX AY AZ]M …(7)
式(7)に示されるように、動きベクトルVは、加速度ベクトルAをベクトル回転行列Mを用いて回転させることによって得られる。
【0143】
ここで、加速度センサによって検出された加速度ベクトルには、重力加速度に起因する成分とコントローラ5の動きに起因する成分とが含まれている。本実施形態では、上記ステップS8に示すように、加速度センサによって検出された加速度ベクトルの向きを、コントローラ5の姿勢に対応したベクトル回転行列を用いて変化(回転)させる。これによって、加速度ベクトルの向きに関しては加速度ベクトルから重力加速度に起因する方向成分を除去することができ、加速度ベクトルの向きを、コントローラ5の動きに対応した向きにすることができる。つまり、動きベクトルのY成分VYは重力方向(鉛直方向)の動きを表す。また、動きベクトルのX成分VXは、コントローラ5を基準としたXYZ座標系のY軸負方向が重力方向となる場合における当該XYZ座標系のX方向の動きを表す。Z成分VZは、コントローラ5を基準としたXYZ座標系のY軸負方向が重力方向となる場合における当該XYZ座標系のZ方向の動きを表す。以上のように、上記ステップS8で得られる動きベクトルによって、コントローラ5の動きを正確に判別することができる。
【0144】
本実施形態では、コントローラ5の鉛直方向の動きを判別するために、上記動きベクトルVのY成分(VY)を用いる。なお、コントローラ5が鉛直方向に関して静止している場合、VY=G(Gは重力加速度の大きさ)となる。また、コントローラ5が上方向に動かされている場合、VYの値は、Gよりも小さい値となり、コントローラ5が下方向に動かされている場合、VYの値は、Gよりも大きい値となる。なお、本実施形態では、Y軸正方向を鉛直上向きとしているので、Gは負の値となる。
【0145】
なお、上記ステップS8において、CPU10は、算出された動きベクトルから、静止状態における動きベクトル(0,G,0)を減算するようにしてもよい。すなわち、VY−Gの値を動きデータ71としてメインメモリに記憶しておいてもよい。これによれば、コントローラ5が静止状態にある場合の動きベクトルのY成分の値を0として表すことができる。
【0146】
ステップS8の次のステップS9において、CPU10は、コントローラ5の動きの履歴を更新する。具体的には、メインメモリに記憶されている動き履歴データ70に含まれている所定個数の動きデータ71のうち、最も古いものを削除する。そして、上記ステップS7で算出された動きベクトルVのY成分VYを示すデータを新たな動きデータ71として動き履歴データ70に追加する。なお、ステップS2〜S12の処理ループの実行を開始した初期段階において、動き履歴データ70に含まれている動きデータ71が所定個数に満たない場合には、動きデータ71の削除を行わない。
【0147】
なお、本実施形態では、ステップS2〜S12の処理ループにおいて、ベクトル回転行列を毎回算出するようにした。ここで、他の実施形態においては、加速度ベクトルが所定の条件を満たす場合にのみ、ベクトル回転行列の算出を行うようにしてもよい。具体的には、加速度ベクトルが所定の条件を満たすか否かを判定し、判定結果が肯定である場合のみ、上記ステップS5〜S7の処理を実行するようにしてもよい。
【0148】
なお、上記所定の条件としては、例えば、最新の加速度ベクトルと所定個数前に取得された加速度ベクトルとの差分ベクトルの大きさが所定値以下であること(第1条件)や、最新の加速度ベクトルの大きさが重力加速度の大きさに近い(両者の差が所定値以下)であること(第2条件)等が考えられる。CPU10は、上記第1条件が満たされた場合にのみベクトル回転行列および動きベクトルの算出を行うようにしてもよいし、上記第2条件が満たされた場合にのみベクトル回転行列および動きベクトルの算出を行うようにしてもよいし、上記第1条件および第2条件の両方が満たされた場合(または一方が満たされた場合)にのみベクトル回転行列および動きベクトルの算出を行うようにしてもよい。上記第1条件および第2条件は、加速度ベクトルがコントローラ5の姿勢に対応しているか否かを判定するための条件である。上記差分ベクトルの大きさが大きい場合や、加速度ベクトルの大きさが重力加速度の大きさとは大きく異なる場合、コントローラ5が激しく動かされていると考えられる。この場合、加速度ベクトルには重力加速度に起因する成分に加えて、コントローラ5の動きに起因する成分が含まれているので、加速度ベクトルからコントローラ5の傾き(上下方向およびロール方向の傾き)を正確に算出することができないおそれがある。したがって、上記所定の条件を満たさない場合には、コントローラ5の傾きを正確に算出することができないおそれがあると判断し、ベクトル回転行列の算出を行わないようにする。これによれば、加速度ベクトルからコントローラ5の姿勢を正確に算出することができる場合にのみ、ベクトル回転行列の算出を行うので、ベクトル回転行列を正確に算出することができる。なお、上記のように加速度ベクトルが所定の条件を満たす場合にのみベクトル回転行列の算出を行う場合には、加速度ベクトルが当該所定の条件を満たさないと判定された処理ループにおいては、それまでの処理ループにおいて算出された最新のベクトル回転行列を用いてステップS8の処理を実行する。
【0149】
また、他の実施形態においては、過去所定フレーム分の加速度ベクトルを用いてベクトル回転行列の算出を行うようにしてもよい。すなわち、CPU10は、過去所定フレーム分の加速度ベクトルの履歴をメインメモリに記憶しておき、記憶されている加速度ベクトルのうち、上記第1および/または第2条件を満たす加速度ベクトルを選出する。そして、選出された加速度ベクトルを加算したベクトルを用いて、ステップS5〜S7の処理を実行するようにしてもよい。
【0150】
ステップS9の次のステップS10において、CPU10は、操作検知処理を実行する。操作検知処理は、コントローラ5に対して行われるジャンプ操作(コントローラ5を上方向に動かす操作)を検知するための処理である。ここでは、コントローラ5が上方向に移動されたか、または、コントローラ5の指し示す方向が上側に変化された(コントローラ5が上側に向けられた)場合、コントローラ5が上方向に動かされたと判断し、ジャンプ操作が行われたと判断するものとする。以下、図12を参照して、操作検知処理の詳細を説明する。
【0151】
図15は、図10に示す操作検知処理(ステップS10)の流れを示すフローチャートである。操作検知処理においては、まずステップS31において、CPU10は、上記動きベクトルの鉛直方向成分(Y成分)VYが所定値よりも小さいか否かを判定する。上記所定値は、上記Gよりも小さい値である。コントローラ5が上方向に移動し始めた時点では、コントローラ5に上方向の加速度が加わる(加速度センサは下方向の加速度を検知する)ので、動きベクトルのY成分VYは、上記Gよりも小さい値となる。つまり、ステップS31の判定処理によって、コントローラ5が上方向に動かされているか否かを判定することができる。ステップS31の判定結果が肯定の場合、ステップS32およびS33の処理が実行される。一方、ステップS31の判定結果が否定の場合、ステップS32およびS33の処理がスキップされてステップS34の処理が実行される。
【0152】
ステップS32において、CPU10は、振りフラグをオンに設定する。続くステップS33において、タイマーの値をリセットして、タイマーのカウントを開始する。ステップS33の処理によって、コントローラ5が上方向に移動し始めてからの経過時間を計時する。ステップS33の後、ステップS34の処理が実行される。
【0153】
ステップS34において、CPU10は、振りフラグがオンに設定されているか否かを判定する。ステップS34の処理は、コントローラ5が上方向に移動している最中であるか否かを判定する処理である。ステップS34の判定結果が肯定の場合、ステップS35およびS36の処理が実行される。一方、ステップS34の判定結果が否定の場合、ステップS35およびS36の処理がスキップされてステップS37の処理が実行される。
【0154】
ステップS35において、CPU10は、タイマーの値が所定値以上であるか否かを判定する。この判定は、コントローラ5が上方向に移動し始めてから所定時間が経過したか否かを判定するものである。ステップS35の判定結果が肯定の場合、ステップS36の処理が実行される。一方、ステップS35の判定結果が否定の場合、ステップS36の処理がスキップされてステップS37の処理が実行される。ステップS36において、CPU10は、振りフラグをオフに設定する。また、このとき、CPU10はタイマーのカウントを停止する。ステップS36の後、ステップS37の処理が実行される。
【0155】
ステップS37において、CPU10は、マーカ座標データに基づくゲーム処理を実行する。本実施形態では、CPU10は、当該ゲーム処理として、マーカ座標データに基づいて画面上のポインティング位置を算出し、ポインティング位置に応じてプレイヤキャラクタを移動させる処理を実行する。具体的には、プレイヤキャラクタの左右方向の位置は、画面の左右方向に関してポインティング位置と同じ位置となるように決定される。
【0156】
なお、ポインティング位置を算出するためのアルゴリズムは、撮像画像から画面上のポインティング位置を算出するものであればどのようなものであってもよい。以下、ポインティング位置の算出方法の一例を説明する。ここでは、ポインティング位置を算出するために、マーカ座標から算出される上記対象位置を用いる。CPU10は、図13に示されるxy座標系における対象位置を示す座標を、テレビ2の画面上の位置を表すための座標系(x’y’座標系)の座標に変換する。ここで、xy座標系は、撮像画像の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とするものとする(図13参照)。また、x’y’座標系は、画面の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とするものとする。このとき、上記変換は次のように行うことができる。すなわち、対象位置の座標のx成分の正負を反転させて所定の割合(例えば、撮像画像のx軸方向の長さを、テレビ2の画面のx’軸方向の長さに一致させる割合)でスケーリングすることによって、ポインティング位置のx’成分を得ることができる。また、対象位置の座標のy成分を所定の割合(例えば、撮像画像のy軸方向の長さを、テレビ2の画面のy’軸方向の長さに一致させる割合)でスケーリングすることによって、ポインティング位置のy’成分を得ることができる。以上のようにして算出されたx’y’座標値により示される位置がポインティング位置となる。また、より正確なポインティング位置の算出方法の例としては、上記2つのマーカ座標を結ぶベクトルがy軸に平行になるように撮像画像の中央を中心として対象位置を回転する処理を行い、回転後の対象位置に対して上記変換処理を行う。このような回転による補正処理を行うことによって、コントローラ5がロール方向に傾いている場合等にも、ポインティング位置を正確に算出することができる。
【0157】
ステップS37の次のステップS38において、CPU10は、対象位置に基づいて、コントローラ5に対してジャンプ操作が行われたか否かを判定する。ステップS38の判定は、メインメモリに記憶されている対象位置履歴データ65に含まれる複数の対象位置データ66により示される各対象位置を用いて行われる。この対象位置の時間変化に基づいて、コントローラ5が上方向に動かされた(コントローラ5が上に向けられた)ことを容易に判別することができる。例えば、最新の対象位置と1つ前の対象位置とを比較して、対象位置が(図13に示すy軸正方向)に所定距離以上移動していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の対象位置の移動量を算出するとともに所定数のフレーム間における移動量の平均を算出し、平均移動量が上方向に所定距離以上移動していることを表していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の対象位置の移動量を算出し、対象位置が下方向に所定距離以上移動している期間(フレーム)が所定期間以上であれば、ジャンプ操作が行われたと判断してもよい。上記ステップS38の判定結果が肯定の場合、後述するステップS42の処理が実行される。一方、ステップS38の判定結果が否定の場合、ステップS39の処理が実行される。
【0158】
なお、本実施形態においては、対象位置の履歴を用いてステップS38の判定処理を行ったが、当該判定処理は、対象位置に基づいて行われればよく、例えば、対象位置から算出されるポインティング位置の履歴を用いて行われてもよい。ポインティング位置の履歴を用いる場合も本実施形態と同様、最新のポインティング位置と1つ前のポインティング位置とを比較する方法や、1フレーム毎のポインティング位置の移動量の平均を算出する方法や、ポインティング位置が上方向に所定距離以上移動している期間(フレーム)が所定期間以上であるかを判定する方法によって、ステップS38の判定処理を行うことができる。
【0159】
また、上記ステップS38においては、マーカ座標から算出される対象位置を用いてコントローラ5が移動または回転したことを判別した。ここで、コントローラ5が移動または回転したことの判別は、撮像画像に含まれるマーカ6aおよび6bの画像の画像内での移動に基づいて行われればよい。例えば、他の実施形態では、撮像画像を用いて、マーカ6aおよび6bの画像の輪郭抽出を行い、抽出された輪郭の移動に基づいてコントローラ5が移動または回転していることを判別してもよい。
【0160】
ステップS39において、CPU10は、コントローラ5の上下方向の傾きに基づいて、コントローラ5に対してジャンプ操作が行われたか否かを判定する。ステップS39の判定は、メインメモリに記憶されている上下傾き履歴データ67に含まれる複数の上下傾きデータ68により示される各傾き(AngX)を用いて行われる。この傾きAngXの時間変化に基づいて、コントローラ5が上側に向けられたことを容易に判別することができる。例えば、最新の傾きと1つ前に算出された傾きとを比較して、傾きが上側に所定角度以上変化していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の傾きの変化量を算出するとともに所定数のフレーム間における変化量の平均を算出し、平均変化量が、傾きが上側に所定角度以上変化していることを表していれば、ジャンプ操作が行われたと判断してもよい。また、1フレーム毎の傾きの変化量を算出し、変化量が上方向に所定角度以上移動している期間(フレーム)が所定期間以上であれば、ジャンプ操作が行われたと判断してもよい。上記ステップS39の判定結果が肯定の場合、後述するステップS42の処理が実行される。一方、ステップS39の判定結果が否定の場合、ステップS40の処理が実行される。
【0161】
ステップS40において、CPU10は、振りフラグが振りフラグがオンに設定されているか否かを判定する。ステップS40の判定結果が肯定の場合、ステップS41の処理が実行される。一方、ステップS40の判定結果が否定の場合、CPU10は、操作検知処理を終了する。
【0162】
ステップS41において、CPU10は、上記動きベクトルの鉛直方向成分(Y成分)VYの変化量が所定値以上であるか否かを判定する。ここで、コントローラ5を上方向に動かす操作を行う場合、プレイヤは、コントローラ5を上方向に移動させた後、移動を停止させる。したがって、動きベクトルのY成分VYは、コントローラ5が上方向に移動し始めた時点では、負の値となり、移動の停止時においては、負の値から増加していく。したがって、ステップS41の処理によって、コントローラ5の上方向の移動が停止されたか否かを判別することができる。ステップS41の判定結果が肯定の場合、ステップS42の処理が実行される。一方、ステップS41の判定結果が否定の場合、CPU10は、操作検知処理を終了する。
【0163】
コントローラ5に対してジャンプ操作が行われる場合、まず、コントローラ5が上方向の移動を開始するので、ゲーム装置3はこれを検知して(ステップS31でYes)、振りフラグをオンに設定し(ステップS32)、タイマをスタートさせる(ステップS33)。その後、移動開始から所定時間内においては、ステップS40の判定結果が肯定となるのでステップS41の処理が実行され、コントローラ5の上方向の移動が停止されたか否かが判定される。その結果、移動が停止されたと判断されると(ステップS41でYes)、ジャンプ操作が行われたと判断されてステップS42の処理が実行される。一方、開始から所定時間内に移動の停止が検知されない場合、ステップS35の判定結果が否定となり、振りフラグがオフに設定される(ステップS36)。このとき、ステップS40の判定結果が否定となるので、ステップS41およびS42が実行されない。以上のように、本実施形態では、コントローラ5が移動開始から所定期間内に停止された場合、ジャンプ操作が正しく行われたと判断している。
【0164】
なお、他の実施形態においては、上記ステップS41において、CPU10は、最新の動きベクトルのみに基づいて判定を行ってもよい。例えば、最新の動きベクトルのY成分VYの値が所定値以上であるか否かを判定するようにしてもよい。なお、当該所定値は、重力加速度の大きさGよりも大きい値(VY−Gの値を動きデータ71とする場合は、0より大きい値)である。最新の動きベクトルのみに基づいてステップS41の判定を行う場合、メインメモリには最新の動きデータのみを記憶しておけばよく、上記ステップS9の処理は不要である。
【0165】
ステップS42において、CPU10は、ジャンプ操作に従って所定のゲーム処理を実行する。本実施形態では、CPU10は、当該ゲーム処理として、プレイヤキャラクタにジャンプ動作を行わせる。ステップS42の後、CPU10は、操作検知処理を終了する。
【0166】
以上のように、本実施形態における操作検知処理によれば、コントローラ5の撮像手段によって撮像される撮像画像から得られる対象位置を用いてジャンプ操作の検知が行われる(ステップS38)とともに、加速度センサ37の出力(加速度ベクトル)から得られるデータ(上下傾きデータまたは動きデータ)を用いてジャンプ操作の検知が行われる(ステップS39およびS41)。対象位置の変化はコントローラ5の動きの変化に直接対応しており、例えば、コントローラ5が上に移動した場合には対象位置は下に移動し、コントローラ5が下に移動した場合には対象位置は上に移動する。したがって、対象位置の変化に基づいてコントローラ5の動きを検知することによって、加速度センサの出力を用いて検知を行う場合に比べて、コントローラ5の動きを正確に検知することができる。一方、対象位置は、マーカ6Rおよび6Lが検出されない場合には算出されないので、コントローラ5の向きによっては対象位置を用いた検知が行えないことがある。例えば、本実施形態においてプレイヤがコントローラ5を上方向に動かす操作を行った場合、コントローラ5が上に向きすぎてマーカ6Rおよび6Lが検出されなくなり、対象位置を用いた検知が行えない。これに対して、本実施形態によれば、対象位置を用いた検知が行えない場合でも、加速度センサ37の出力を用いた検知を行うことによって、確実に検知を行うことができる。したがって、本実施形態によれば、ジャンプ操作の検知を正確に行うことができるとともに、検知不能となることを防止し、常に検知を行うことができる。なお、他の実施形態においては、ステップS39およびS41の処理のいずれか一方のみを行うようにしてもよい。
【0167】
図10の説明に戻り、ステップS10の次のステップS11において、CPU10は、ゲーム画像を生成して表示する。すなわち、仮想のゲーム空間内においてプレイヤキャラクタおよび障害物等が配置された画像にポインティングアイコンの画像が重畳されたゲーム画像が生成され、テレビ2に表示される(図8)。このとき、プレイヤキャラクタの位置および動作は、コントローラ5を用いたゲーム操作に従って決められる。すなわち、プレイヤキャラクタは、上記ステップS37の処理によって決められた位置に表示され、上記ステップS42の処理が実行された場合はプレイヤキャラクタがジャンプ動作を行う様子を表す画像が表示される。
【0168】
続くステップS12において、CPU10は、ゲームを終了するか否かを判定する。ステップS12の判定は、例えば、ゲームがクリアされたりゲームオーバーとなったか否かや、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS12の判定結果が否定である場合、ステップS2の処理が再度実行される。以降、ステップS12でゲームを終了すると判定されるまで、ステップS2〜S12の処理が繰り返し実行される。一方、ステップS12の判定結果が肯定である場合、CPU10は、図10に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【0169】
(変形例)
上記実施形態においては、コントローラ5のロール方向の傾きAngZを、−180≦AngZ≦180の範囲で表現することによって、コントローラ5が基準状態であるか裏返しの状態であるかを判別するようにした。ここで、他の実施形態においては、以下の変形例に示す方法によってコントローラ5が基準状態であるか裏返しの状態であるかを判別するようにしてもよい。以下、図16および図17を用いて、上記実施形態の変形例におけるゲーム処理を説明する。図16は、本実施形態の変形例における回転行列算出処理の流れを示すフローチャートである。本変形例においては、上記ステップS22およびS23(図12)では、式(2)および(3)に示した変数AngZ’をそのままAngZ’として用いる。そして、ステップS28(図12)の次に、ステップS51の処理が実行される。すなわち、ステップS51において、CPU10は、CPU10は動きベクトルVを算出する。ステップS51の処理は上記ステップS8と同じ処理である。
【0170】
続くステップS52において、CPU10は、ステップS51で算出された動きベクトルVが、重力加速度を示すベクトルから大きくずれているか否かを判定する。具体的には、動きベクトルVと重力加速度を示すベクトル(本実施形態では、(0,G,0))との差分ベクトルを算出し、当該差分ベクトルの大きさが所定値以上であるか否かを判定する。ステップS52の処理は、コントローラ5が基準状態(Y軸負方向が重力方向を向く状態)であるか、コントローラ5が基準状態から裏返しの状態(Y軸正方向が重力方向を向く状態)であるかを判別するための処理である。ステップS52の判定結果が否定の場合、ステップS53の処理が実行される。一方、ステップS52の判定結果が肯定の場合、ステップS54〜S56の処理が実行される。
【0171】
ステップS53においては、CPU10は、補正フラグをオフに設定する。補正フラグは、ベクトル回転行列を補正する必要があるか否かを示すフラグであり、コントローラ5が上記基準状態であるか裏返しの状態であるかに応じてオン/オフが設定される。ステップS53の後、CPU10は回転行列算出処理を終了する。
【0172】
一方、ステップS54においては、CPU10は、上下方向の傾きを逆にして上下回転行列Mxを算出し直す。つまり、上下方向の傾きを“−AngX”として上下回転行列Mxを算出する。ステップS54の処理は、上下方向の傾きを“−AngX”とする点以外はステップS25と同様である。続くステップS55において、CPU10は、ステップS54で算出された上下回転行列Mxと、ステップS26で算出されたロール回転行列Mzとに基づいて、ベクトル回転行列Mを算出する。ベクトル回転行列Mの算出方法は、上記ステップS28と同様である。続くステップS56において、CPU10は、補正フラグをオンに設定する。ステップS56の後、CPU10は回転行列算出処理を終了する。
【0173】
また、図17は、本実施形態の変形例における処理の流れの一部を示すフローチャートである。本変形例では、ステップS8の処理の後、ステップS61の処理が実行される。すなわち、ステップS61において、CPU10は、補正フラグがオンであるか否かを判定する。ステップS61の判定結果が否定の場合、上記ステップS9の処理が実行される。一方、ステップS61の判定結果が肯定の場合、ステップS62の処理が実行される。
【0174】
ステップS62において、CPU10は、ステップS8で算出された動きベクトルVのX成分VXおよびY成分VYにそれぞれ−1をかける。上記ステップS54〜S55の処理によって算出されたベクトル回転行列を用いて得られる動きベクトルは、X成分VXおよびY成分VYの符号が逆になっている。ステップS62の処理は、X成分VXおよびY成分VYの正負の符号を逆にするための処理である。ステップS62の処理の後、ステップS9の処理が実行される。本変形例においては、以上によって得られた動きベクトルを用いて、ステップS10の処理が実行される。
【0175】
以上のように、上記変形例においては、コントローラ5が基準状態であるか、コントローラ5が基準状態から裏返しの状態であるかを判別する(ステップS52)。そして、コントローラ5が裏返しの状態である場合には、上下方向の傾きを逆にして再度上下回転行列およびベクトル回転行列を算出し直す。これによって、上記変形例では、コントローラ5が基準状態である場合も裏返しの状態である場合も、正確にベクトル回転行列および動きベクトルを算出することができる。
【0176】
なお、上記変形例においては、コントローラ5が激しく動かされていない場合にのみ、上記ステップS51〜S56の処理を実行するようにしてもよい。コントローラ5が激しく動かされている場合には、ステップS52の判定処理において正確に判定を行うことができない可能性があるからである。具体的には、加速度ベクトルが上記第1条件および/第2条件を満たす場合にのみ、ステップS51〜S56の処理を実行するようにしてもよい。
【0177】
なお、上記実施形態においては、ポインティング位置を移動させる操作によってプレイヤキャラクタを移動させるとともに、ジャンプ操作によってプレイヤキャラクタにジャンプ動作を行わせるゲームを例として説明したが、本発明は、これに限定されない。本発明は、入力装置が備える撮像手段によって撮像された撮像画像からロール方向の傾きを算出するとともに、入力装置が備える加速度検出手段によって検出された加速度ベクトルから上下方向の傾きを算出し、ロール方向および上下方向の傾きに基づいて入力装置の姿勢を算出する処理を実行する任意の情報処理装置および情報処理プログラムに適用することが可能である。
【0178】
なお、上記実施形態においては、コントローラ5が上方向に動かされた(上方向に移動または回転された)ことを判別すべく、ステップS38,S39,S41等の処理を行ったが、コントローラ5の判別すべき動きは、上方向に限らず、下方向でもよいし、左右方向でもよいし、前後方向でもよい。また、上記実施形態では、撮像画像に基づく判別処理(ステップS38)で、コントローラ5が上方向に移動されたのか回転されたのかを区別せずに判別を行ったが、移動と回転とを区別して、コントローラ5が移動されたことを判別してもよいし、回転されたことを判別してもよい。例えば、撮像手段の撮像方向(Z軸方向)を中心とした回転については、撮像画像に基づいて判別することが可能であるし、加速度センサやジャイロセンサの出力に基づいて判別することも可能である。したがって、撮像手段の撮像方向を中心とした回転をコントローラ5が行ったかどうかを、撮像画像に基づいて判別するとともに、加速度センサやジャイロセンサの出力に基づいて判別するようにしてもよい。これによれば、撮像手段の撮像方向を中心とした回転をより正確に検知することができる。
【産業上の利用可能性】
【0179】
以上のように、本発明は、入力装置の動きを正確に検知すること等を目的として、例えばゲーム装置やゲームプログラムとして利用することが可能である。
【図面の簡単な説明】
【0180】
【図1】ゲームシステム1の外観図
【図2】ゲーム装置3の機能ブロック図
【図3】コントローラ5の外観構成を示す斜視図
【図4】コントローラ5の外観構成を示す斜視図
【図5A】コントローラ5の内部構造を示す図
【図5B】コントローラ5の内部構造を示す図
【図6】コントローラ5の構成を示すブロック図
【図7】コントローラ5を用いてゲーム操作を行うときの様子を示す図解図
【図8】本実施形態においてテレビ2の画面に表示されるゲーム画像の一例を示す図
【図9】ゲーム装置3のメインメモリに記憶される主なデータを示す図
【図10】ゲーム装置3において実行される処理の流れを示すメインフローチャート
【図11】コントローラ5の上下方向の傾きを算出する方法を説明するための図
【図12】図10に示す回転行列算出処理(ステップS7)の流れを示すフローチャート
【図13】マーカ座標に基づいてロール方向の傾きを算出する方法を説明するための図
【図14】加速度ベクトルに基づいてロール方向の傾きを算出する方法を説明するための図
【図15】図10に示す操作検知処理(ステップS10)の流れを示すフローチャート
【図16】本実施形態の変形例における回転行列算出処理の流れを示すフローチャート
【図17】本実施形態の変形例における処理の流れの一部を示すフローチャート
【符号の説明】
【0181】
1 ゲームシステム
2 テレビ
3 ゲーム装置
4 光ディスク
5 コントローラ
6 センサバー
6R,6L マーカ
10 CPU
13 メインメモリ
35 撮像情報演算部
37 加速度センサ
40 撮像素子
【特許請求の範囲】
【請求項1】
入力装置の動きに応じた処理を行う情報処理装置のコンピュータで実行されるプログラムであって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動きに基づいて、前記入力装置の所定の動きを判別する第1判別ステップと、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の動きを判別する第2判別ステップと、
前記第1判別ステップによる判別結果、および、前記第2判別ステップによる判別結果に応じて、所定の処理を実行する第1処理実行ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項2】
前記第2判別ステップにおいて、前記コンピュータは、前記第1判別ステップで判別される所定の動きと同じ種類の動きを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで前記所定の動きが行われたと判別された場合、前記所定の処理を実行する、請求項1に記載の情報処理プログラム。
【請求項3】
前記動き検出手段は加速度センサであり、
前記第1判別ステップにおいて、前記コンピュータは、前記撮影画像に含まれる前記撮像対象の当該画像内での移動に基づいて、前記入力装置が所定方向に移動または回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記加速度センサによる検出結果から算出される前記入力装置の動きに基づいて、前記入力装置が前記所定方向に移動したことを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置の動きが行われたことが判別された場合、前記所定の処理を実行する、請求項2に記載の情報処理プログラム。
【請求項4】
前記加速度センサによる検出結果から算出される、水平方向を軸とした回転に関する前記入力装置の傾きに基づいて、当該軸を中心とした前記入力装置の回転を判別する第3判別ステップを前記コンピュータにさらに実行させ、
前記第1判別ステップにおいて、前記コンピュータは、前記入力装置が鉛直方向に移動または回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記入力装置が前記鉛直方向に移動したことを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップ、前記第2判別ステップ、および、前記第3判別ステップの少なくともいずれかで動きが行われたことが判別されたときに、前記所定の処理を実行する、請求項3に記載の情報処理プログラム。
【請求項5】
前記撮像手段によって撮像された撮像画像に含まれる前記撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記撮像手段の撮像方向を軸とした回転に関する前記入力装置の傾きを第1の傾きとして算出する第1傾き算出ステップと、
前記加速度センサの検出結果に基づいて、水平方向を軸とした回転に関する前記入力装置の傾きを第2の傾きとして算出する第2傾き算出ステップと、
前記第1の傾きおよび前記第2の傾きに基づいて、前記入力装置の姿勢を算出する姿勢算出ステップとを、前記コンピュータにさらに実行させ、
前記第3判別ステップにおいて、前記コンピュータは、前記第2の傾きに基づいて前記入力装置の回転を判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記加速度センサによって検出された3軸方向の加速度を前記姿勢算出ステップによって算出された姿勢に基づいて補正することにより得られる前記入力装置の動きを用いて判別を行う、請求項4に記載の情報処理プログラム。
【請求項6】
前記加速度センサは、撮像手段の撮像方向を軸とした回転に応じて変化する値を出力可能であり、
前記第1傾き算出ステップにおいて前記第1の傾きを算出することが可能か否かを、前記撮像手段による前記撮像対象の撮像状況に基づいて判定する判定ステップと、
前記判定ステップにおいて前記第1の傾きを算出することが不可能と判定された場合、前記加速度センサの出力値に基づいて前記第1の傾きを算出する第3傾き算出ステップとをさらに前記コンピュータに実行させる、請求項5に記載の情報処理プログラム。
【請求項7】
前記動き検出手段は加速度センサであり、
前記第1判別ステップにおいて、前記コンピュータは、前記撮影画像に含まれる前記撮像対象の当該画像内での移動に基づいて、前記入力装置が鉛直方向に移動または回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記加速度センサによる検出結果から算出される、水平方向を軸とした回転に関する前記入力装置の傾きに基づいて前記入力装置の前記所定方向の回転を判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置の動きが行われたことが判別された場合、前記所定の処理を実行する、請求項2に記載の情報処理プログラム。
【請求項8】
前記第1判別ステップにおいて、前記コンピュータは、前記撮像手段の撮像方向を軸として前記入力装置が回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記センサの検出結果に基づいて、前記入力装置が前記撮像方向を軸として回転したことを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置が回転したと判別された場合、前記所定の処理を実行する、請求項2に記載の情報処理プログラム。
【請求項9】
前記第1判別ステップにおいて、前記コンピュータは、前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、入力装置の所定の動きを判別し、
前記撮像手段によって撮像された撮像画像に含まれる前記所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、前記所定の処理とは異なる処理を実行する第2処理実行ステップを前記コンピュータにさらに実行させる、請求項1に記載の情報処理プログラム。
【請求項10】
入力装置の傾きに応じた処理を行う情報処理装置のコンピュータで実行されるプログラムであって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記入力装置の所定の傾きを判別する第1判別ステップと、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の傾きを判別する第2判別ステップと、
前記第1判別ステップによる判別結果、および、前記第2判別ステップによる判別結果に応じて、所定の処理を実行する処理実行ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項11】
前記動き検出手段は、前記入力装置の前記撮像手段の撮像方向と異なる所定方向を軸とした回転に応じて変化する値を出力するセンサであり、
前記第1判別ステップにおいて、前記コンピュータは、前記撮像手段によって撮像された撮像画像に含まれる前記撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記撮像方向を軸とした回転に関する前記入力装置の傾きを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記センサの出力値に基づいて、前記入力装置の前記所定方向を軸とした回転に関する前記入力装置の傾きを判別し、
前記処理実行ステップにおいて、前記コンピュータは、前記第1の傾きおよび第2の傾きに基づいて前記入力装置の姿勢を算出する、請求項10に記載の情報処理プログラム。
【請求項12】
前記センサは、加速度センサであって、3軸方向の加速度をそれぞれ検出することが可能であり、
前記処理実行ステップにおいて、前記コンピュータは、前記加速度センサによって検出された3軸方向の加速度を、前記算出された姿勢に基づいて補正することにより前記入力装置の動きをさらに算出する、請求項11に記載の情報処理プログラム。
【請求項13】
入力装置の動きに応じた処理を行う情報処理装置であって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動きに基づいて、前記入力装置の所定の動きを判別する第1判別手段と、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の動きを判別する第2判別手段と、
前記第1判別手段による判別結果、および、前記第2判別手段による判別結果に応じて、所定の処理を実行する処理実行手段とを備える、情報処理装置。
【請求項14】
入力装置の傾きに応じた処理を行う情報処理装置であって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記入力装置の所定の傾きを判別する第1判別手段と、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の傾きを判別する第2判別手段と、
前記第1判別手段による判別結果、および、前記第2判別手段による判別結果に応じて、所定の処理を実行する処理実行手段とを前記コンピュータに実行させる、情報処理装置。
【請求項1】
入力装置の動きに応じた処理を行う情報処理装置のコンピュータで実行されるプログラムであって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動きに基づいて、前記入力装置の所定の動きを判別する第1判別ステップと、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の動きを判別する第2判別ステップと、
前記第1判別ステップによる判別結果、および、前記第2判別ステップによる判別結果に応じて、所定の処理を実行する第1処理実行ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項2】
前記第2判別ステップにおいて、前記コンピュータは、前記第1判別ステップで判別される所定の動きと同じ種類の動きを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで前記所定の動きが行われたと判別された場合、前記所定の処理を実行する、請求項1に記載の情報処理プログラム。
【請求項3】
前記動き検出手段は加速度センサであり、
前記第1判別ステップにおいて、前記コンピュータは、前記撮影画像に含まれる前記撮像対象の当該画像内での移動に基づいて、前記入力装置が所定方向に移動または回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記加速度センサによる検出結果から算出される前記入力装置の動きに基づいて、前記入力装置が前記所定方向に移動したことを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置の動きが行われたことが判別された場合、前記所定の処理を実行する、請求項2に記載の情報処理プログラム。
【請求項4】
前記加速度センサによる検出結果から算出される、水平方向を軸とした回転に関する前記入力装置の傾きに基づいて、当該軸を中心とした前記入力装置の回転を判別する第3判別ステップを前記コンピュータにさらに実行させ、
前記第1判別ステップにおいて、前記コンピュータは、前記入力装置が鉛直方向に移動または回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記入力装置が前記鉛直方向に移動したことを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップ、前記第2判別ステップ、および、前記第3判別ステップの少なくともいずれかで動きが行われたことが判別されたときに、前記所定の処理を実行する、請求項3に記載の情報処理プログラム。
【請求項5】
前記撮像手段によって撮像された撮像画像に含まれる前記撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記撮像手段の撮像方向を軸とした回転に関する前記入力装置の傾きを第1の傾きとして算出する第1傾き算出ステップと、
前記加速度センサの検出結果に基づいて、水平方向を軸とした回転に関する前記入力装置の傾きを第2の傾きとして算出する第2傾き算出ステップと、
前記第1の傾きおよび前記第2の傾きに基づいて、前記入力装置の姿勢を算出する姿勢算出ステップとを、前記コンピュータにさらに実行させ、
前記第3判別ステップにおいて、前記コンピュータは、前記第2の傾きに基づいて前記入力装置の回転を判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記加速度センサによって検出された3軸方向の加速度を前記姿勢算出ステップによって算出された姿勢に基づいて補正することにより得られる前記入力装置の動きを用いて判別を行う、請求項4に記載の情報処理プログラム。
【請求項6】
前記加速度センサは、撮像手段の撮像方向を軸とした回転に応じて変化する値を出力可能であり、
前記第1傾き算出ステップにおいて前記第1の傾きを算出することが可能か否かを、前記撮像手段による前記撮像対象の撮像状況に基づいて判定する判定ステップと、
前記判定ステップにおいて前記第1の傾きを算出することが不可能と判定された場合、前記加速度センサの出力値に基づいて前記第1の傾きを算出する第3傾き算出ステップとをさらに前記コンピュータに実行させる、請求項5に記載の情報処理プログラム。
【請求項7】
前記動き検出手段は加速度センサであり、
前記第1判別ステップにおいて、前記コンピュータは、前記撮影画像に含まれる前記撮像対象の当該画像内での移動に基づいて、前記入力装置が鉛直方向に移動または回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記加速度センサによる検出結果から算出される、水平方向を軸とした回転に関する前記入力装置の傾きに基づいて前記入力装置の前記所定方向の回転を判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置の動きが行われたことが判別された場合、前記所定の処理を実行する、請求項2に記載の情報処理プログラム。
【請求項8】
前記第1判別ステップにおいて、前記コンピュータは、前記撮像手段の撮像方向を軸として前記入力装置が回転したことを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記センサの検出結果に基づいて、前記入力装置が前記撮像方向を軸として回転したことを判別し、
前記第1処理実行ステップにおいて、前記コンピュータは、前記第1判別ステップおよび前記第2判別ステップの少なくともいずれかで、前記入力装置が回転したと判別された場合、前記所定の処理を実行する、請求項2に記載の情報処理プログラム。
【請求項9】
前記第1判別ステップにおいて、前記コンピュータは、前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、入力装置の所定の動きを判別し、
前記撮像手段によって撮像された撮像画像に含まれる前記所定の撮像対象の画像に関する当該撮像画像内の位置に基づいて、前記所定の処理とは異なる処理を実行する第2処理実行ステップを前記コンピュータにさらに実行させる、請求項1に記載の情報処理プログラム。
【請求項10】
入力装置の傾きに応じた処理を行う情報処理装置のコンピュータで実行されるプログラムであって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記入力装置の所定の傾きを判別する第1判別ステップと、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の傾きを判別する第2判別ステップと、
前記第1判別ステップによる判別結果、および、前記第2判別ステップによる判別結果に応じて、所定の処理を実行する処理実行ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項11】
前記動き検出手段は、前記入力装置の前記撮像手段の撮像方向と異なる所定方向を軸とした回転に応じて変化する値を出力するセンサであり、
前記第1判別ステップにおいて、前記コンピュータは、前記撮像手段によって撮像された撮像画像に含まれる前記撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記撮像方向を軸とした回転に関する前記入力装置の傾きを判別し、
前記第2判別ステップにおいて、前記コンピュータは、前記センサの出力値に基づいて、前記入力装置の前記所定方向を軸とした回転に関する前記入力装置の傾きを判別し、
前記処理実行ステップにおいて、前記コンピュータは、前記第1の傾きおよび第2の傾きに基づいて前記入力装置の姿勢を算出する、請求項10に記載の情報処理プログラム。
【請求項12】
前記センサは、加速度センサであって、3軸方向の加速度をそれぞれ検出することが可能であり、
前記処理実行ステップにおいて、前記コンピュータは、前記加速度センサによって検出された3軸方向の加速度を、前記算出された姿勢に基づいて補正することにより前記入力装置の動きをさらに算出する、請求項11に記載の情報処理プログラム。
【請求項13】
入力装置の動きに応じた処理を行う情報処理装置であって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における動きに基づいて、前記入力装置の所定の動きを判別する第1判別手段と、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の動きを判別する第2判別手段と、
前記第1判別手段による判別結果、および、前記第2判別手段による判別結果に応じて、所定の処理を実行する処理実行手段とを備える、情報処理装置。
【請求項14】
入力装置の傾きに応じた処理を行う情報処理装置であって、
前記入力装置は、撮像手段と、当該入力装置の動きを検出する動き検出手段とを備えており、
前記撮像手段によって撮像された撮像画像に含まれる所定の撮像対象の画像に関する当該撮像画像内における傾きに基づいて、前記入力装置の所定の傾きを判別する第1判別手段と、
前記動き検出手段による検出結果に基づいて前記入力装置の所定の傾きを判別する第2判別手段と、
前記第1判別手段による判別結果、および、前記第2判別手段による判別結果に応じて、所定の処理を実行する処理実行手段とを前記コンピュータに実行させる、情報処理装置。
【図1】
【図2】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2008−210019(P2008−210019A)
【公開日】平成20年9月11日(2008.9.11)
【国際特許分類】
【出願番号】特願2007−44100(P2007−44100)
【出願日】平成19年2月23日(2007.2.23)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
【公開日】平成20年9月11日(2008.9.11)
【国際特許分類】
【出願日】平成19年2月23日(2007.2.23)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
[ Back to top ]