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