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