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