説明

情報処理装置、情報処理プログラム、情報処理システム、および、表示範囲制御方法

【課題】表示装置に表示される表示範囲をジャイロセンサの出力を用いて制御する。
【解決手段】情報処理装置は、入力装置が備えるジャイロセンサによって検出される角速度を入力し、表示装置に画像を表示させる。情報処理装置は、まず、前記角速度に基づいて前記入力装置の姿勢を算出する。次に、情報処理装置は、所定空間の所定位置から前記姿勢を表すベクトルの方向へ延ばした線分と、当該所定空間における所定平面との交点の座標を算出する。表示対象のうちで前記表示装置に表示すべき表示範囲は、前記座標に基づいて制御される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理プログラム、情報処理システム、および、表示範囲制御方法に関し、より特定的には、ジャイロセンサの検出結果を入力として表示装置に表示される表示範囲を制御する情報処理装置、情報処理プログラム、情報処理システム、および、表示範囲制御方法に関する。
【背景技術】
【0002】
従来、加速度センサおよびジャイロセンサを用いたゲーム装置が考えられている。例えば、特許文献1には、加速度センサおよびジャイロセンサを備えた入力制御装置を使用するゲーム装置が記載されている。このゲーム装置は、ゲームキャラクタが持つ刀を入力制御装置の動きに応じて制御するものである。具体的には、加速度センサの出力に基づいて刀を振る動作のデータが作成され、ジャイロセンサの出力に基づいて刀の姿勢のデータが作成される。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2000−308756号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ジャイロセンサを備える入力装置を用いるシステムにおいては、入力装置自体を動かす操作を入力として用いることができる。そのため、このような入力装置を用いて、例えば、表示画面上の位置を指定する操作や、画像をスクロールさせる操作等、種々の操作を行うことができればユーザにとって便利である。しかし、上記特許文献1では、ジャイロセンサの出力は仮想空間内のオブジェクト(刀)の姿勢を制御するために用いられるのみであり、ジャイロセンサの出力を各種の操作に用いることができなかった。
【0005】
それ故、本発明の目的は、表示装置に表示される表示範囲をジャイロセンサの出力を用いて制御することができる情報処理装置、情報処理プログラム、情報処理システム、および、表示範囲制御方法を提供することである。
【課題を解決するための手段】
【0006】
本発明は、上記の課題を解決するために、以下の(1)〜(13)の構成を採用した。
【0007】
(1)
本発明は、入力装置が備えるジャイロセンサによって検出される角速度を入力し、表示装置に画像を表示させる情報処理装置である。情報処理装置は、姿勢算出部と、座標算出部と、表示制御部とを備える。姿勢算出部は、角速度に基づいて入力装置の姿勢を算出する。座標算出部は、所定空間の所定位置から姿勢を表すベクトルの方向へ延ばした線分と、当該所定空間における所定平面との交点の座標を算出する。表示制御部は、表示対象のうちで表示装置に表示すべき表示範囲を座標に基づいて制御する。
【0008】
上記「入力装置」は、後述する実施形態における入力装置8のような加速度センサ等を備えた装置に限らず、ジャイロセンサを備える任意の入力手段を含む概念である。
上記「情報処理装置」は、後述する実施形態においては、ゲーム処理を実行するためのゲーム装置であるが、入力装置の角速度を入力として表示装置に画像を表示させる任意の情報処理装置を含む概念である。また、後述する実施形態においては、ゲーム装置3と入力装置8とは別体であったが、例えば情報処理装置が携帯型である場合には、情報処理装置と入力装置とは一体であってもよい。
上記「姿勢算出部」は、角速度に基づいて入力装置の姿勢を算出するものであればよく、姿勢の算出方法は問わない。例えば、後述する実施形態では、ジャイロセンサ、加速度センサ、および撮像手段の各出力を用いて姿勢を算出するが、「姿勢算出部」は、ジャイロセンサのみを用いて姿勢を算出してもよい。
上記「座標算出部」は、入力装置の姿勢から、所定平面における位置(2次元座標)を算出するものである。「座標算出部」は、後述する実施形態におけるステップS7を実行するものであってもよいし、ステップS7に加えてステップS81およびS82を実行するものであってもよい。
上記「表示制御部」は、座標算出部によって算出された座標に基づいて表示範囲を制御するものであればどのようなものであってもよい。「表示制御部」は、例えば、後述する実施形態や下記(2)の構成のように、3次元の仮想空間に設定される仮想カメラを用いて表示範囲を制御するものであってもよいし、表示対象である2次元平面上に表示範囲を設定して制御するものであってもよい。
【0009】
上記(1)の構成によれば、座標算出部によって、入力装置の姿勢から、当該姿勢に応じた2次元座標を得ることができる。したがって、表示制御部において2次元座標に基づいて表示範囲を制御することによって、入力装置の姿勢を用いて表示範囲を制御することができる。このように、上記(1)の構成によれば、表示装置に表示される表示範囲をジャイロセンサの出力を用いて制御することができる。
【0010】
(2)
表示制御部は、表示対象が配置される仮想空間内において仮想カメラの向きおよび/または位置を座標に基づいて変化させることで表示範囲を制御してもよい。
【0011】
上記(2)の構成によれば、仮想カメラの向きおよび/または位置を制御することによって、表示範囲を容易に制御することができる。
【0012】
(3)
情報処理装置は、入力装置に設けられた操作手段に対する方向指示操作を示す操作情報をさらに入力してもよい。このとき、表示制御部は、座標に基づいて仮想カメラの向きを変化させ、操作情報に基づいて仮想カメラの位置を変化させることで表示範囲を制御する。
【0013】
上記「操作手段」は、入力装置に設けられる任意の操作装置を含む概念である、後述する実施形態における十字ボタンの他、スティックやタッチパッド等を含む概念である。
【0014】
上記(3)の構成によれば、ユーザは、入力装置の姿勢を変化させる操作によって仮想カメラの向きを変化させるとともに、入力装置に設けられた操作手段に対する操作によって仮想カメラの位置を変化させることができる。したがって、ユーザは、入力装置を把持する片手で2種類の入力を行うことができ、2種類の方法で表示範囲を変更することができるので、表示範囲をより自由に操作することができる。つまり、上記(3)の構成によれば、表示範囲の操作の自由度を向上することができるとともに、表示範囲に対する操作の操作性を向上することができる。
【0015】
(4)
表示制御部は、座標が所定平面における所定領域の外側の位置を示す場合、表示範囲を変化させてもよい。
【0016】
上記「所定領域」とは、後述する実施形態においては、表示装置(テレビ2)の画面に対応する所定領域Arであるが、所定平面上における領域であればどのような位置・形状であってもよい。
【0017】
上記(4)の構成によれば、所定の基準方向を向く姿勢(座標が所定領域の内側となるときの入力装置の姿勢)から入力装置の姿勢を変化させることによって、表示範囲を変化させることができる。
【0018】
(5)
情報処理装置は、所定領域と表示装置の画面の領域とが対応するように、当該画面上の位置を座標に基づいて算出する画面位置算出部をさらに備えていてもよい。
【0019】
上記(5)の構成によれば、上記所定領域と表示装置の画面の領域とが対応するので、上記「所定の基準方向を向く姿勢」は、入力装置が画面の方向を向く姿勢となる。したがって、入力装置を画面から外れる方へ向けることによって、表示範囲を変化させることができ、ユーザは、直感的なわかりやすい操作で表示範囲を変化させることができる。
【0020】
(6)
情報処理装置は、指示画像表示部と、処理実行部をさらに備えていてもよい。指示画像表示部は、画面位置算出部が算出した画面上の位置に所定の指示画像を表示させる。処理実行部は、指示画像の位置に基づいて所定の情報処理を実行する。
【0021】
上記「指示画像」は、後述する実施形態におけるカーソルの他、画面位置算出部が算出した画面上の位置に表示される任意の画像を含む概念である。つまり、上記「指示画像表示部」は、後述する実施形態におけるステップS44のようにカーソルを表示するものに限らず、例えば、上記画面上の位置の軌跡を表示するものであってもよい。
上記「処理実行部」は、後述する実施形態においては、カーソル位置に基づくゲーム処理(ステップS45)を上記「所定の情報処理」として実行するCPU10であるが、これに限らず、画面位置算出部が算出した画面上の位置を入力として用いる処理を実行するものであればよい。
【0022】
上記(6)の構成によれば、入力装置が画面の方を向いている状態においては、上記処理実行部によって所定の処理が実行され、入力装置が画面の方を向けていない(画面外の方を向いている)状態においては、表示制御部によって表示範囲の制御が行われる。
したがって、ユーザは、入力装置を画面内に向けて操作することで指示画像を用いた指示操作を行うことができるとともに、入力装置を画面外に向けることで表示範囲を移動させることができる。これによれば、指示画像を用いた指示操作中においても非常に直感的でわかりやすい操作で表示範囲を移動させることができるので、指示画像を用いた指示操作の操作性を向上することができる。
【0023】
(7)
表示制御部は、表示範囲を変化させる方向を、所定領域から座標が示す位置までの方向に応じて決定してもよい。
【0024】
上記(7)の構成によれば、所定の基準方向を向く姿勢(座標が所定領域の内側となるときの入力装置の姿勢)から入力装置の姿勢を変化させる向きに応じた方向へ、表示範囲を変化させることができる。これによれば、入力装置を向けた方向へ表示範囲を移動させることができるので、ユーザは、直感的なわかりやすい操作で表示範囲を変化させることができる。
【0025】
(8)
表示制御部は、表示範囲を変化させる度合を、座標が示す位置が所定領域から離れている度合に基づいて決定してもよい。
【0026】
上記「表示範囲を変化させる度合」とは、表示範囲の速度(単位時間当たりの移動量)、および、表示範囲の移動量を少なくとも含む概念である。
上記「座標が示す位置が所定領域から離れている度合」とは、後述する実施形態においてははみ出しベクトルVdの長さとして表されるが、これに限らず、座標の位置から所定領域までの距離を表す情報であればよい。上記「度合」は、例えば、座標の位置から所定領域の中心位置までの長さとして表されてもよいし、座標の位置から、所定領域の辺のうちで当該座標の位置に最も近い辺の中点までの長さとして表されてもよい。
【0027】
上記(8)の構成によれば、所定の基準方向を向く姿勢から入力装置の姿勢を変化させる量に応じて、表示範囲を変化させる度合が決定される。これによれば、ユーザは、入力装置の向きを大きく変化させれば表示範囲を大きく(または速く)移動させることができるので、ユーザは、直感的なわかりやすい操作で表示範囲を変化させることができる。
【0028】
(9)
表示制御部は、表示範囲を変化させる度合を、座標が所定領域の外側に位置する場合における当該座標の速度に基づいて決定してもよい。
【0029】
上記「座標の速度に基づいて決定する」とは、座標の速度をそのまま用いて上記度合を決定することの他、座標の速度から算出される情報を用いて(座標の速度を加工して用いて)上記度合を決定することを含む。表示制御部は、例えば、後述する実施形態におけるスクロール成分速度Sを用いて上記度合を決定してもよいし、所定期間における速度の最大値を用いて上記度合を決定してもよい。
【0030】
上記(9)の構成によれば、所定の基準方向を向く姿勢から入力装置の姿勢を変化させる速度に応じて、表示範囲を変化させる度合が決定される。これによれば、ユーザは、入力装置の向きを速く変化させれば表示範囲を大きく(または速く)移動させることができるので、ユーザは、直感的なわかりやすい操作で表示範囲を変化させることができる。
【0031】
(10)
表示制御部は、座標が所定領域の外側に出てからの所定期間における当該座標の速度の最大値を少なくとも用いて、表示範囲を変化させる速度を決定してもよい。
【0032】
上記「座標が所定領域の外側に出てからの所定期間」とは、後述する実施形態のように、座標が所定領域の外側に出ている期間であってもよいし、座標が所定領域の外側に出てから、予め定められた所定時間が経過するまでの期間であってもよい。
【0033】
上記(10)の構成によれば、上記所定期間における最大値が表示範囲の移動速度に反映されるので、入力装置が停止した場合であっても表示範囲の移動を継続することができる。したがって、表示対象が非常に大きいために表示範囲を大きく移動させる必要がある場合等であっても、ユーザは表示範囲を容易に移動させることができる。
【0034】
(11)
表示制御部は、ユーザが入力装置を用いて指定した期間において、座標に基づき表示範囲を変化させてもよい。
【0035】
上記(11)の構成によれば、ユーザが指定した期間のみ表示範囲が変化するので、誤って表示範囲が変更されることを防止することができる。
【0036】
(12)
表示制御部は、座標の移動方向に応じた方向へ、座標の移動量に応じた量だけ表示範囲を移動させてもよい。
【0037】
上記(12)の構成によれば、座標の移動方向および移動量に応じて表示範囲の移動方向および移動量が決まるので、ユーザは、直感的なわかりやすい操作で表示範囲を変化させることができる。
【0038】
(13)
表示制御部は、所定平面における所定の基準位置から座標が示す位置までの方向に応じた方向へ、当該所定の基準位置から座標が示す位置までの距離に応じた速度で表示範囲を移動させてもよい。
【0039】
上記(13)の構成によれば、所定の基準方向を向く姿勢(座標が所定の基準位置となるときの入力装置の姿勢)から入力装置の姿勢を変化させる向きに応じた方向へ、表示範囲を変化させることができる。これによれば、入力装置を向けた方向へ表示範囲を移動させることができるので、ユーザは、直感的なわかりやすい操作で表示範囲を変化させることができる。また、上記基準方向を向く姿勢から入力装置の姿勢を変化させる量に応じた速度で表示範囲を移動させることができる。そのため、ユーザは、入力装置を静止させていても表示範囲を移動させることができるので、表示対象が非常に大きいために表示範囲を大きく移動させる必要がある場合等であっても、表示範囲を容易に移動させることができる。
【0040】
また、本発明は、情報処理装置のコンピュータを上記各部と同等の手段として機能させる情報処理プログラムの形態で実施されてもよい。また、本発明は、上記各部を備える1以上の情報処理装置からなる情報処理システムの形態で実施されてもよい。このとき、1以上の情報処理装置は、有線または無線通信によって直接通信を行ってもよいし、ネットワークを介して通信を行ってもよい。さらに、本発明は、上記各部によって行われる表示範囲制御方法の形態で実施されてもよい。
【発明の効果】
【0041】
本発明によれば、ジャイロセンサの出力から算出される入力装置の姿勢から、当該姿勢に応じた2次元座標を得て、この2次元座標に基づいて表示範囲を制御することによって、ジャイロセンサの出力を用いて表示装置に表示される表示範囲を制御することができる。
【図面の簡単な説明】
【0042】
【図1】ゲームシステムの外観図
【図2】ゲーム装置の機能ブロック図
【図3】入力装置の外観構成を示す斜視図
【図4】コントローラの外観構成を示す斜視図
【図5】コントローラの内部構造を示す図
【図6】コントローラの内部構造を示す図
【図7】入力装置の構成を示すブロック図
【図8】第1の姿勢および第2の姿勢を示すベクトルを示す図
【図9】補正量を示すベクトルv3を示す図
【図10】第1補正処理による補正後の第1の姿勢を示すベクトルを示す図
【図11】第1の姿勢および第3の姿勢を示すベクトルを示す図
【図12】第2補正処理による補正後の第1の姿勢を示す図
【図13】ゲーム装置のメインメモリに記憶される主なデータを示す図
【図14】ゲーム装置において実行される処理の流れを示すメインフローチャート
【図15】図14に示す第1補正処理(ステップS5)の流れを示すフローチャート
【図16】図14に示す第2補正処理(ステップS6)の流れを示すフローチャート
【図17】撮像画像に対応する2次元座標を示す図
【図18】所定の仮想空間における入力装置と所定の平面とを示す図
【図19】図18に示す仮想空間をy軸正方向側から負方向側へ見た図
【図20】図14に示す表示制御処理(ステップS8)の流れを示すフローチャート
【図21】入力装置の姿勢と、カメラ向き制御処理によって決められる表示範囲との関係の一例を示す図
【図22】図20に示すカメラ向き制御処理(ステップS41)の流れを示すフローチャート
【図23】第1の仮想空間に配置される平面Qを示す図
【図24】表示対象および仮想カメラが配置される仮想空間を示す図
【図25】仮想カメラの位置制御に関する第1〜第4の制御方法の例を示す図
【図26】第1の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャート
【図27】第2の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャート
【図28】第3の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャート
【図29】第4の制御方法を採用する場合においてゲーム装置のメインメモリに記憶されるゲーム処理用データを示す図
【図30】第4の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャート
【図31】平面Qにおけるスクロール成分速度Sを示す図
【図32】第1の方法と第2の方法との比較を示す図
【図33】第2の方法を採用する場合においてゲーム装置のメインメモリに記憶される主なデータを示す図
【図34】第2の方法を採る場合においてゲーム装置が実行する処理の流れを示すメインフローチャート
【図35】図34に示すオフセット決定処理(ステップS41)の流れを示すフローチャート
【図36】設定画面の一例を示す図
【図37】オフセット量の決定方法を示す図
【図38】第2の方法における補正方法の変形例を示す図
【発明を実施するための形態】
【0043】
[ゲームシステムの全体構成]
図1を参照して、本発明の一実施形態に係る座標算出装置の一例であるゲーム装置を含むゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置3、光ディスク4、入力装置8、およびマーカ部6を含む。本システムは、入力装置8を用いたゲーム操作に基づいてゲーム装置3でゲーム処理を実行するものである。
【0044】
ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるためのゲームプログラムが記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されているゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【0045】
ゲーム装置3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ2の画面の周辺(図1では画面の上側)には、マーカ部6が設置される。マーカ部6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部6はゲーム装置3に接続されており、ゲーム装置3はマーカ部6が備える各赤外LEDの点灯を制御することが可能である。
【0046】
入力装置8は、自機に対して行われた操作の内容を示す操作データをゲーム装置3に与えるものである。本実施形態では、入力装置8はコントローラ5とジャイロセンサユニット7とを含む。詳細は後述するが、入力装置8は、コントローラ5に対してジャイロセンサユニット7が着脱可能に接続されている構成である。コントローラ5とゲーム装置3とは無線通信によって接続される。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。
【0047】
[ゲーム装置3の内部構成]
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の構成を示すブロック図である。ゲーム装置3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
【0048】
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSIの内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
【0049】
また、システムLSI11には、入出力プロセッサ(I/Oプロセッサ)11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRA 1d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
【0050】
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
【0051】
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
【0052】
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
【0053】
入出力プロセッサ11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
【0054】
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
【0055】
また、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
【0056】
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
【0057】
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
【0058】
[入力装置8の構成]
次に、図3〜図6を参照して、入力装置8について説明する。図3は、入力装置8の外観構成を示す斜視図である。図4は、コントローラ5の外観構成を示す斜視図である。図3は、コントローラ5の上側後方から見た斜視図であり、図4は、コントローラ5を下側前方から見た斜視図である。
【0059】
図3および図4において、コントローラ5は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ5に設けられたボタンを押下すること、および、コントローラ5自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
【0060】
ハウジング31には、複数の操作ボタンが設けられる。図3に示すように、ハウジング31の上面には、十字ボタン32a、1番ボタン32b、2番ボタン32c、Aボタン32d、マイナスボタン32e、ホームボタン32f、プラスボタン32g、および電源ボタン32hが設けられる。本明細書では、これらのボタン32a〜32hが設けられるハウジング31の上面を「ボタン面」と呼ぶことがある。一方、図4に示すように、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作ボタン32a〜32iには、ゲーム装置3が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン32hは遠隔からゲーム装置3本体の電源をオン/オフするためのものである。ホームボタン32fおよび電源ボタン32hは、その上面がハウジング31の上面に埋没している。これによって、プレイヤがホームボタン32fまたは電源ボタン32hを誤って押下することを防止することができる。
【0061】
ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、コントローラ5に他の機器(例えば、ジャイロセンサユニット7や他のコントローラ)を接続するために利用される。また、ハウジング31の後面におけるコネクタ33の両側には、上記他の機器が容易に離脱することを防止するために係止穴33aが設けられている。
【0062】
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のメインコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ5の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
【0063】
また、コントローラ5は撮像情報演算部35(図6)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
【0064】
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ49(図5)からの音を外部に放出するための音抜き孔31aが形成されている。
【0065】
次に、図5および図6を参照して、コントローラ5の内部構造について説明する。図5および図6は、コントローラ5の内部構造を示す図である。なお、図5は、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6は、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6に示す斜視図は、図5に示す基板30を裏面から見た斜視図となっている。
【0066】
図5において、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ49等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図6参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
【0067】
一方、図6において、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
【0068】
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ48が設けられている。バイブレータ48は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ48が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ48は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ48がコントローラ5の中心よりも端側に配置することによって、バイブレータ48の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5および図6に示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ49に音声信号を出力するアンプ等を備えている。
【0069】
また、ジャイロセンサユニット7は、3軸回りの角速度を検知するジャイロセンサ(図7に示すジャイロセンサ55および56)を有する。ジャイロセンサユニット7は、コントローラ5のコネクタ33に着脱可能に装着される。ジャイロセンサユニット7の前端(図3に示すZ軸正方向側の端部)には、コネクタ33に接続可能なプラグ(図7に示すプラグ53)が設けられる。さらに、プラグ53の両側にはフック(図示せず)が設けられる。ジャイロセンサユニット7がコントローラ5に対して装着される状態では、プラグ53がコネクタ33に接続されるとともに、上記フックがコントローラ5の係止穴33aに係止する。これによって、コントローラ5とジャイロセンサユニット7とがしっかりと固定される。また、ジャイロセンサユニット7は側面(図3に示すX軸方向の面)にボタン51を有している。ボタン51は、それを押下すれば上記フックの係止穴33aに対する係止状態を解除することができるように構成されている。したがって、ボタン51を押下しながらプラグ53をコネクタ33から抜くことによって、ジャイロセンサユニット7をコントローラ5から離脱することができる。
【0070】
また、ジャイロセンサユニット7の後端には、上記コネクタ33と同形状のコネクタが設けられる。したがって、コントローラ5(のコネクタ33)に対して装着可能な他の機器は、ジャイロセンサユニット7のコネクタに対しても装着可能である。なお、図3においては、当該コネクタに対してカバー52が着脱可能に装着されている。
【0071】
なお、図3〜図6に示したコントローラ5およびジャイロセンサユニット7の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はZ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【0072】
図7は、入力装置8(コントローラ5およびジャイロセンサユニット7)の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、コネクタ33、撮像情報演算部35、通信部36、および加速度センサ37を備えている。コントローラ5は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置3へ送信するものである。
【0073】
操作部32は、上述した各操作ボタン32a〜32iを含み、各操作ボタン32a〜32iに対する入力状態(各操作ボタン32a〜32iが押下されたか否か)を示す操作ボタンデータを通信部36のマイコン42へ出力する。
【0074】
撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ5の動きでも追跡して解析することができる。
【0075】
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ5の前方から入射する光から赤外線のみを通過させる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDセンサのような固体撮像素子であり、レンズ39が集光した赤外線を受光して画像信号を出力する。ここで、テレビ2の表示画面近傍に配置されるマーカ部6のマーカ6Rおよび6Lは、テレビ2の前方に向かって赤外光を出力する赤外LEDで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、マーカ6Rおよび6Lの画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ6Rおよび6L)の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(傾斜角度)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。
【0076】
なお、他の実施形態においては、コントローラ5は画像処理回路41を備えていない構成であってもよく、撮像画像自体がコントローラ5からゲーム装置3へ送信されてもよい。このとき、ゲーム装置3は、画像処理回路41と同様の機能を有する回路あるいはプログラムを有しており、上記マーカ座標を算出するようにしてもよい。
【0077】
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、3軸または2軸の加速度センサは、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。なお、加速度センサ37は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
【0078】
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、入力装置8(コントローラ5)を基準に設定されるXYZ座標系(コントローラ座標系)における3次元のベクトル(ax,ay,az)として表される。以下では、加速度センサ37によって検出される3軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【0079】
加速度センサ37が検出した加速度を示すデータ(加速度データ)は、通信部36へ出力される。なお、加速度センサ37が検出した加速度は、コントローラ5自体の向き(傾斜角度)や動きに対応して変化するので、ゲーム装置3は取得された加速度データを用いてコントローラ5の向きや動きを算出することができる。本実施形態では、ゲーム装置3は、取得された加速度データに基づいてコントローラ5の姿勢や傾斜角度等を算出する。
【0080】
なお、加速度センサ37から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラ5のプロセッサ(例えばマイコン42)等のコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ37を搭載するコントローラ5が静止状態であることを前提としてコンピュータ側の処理が実行される場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合)、コントローラ5が現実に静止状態であれば、検出された加速度に基づいてコントローラ5の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ37の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かによって、コントローラ5が基準に対して傾いているか否かを知ることができるし、その大きさによって基準に対してどの程度傾いているかも知ることができる。また、多軸の加速度センサ37の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ5がどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ37からの出力に基づいてコントローラ5の傾斜角度を算出してもよいし、当該傾斜角度を算出せずに、コントローラ5の傾斜方向を算出するようにしてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾斜角度または姿勢を判定することができる。
【0081】
一方、コントローラ5が動的な状態(コントローラ5が動かされている状態)であることを前提とする場合には、加速度センサ37は重力加速度に加えてコントローラ5の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ5の動き方向を知ることができる。また、コントローラ5が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ5の傾きを知ることが可能である。なお、他の実施例では、加速度センサ37は、内蔵の加速度検出手段で検出された加速度信号をマイコン42に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ37が静的な加速度(例えば、重力加速度)を検出するために用いられる場合、加速度信号を傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
【0082】
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。また、マイコン42はコネクタ33に接続されている。ジャイロセンサユニット7から送信されてくるデータは、コネクタ33を介してマイコン42に入力される。以下、ジャイロセンサユニット7の構成について説明する。
【0083】
ジャイロセンサユニット7は、プラグ53、マイコン54、2軸ジャイロセンサ55、および1軸ジャイロセンサ56を備えている。上述のように、ジャイロセンサユニット7は、3軸(本実施形態では、XYZ軸)周りの角速度を検出し、検出した角速度を示すデータ(角速度データ)をコントローラ5へ送信する。
【0084】
2軸ジャイロセンサ55は、X軸周りの角速度およびZ軸周りの(単位時間あたりの)角速度を検出する。また、1軸ジャイロセンサ56は、Y軸周りの(単位時間あたりの)角速度を検出する。なお、本明細書では、コントローラ5の撮像方向(Z軸正方向)を基準として、XYZ軸周りの回転方向を、それぞれ、ピッチ方向、ヨー方向、ロール方向と呼ぶ。すなわち、2軸ジャイロセンサ55は、ピッチ方向(X軸周りの回転方向)およびロール方向(Z軸周りの回転方向)の角速度を検出し、1軸ジャイロセンサ56は、ヨー方向(Y軸周りの回転方向)の角速度を検出する。
【0085】
なお、本実施形態では、3軸回りの角速度を検出するために、2軸ジャイロセンサ55と1軸ジャイロセンサ56とを用いる構成としたが、他の実施形態においては、3軸回りの角速度を検出することができればよく、用いるジャイロセンサの数および組み合わせはどのようなものであってもよい。
【0086】
また、本実施形態では、後述する姿勢算出処理における計算を容易にする目的で、各ジャイロセンサ55および56が角速度を検出する3つの軸は、加速度センサ37が加速度を検出する3つの軸(XYZ軸)と一致するように設定される。ただし、他の実施形態においては、各ジャイロセンサ56および57が角速度を検出する3つの軸と、加速度センサ37が加速度を検出する3つの軸とは一致しなくてもよい。
【0087】
各ジャイロセンサ56および57で検出された角速度を示すデータは、マイコン54に出力される。したがって、マイコン54には、XYZ軸の3軸回りの角度速度を示すデータが入力されることになる。マイコン54は、上記3軸回りの角速度を示すデータを角速度データとしてプラグ53を介してコントローラ5へ送信する。なお、マイコン54からコントローラ5への送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。
【0088】
コントローラ5の説明に戻り、操作部32、撮像情報演算部35、および加速度センサ37からマイコン42へ出力されたデータ、ならびに、ジャイロセンサユニット7からマイコン42へ送信されてきたデータは、一時的にメモリ43に格納される。これらのデータは、上記操作データとしてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3の無線コントローラモジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ5から送信される。微弱電波信号はゲーム装置3側の無線コントローラモジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。なお、通信部36から無線コントローラモジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で各操作データをゲーム装置3の無線コントローラモジュール19へ出力する。
【0089】
上記コントローラ5を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5を任意の傾斜角度に傾ける操作を行うことができる。その他、上記コントローラ5によれば、プレイヤは、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作を行うこともできる。
【0090】
[姿勢算出処理の概要]
次に、図8〜図12を参照して、ゲーム装置3において実行される、入力装置8の姿勢を算出する姿勢算出処理の概要を説明する。本実施形態では、ゲーム装置3は、ジャイロセンサ55および56と、加速度センサ37と、撮像手段(撮像素子40)とを備えた入力装置8からデータ(操作データ)を取得し、入力装置8の姿勢を算出する。なお、本実施形態では、入力装置8は、加速度センサ37と撮像素子40とを両方備える構成とするが、他の実施形態においては、加速度センサ37と撮像素子40とのいずれか一方のみを備える構成であってもよい。
【0091】
ゲーム装置3は、(1)姿勢算出手段と、(2)第1補正手段と、(3)第2補正手段とを備えている。本実施形態においては、これら各手段は、ゲーム装置3のコンピュータ(CPU10)によって実行されるゲームプログラム(座標算出プログラム)が、当該コンピュータを当該各手段として機能させることによって実現される。なお、他の実施形態においては、上記各手段の一部または全部は、ゲーム装置3が備える専用回路として実現されてもよい。
【0092】
(1)姿勢算出手段
姿勢算出手段は、ジャイロセンサ55および56が検出する角速度に基づいて入力装置8の姿勢を算出する(後述するステップS4)。角速度から姿勢を算出する方法はどのような方法であってもよいが、例えば、初期姿勢に(単位時間あたりの)角速度を逐次加算する方法がある。すなわち、ジャイロセンサ55および56から逐次出力される角速度を積分し、初期状態からの姿勢の変化量を積分結果から算出することによって、現在の姿勢を算出することができる。なお、以下では、姿勢算出手段によって角速度から算出される入力装置8の姿勢を「第1の姿勢」と呼ぶ。ただし、第1の姿勢に補正が加えられた後の姿勢も第1の姿勢と呼ぶ。
【0093】
ここで、ジャイロセンサ55および56が検出する角速度を用いて算出される上記第1の姿勢には、ジャイロセンサ55および56の誤検知が原因で、入力装置8の実際の姿勢との間に誤差が生じることがある。そこで、本実施形態では、ゲーム装置3は、加速度センサ37によって検出される加速度を用いて上記第1の姿勢を補正する。また、撮像素子40によって撮像される画像(撮像画像)を用いて上記第1の姿勢を補正する。
【0094】
(2)第1補正手段
第1補正手段は、加速度センサ37が検出する加速度データに基づいて上記第1の姿勢を補正する(後述するステップS5)。本実施形態では、第1補正手段は、上記第1の姿勢を第2の姿勢へと近づける補正を行う。ここで、第2の姿勢とは、加速度データから決まる姿勢、具体的には、加速度データが示す加速度の向きが鉛直下向きであると想定する場合における入力装置8の姿勢を指す。すなわち、加速度データが示す加速度が重力加速度であると仮定して算出された姿勢である。以下、図8〜図10を参照して、第1補正手段による補正処理(第1補正処理)を説明する。
【0095】
図8は、第2の姿勢を用いた第1の姿勢の補正を示す図である。なお、本実施形態では、実際には3次元空間における姿勢を処理しているが、図8〜図10では、図面をわかりやすくするために2次元平面における姿勢を用いて説明する。図8(a)に示すベクトルGは、入力装置8が存在する空間の所定位置を基準とした空間座標系に定義された鉛直下方向、すなわち重力方向を示す。また、図8(a)に示すベクトルv1は、コントローラ5が第1の姿勢であるときの、入力装置8の下向きのベクトル(すなわち図3−図5に示されるY軸負方向)の空間座標系での向きを示したものである。なお、入力装置8の姿勢が基本状態にあるときには、姿勢を示すベクトルはベクトルGと一致することになる。したがって、ベクトルv1は、空間座標系における第1の姿勢に対応する。上記第1の姿勢は、ベクトルGに対してベクトルv1がなす回転としても表すことができ、2次元の図8においては角度θ1として示している。第1の姿勢は角速度によって算出されるので、ベクトルv1は、前回の姿勢に角速度を加えて回転させることによって算出されるものである。第2の姿勢は加速度データに基づいて算出される。図8(a)に示すベクトルv2は、加速度データが示す加速度の向き(ビュー座標系における加速度の向き)を示している。ただし、加速度データは入力装置8に加えられる加速度であって、取得できるのは入力装置8を基準とした座標系におけるベクトルである。図8(b)に、加速度センサの軸と加速度ベクトルとの関係を示す。図8(b)のように、加速度センサから取得される加速度ベクトルv0と、センサのY軸負方向とのなす角度がθ2であるとき、図8(a)の空間座標系においては、ベクトルv1に回転θ2を加えたベクトルv2が空間座標系における加速度ベクトルとなる。そして、第2の姿勢は、上述したように「加速度データが示す加速度の向きが鉛直下向きとみなした場合における入力装置8の姿勢」であるので、ベクトルv2からベクトルv1へ向いた角度θ2の回転が第2の姿勢となる。第2の姿勢を、ベクトルv1のように空間座標系における入力装置8の下向きのベクトルで表すと、ベクトルGをθ2だけ回転させたベクトルv2’として示すことができる。また、3次元の姿勢の場合には、3次元の回転行列等で表現することもできる。なお、角速度から第1の姿勢が正しく算出され、かつ、加速度データが重力方向を正確に示している場合には、加速度の向きを示すベクトルv2の方向は空間座標系の鉛直下方向、つまり重力方向と一致する。つまり、角速度から第1の姿勢が正しく算出されていない場合や、加速度データが正確な重力方向を示していない場合には、図8(a)のように、加速度の向きを示すベクトルv2と重力方向のベクトルGとが異なる。そして、例えば静止状態等のように、加速度データにより示される方向が重力方向と一致すると想定される状況においては、ベクトルv1よりもベクトルv2の方が入力装置8の姿勢に対応するデータとして正確なものと考えられる。また、入力装置が静止していない場合であっても、ある程度の期間内における平均的な姿勢の精度を考慮すると、加速度ベクトルは平均的には重力方向に近いものとなるので、時間とともに誤差の蓄積する角速度から算出される姿勢よりも信頼できるものと考えられる。一方で、前回の算出タイミングで正しい姿勢が算出されている状態であった場合には、次の算出タイミングにおける姿勢の算出には、加速度よりも角速度を用いた方が正確な姿勢が算出されると考えられる。すなわち、角速度による姿勢算出は、タイミングごとの誤差は加速度による算出よりも小さいが、時間と共に誤差が増大する一方、加速度による姿勢算出は、タイミングごとの誤差は場合よっては大きい可能性もあるが、タイミングごとに算出可能であるので誤差が蓄積しないという特徴を持つ。したがって、第1補正手段では、第1の姿勢と第2の姿勢の両方を考慮した補正を行う。
【0096】
第1補正手段による補正は、上記第1の姿勢を第2の姿勢へと近づける補正である。つまり、第1補正手段は、上記角度θ1を上記角度θ2に近づける補正を行う。これは、ベクトルv1をベクトルv2’に近づける補正と表現してもよい。ただし、演算の過程上は、ベクトルv2がわかっていれば、ベクトルv2’自体は算出されなくとも補正は可能である。本実施形態では、上記補正は、補正量を示すベクトルv3を用いて行われる。図9は、補正量を示すベクトルv3を示す図である。図9に示すベクトルv3は、第1の姿勢を補正する補正量を示すベクトルである。具体的には、ベクトルv2に対してベクトルv3がなす角度Δθが、補正量となる。詳細は後述するが、ベクトルv3は、ベクトルGとベクトルv2との間に設定される(図9参照)。ベクトルv1をΔθだけ回転させることで、ベクトルv1が上述のベクトルv2’に近づくことになる。
【0097】
第1補正処理は、第1の姿勢(ベクトルv1)を上記補正量だけ回転させることによって行われる。図10は、第1補正処理による補正後の第1の姿勢を示すベクトルを示す図である。図10に示すように、補正後の第1の姿勢(ベクトルv1’)は、補正前の第1の姿勢(ベクトルv1)を角度Δθだけ回転させることによって得られる。これによって、補正後の第1の姿勢を表す角度θ1’は、角度θ1と角度θ2との間となっており、上記角度θ1を上記角度θ2に近づける補正が行われたことがわかる。
【0098】
なお、本実施形態においては、第1補正手段は、第1の姿勢を第2の姿勢へと近づける補正を行い、補正後の第1の姿勢を第2の姿勢と一致させていない。これは、加速度データが誤検出や激しい操作等の原因で急激に変化する場合であっても補正後の第1の姿勢が急激に変化しないようにするためである。ただし、他の実施形態においては、第1補正手段は、補正後の第1の姿勢を第2の姿勢と一致させるように補正を行ってもよい。また、詳細は後述するが、本実施形態においては、第1補正手段が第1の姿勢を第2の姿勢へと近づける割合は、加速度データにより示される加速度の大きさ(より具体的には、当該大きさと重力加速度の大きさとの差分)に応じて変化するように決められる。ただし、他の実施形態においては、上記割合を予め定められた固定値としてもよい。
【0099】
(3)第2補正手段
第2補正手段は、撮像手段が撮像する所定の撮像対象の画像に基づいて第1の姿勢を補正する(後述するステップS6)。ここで、本実施形態においては、所定の撮像対象とは上記マーカ部6(の赤外LED)である。本実施形態では、第2補正手段は、上記第1の姿勢を第3の姿勢へと近づける補正を行う。第3の姿勢は、上記撮像対象の画像から算出される姿勢であり、具体的には、当該画像内での撮像対象の向きおよび/または位置から算出される入力装置8の姿勢である。以下、図11および図12を参照して、第2補正手段による補正処理(第2補正処理)を説明する。
【0100】
図11は、第3の姿勢を用いた第1の姿勢の補正を示す図である。なお、本実施形態では、実際には3次元空間における姿勢を処理しているが、図11および図12では、図面をわかりやすくするために2次元平面における姿勢を用いて説明する。図11に示すベクトルv1は、空間座標系における第1の姿勢を示す。図11に示すベクトルv4は、空間座標系における第3の姿勢を示す。マーカ部6の位置や姿勢は予め定められているので、画像内での当該マーカの姿勢や位置によって、相対的に入力装置8の姿勢を算出することができる。第3の姿勢が正しい姿勢を表していることを前提とすれば、角速度から第1の姿勢が正しく算出されている場合には、第1の姿勢を示すベクトルv1は、第3の姿勢を示すベクトルv4と一致する。つまり、角速度から第1の姿勢が正しく算出されていない場合には、図11のように、第1の姿勢を示すベクトルv1と第3の姿勢を示すベクトルv4とが異なる。
【0101】
第2補正処理は、第1の姿勢(ベクトルv1)を、第3の姿勢(ベクトルv4)に所定の割合で近づけることによって行われる。図12は、第2補正処理による補正後の第1の姿勢を示す図である。図12に示されるように、補正後の第1の姿勢(ベクトルv1’)は、補正前の第1の姿勢(ベクトルv1)を、第3の姿勢(ベクトルv4)に所定の割合で近づけることによって得られる。
【0102】
ここで、入力装置8の姿勢や位置によっては撮像手段がマーカ部6を撮像することができない場合があり、この場合、第2補正手段は第2補正処理を行うことができない。したがって、仮に、第2補正手段が補正後の第1の姿勢を第3の姿勢と一致させるように補正を行うとすれば、第2補正処理を行うことができない状態から第2補正処理を行うことができる状態へと移行した際に、第1の姿勢が急激に変化してしまうおそれがある。このように第1の姿勢がプレイヤの意図に沿わずに急激に変化してしまうと、(たとえ補正後の姿勢が正確なものであったとしても)プレイヤは操作に違和感を抱いてしまう。このような急激な変化を防止するために、本実施形態では、第1の姿勢を第3の姿勢に所定の割合で近づけるように補正を行っている。これによって、第1の姿勢が急激に変化することを防止することができるので、プレイヤが操作に違和感を抱くことを防止することができる。ただし、撮像手段が常にマーカ部6を撮像することが可能な姿勢で入力装置8が使用されることが想定できる場合等、他の実施形態においては、第2補正手段は、補正後の第1の姿勢を第3の姿勢と一致させるように補正を行ってもよい。
【0103】
なお、本実施形態では、ゲーム装置3は、第1補正処理と第2補正処理との両方を実行するが、他の実施形態においては、第1補正処理と第2補正処理とのいずれか一方のみを実行するようにしてもよい。また、本実施形態においては、ゲーム装置3は、第1補正処理を先に行い、第2補正処理を後に行うこととするが、第1補正処理と第2補正処理とのいずれを先に行うようにしてもよい。
【0104】
以上のように、本実施形態によれば、ジャイロセンサ55および56によって検知された角速度から算出される入力装置8の姿勢を、加速度センサ37によって検知された加速度を用いて補正し、また、撮像手段による撮像画像を用いて補正する。これによって、ジャイロセンサから算出される姿勢の誤差を減少することができ、入力装置8の姿勢をより正確に算出することができる。
【0105】
なお、加速度センサ37の検出結果からは、重力方向を軸とした回転(ヨー方向の回転)を検知することはできないので、第1補正手段による補正は、ヨー方向に関しては行うことができない。しかし、加速度センサ37の検出結果を用いた補正は、入力装置8の姿勢がどのような姿勢であっても(常に加速度を検出することができるので)可能であるという特長を有する。一方、入力装置8の撮像方向にマーカ部6がなければマーカ座標が検出されないので、第2補正手段による補正は、入力装置8の姿勢によっては行うことができない。しかし、撮像画像を用いた補正は、姿勢(特にロール方向の姿勢)を正確に算出することができるという特長を有する。本実施形態においては、このように特長の異なる2種類の補正を行うことによって、入力装置8の姿勢をより正確に算出することができる。
【0106】
[ゲーム装置3における処理の詳細]
次に、ゲーム装置3において実行される処理の詳細について説明する。まず、ゲーム装置3における処理において用いられる主なデータについて図13を用いて説明する。図13は、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図13に示すように、ゲーム装置3のメインメモリには、ゲームプログラム60、操作データ62、およびゲーム処理用データ67が記憶される。なお、メインメモリには、図13に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【0107】
ゲームプログラム60は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。ゲームプログラム60には、座標算出プログラム61が含まれる。座標算出プログラム61は、入力装置8の姿勢を算出し、算出された姿勢に基づいて(テレビ2の画面上における)2次元座標を算出する処理を実行するためのプログラムである。
【0108】
操作データ62は、コントローラ5からゲーム装置3へ送信されてくる操作データである。上述したように、コントローラ5からゲーム装置3へ1/200秒に1回の割合で操作データが送信されるので、メインメモリに記憶される操作データ62はこの割合で更新される。本実施形態においては、メインメモリには、最新の(最後に取得された)操作データのみが記憶されればよい。
【0109】
操作データ62には、角速度データ63、加速度データ64、マーカ座標データ65、および操作ボタンデータ66が含まれる。角速度データ63は、ジャイロセンサユニット7のジャイロセンサ55および56によって検出された角速度を示すデータである。ここでは、角速度データ63は、図3に示すXYZの3軸回りのそれぞれの角速度を示す。また、加速度データ64は、加速度センサ37によって検出された加速度(加速度ベクトル)を示すデータである。ここでは、加速度データ64は、図3に示すXYZの3軸の方向に関する加速度を各成分とする3次元の加速度ベクトルVa1を示す。また、本実施形態においては、コントローラ5が静止している状態で加速度センサ37が検出する加速度ベクトルVa1の大きさを“1”とする。つまり、加速度センサ37によって検出される重力加速度の大きさは“1”である。
【0110】
マーカ座標データ65は、撮像情報演算部35の画像処理回路41によって算出される座標、すなわち上記マーカ座標を示すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための2次元座標系(図17に示すx’y’座標系)で表現される。なお、撮像素子40によって2つのマーカ6Rおよび6Lが撮像される場合には、2つのマーカ座標が算出される。一方、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lのいずれか一方が位置しない場合には、撮像素子40によって1つのマーカのみが撮像され、1つのマーカ座標のみが算出される。また、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lの両方が位置しない場合には、撮像素子40によってマーカが撮像されず、マーカ座標は算出されない。したがって、マーカ座標データ65は、2つのマーカ座標を示す場合もあるし、1つのマーカ座標を示す場合もあるし、マーカ座標がないことを示す場合もある。
【0111】
操作ボタンデータ66は、各操作ボタン32a〜32iに対する入力状態を示すデータである。
【0112】
ゲーム処理用データ67は、後述するゲーム処理(図14)において用いられるデータである。ゲーム処理用データ67は、第1姿勢データ68、加速度大きさデータ69、補正度データ70、補正量ベクトルデータ71、補正行列データ72、ロール姿勢成分データ73、ヨー姿勢成分データ74、ピッチ姿勢成分データ75、第3姿勢データ76、仮想面座標データ77、はみ出しベクトルデータ78、カメラ向きデータ79、カメラ位置データ80、およびカーソル位置データ81を含む。なお、図13に示すデータの他、ゲーム処理用データ67は、ゲーム処理において用いられる各種データ(ゲームパラメータを示すデータ等)を含む。
【0113】
第1姿勢データ68は、角速度データ63を用いて算出される上記第1の姿勢を示すデータである。本実施形態では、第1の姿勢は、以下の式(1)に示す3×3の行列M1で表現される。
【数1】

上記行列M1は、所定の基準姿勢から現在の入力装置8の姿勢への回転を表す回転行列である。以下では、第1の姿勢を示す行列M1を、「第1姿勢行列M1」と呼ぶ。なお、第1姿勢行列M1により表される第1の姿勢は、入力装置8が存在する空間の所定位置を基準としたxyz座標系(上記空間座標系)における姿勢である。ここでは、xyz座標系は、入力装置8がマーカ部6の正面に位置することを前提とし、入力装置8の位置からマーカ部6を向く方向をz軸正方向とし、鉛直上向き(重力方向の逆方向)をy軸正方向とし、入力装置8の位置からマーカ部6を向いた場合の左方向をx軸正方向とした座標系であるとする。ここでは、上記所定の基準姿勢は、マーカ部6の正面に位置する入力装置8の撮像方向がマーカ部6の中央を向き、かつ、コントローラ5のボタン面が鉛直上向きとなる姿勢(すなわち、入力装置8を基準としたX軸、Y軸、Z軸が、それぞれx軸、y軸、z軸の向きと一致する姿勢)であるとする。なお、本実施形態では、行列を用いて第1の姿勢を表現することとしたが、他の実施形態においては、第1の姿勢は、3次のベクトルまたは3つの角度によって表現されてもよい。
【0114】
加速度大きさデータ69は、加速度データ64により示される加速度ベクトルVa1の大きさ(長さ)Lを示すデータである。
【0115】
補正度データ70は、第2の姿勢を用いて第1の姿勢を補正する度合(補正度A)を示すデータである。補正度Aは、0≦A≦C1(C1は、0<C1≦1の所定の定数)の範囲を取り得る値である。詳細は後述するが、補正後の第1の姿勢は、補正度Aの値が大きいほど第2の姿勢に近くなる。
【0116】
補正量ベクトルデータ71は、第1の姿勢を補正する補正量を示すベクトル(図9に示すベクトルv3。以下、補正量ベクトルと呼ぶ。)を示すデータである。補正量ベクトルVgは、上記加速度ベクトルVa1を上記xyz座標系で表したベクトルVa2と、上記補正度Aとに基づいて算出される。
【0117】
補正行列データ72は、第1の姿勢を補正するために用いる回転行列(補正行列と呼ぶ)Maを示すデータである。つまり、第1補正処理においては、第1の姿勢を表す第1姿勢行列M1に補正行列Maを掛けることで第1の姿勢が補正される。補正行列Maは、上記ベクトルVa2と上記補正量ベクトルVgとに基づいて算出される。
【0118】
ロール姿勢成分データ73は、上記撮像対象の画像から算出される第3の姿勢に含まれる姿勢成分のうち、ロール方向に関する姿勢成分(ロール姿勢成分)M3rを示すデータである。また、ヨー姿勢成分データ74は、上記第3の姿勢に含まれる姿勢成分のうち、ヨー方向に関する姿勢成分(ヨー姿勢成分)M3yを示すデータであり、ピッチ姿勢成分データ75は、上記第3の姿勢に含まれる姿勢成分のうち、ピッチ方向に関する姿勢成分(ピッチ姿勢成分)M3pを示すデータである。なお、ここで言うロール方向、ヨー方向、およびピッチ方向とは、入力装置8の撮像方向(Z軸正方向)を基準とした場合の回転方向である。本実施形態においては、各姿勢成分M3r、M3y、およびM3pは、第1の姿勢と同様、3×3の行列で表現される。
【0119】
第3姿勢データ76は、上記撮像対象の画像から算出される第3の姿勢を示すデータである。本実施形態では、第3の姿勢は、第1の姿勢と同様、3×3の行列M3で表現される。以下では、第3の姿勢を示す行列M3を「第3姿勢行列M3」と呼ぶ。本実施形態では、入力装置8から操作データとしてマーカ座標データが送信されてくるので、第3姿勢行列M3は、マーカ座標データ65に基づいて算出される。具体的には、第3姿勢行列M3は、上記各姿勢成分M3r、M3y、およびM3pを合成することによって得られる。
【0120】
仮想面座標データ77は、所定の仮想空間内における所定の平面(図18に示す平面Q)上の位置を示す2次元座標(「仮想面座標」と呼ぶ)を示すデータである。仮想面座標は、入力装置8の姿勢に基づいて算出される。本実施形態においては、この仮想面座標がゲーム処理に用いられ、表示対象(ゲームマップやWebページ等)のうちでテレビ2の画面に表示される表示範囲は仮想面座標に基づいて決定される。
【0121】
はみ出しベクトルデータ78は、上記平面Qにおいて、仮想面座標が所定の領域(図23に示す領域Ar)からはみ出している方向および量を表すベクトル(「はみ出しベクトル」と呼ぶ)を示すデータである(図23参照)。本実施形態においては、画面に表示すべき表示範囲は上記はみ出しベクトルに基づいて決定される。
【0122】
カメラ向きデータ79は、仮想カメラの向き(姿勢)を示すデータである。また、カメラ位置データ80は、上記仮想空間における仮想カメラの位置を示すデータである。ここで、本実施形態においては、仮想空間(上記平面Qが配置される仮想空間とは異なる)に表示対象および仮想カメラが設定され、当該仮想カメラを用いる方法で画像が生成される。そのため、テレビ2の画面に表示される表示範囲は、仮想カメラの位置および向きにより決定される。なお、本実施形態においては、仮想カメラの向き(姿勢)は、入力装置8の第1の姿勢と同様、3×3の回転行列によって表される。ただし、他の実施形態においては、仮想カメラの姿勢は、3次のベクトルまたは3つの角度によって表現されてもよい。
【0123】
カーソル位置データ81は、テレビ2の画面上におけるカーソルの位置を示すデータである。本実施形態においては、上記仮想面座標に基づいて画面上の位置を表す座標(画面座標)が算出され、当該位置にカーソルが表示される。つまり、カーソル位置データ81は、仮想面座標に基づいて算出される画面座標を示す。
【0124】
次に、ゲーム装置3において行われる処理の詳細を、図14〜図17を用いて説明する。図14は、ゲーム装置3において実行される処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図14に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【0125】
まず、ステップS1において、CPU10は、ゲームに関する初期化処理を実行する。この初期化処理においては、ゲーム処理に用いられる各種パラメータの値が初期化されたり、仮想のゲーム空間が構築されたり、プレイヤオブジェクトや他のオブジェクトがゲーム空間の初期位置に配置されたりする。以上のステップS1の次にステップS2の処理が実行される。
【0126】
ステップS2において、CPU10は、初期姿勢設定処理が実行される。具体的には、プレイヤが所定の操作(例えば、Aボタン32dを押下する操作)を行ったことに応じて、入力装置8の第1の姿勢の初期姿勢として所定の値が設定される。ここでは、基準となる姿勢は、Z軸が鉛直方向と平行となり、かつ、入力装置8の撮像方向がマーカ部6の中央(マーカ6Rおよび6Lの中央)を向く姿勢としているので、プレイヤは、初期姿勢が上記基準となる姿勢となるように入力装置8を把持した状態で、上記所定の操作を行うことが望ましいが、入力装置が静止状態に近く、かつマーカ部を撮像可能であれば、初期姿勢を算出することが可能である。CPU10は、所定の操作が行われると、上記初期姿勢を表す行列を示すデータを第1姿勢データとしてメインメモリに記憶する。以上のステップS2の後、ステップS3〜S9の処理ループが、ゲームが実行される間繰り返し実行される。なお、1回の当該処理ループは、1フレーム時間(例えば1/60秒)に1回の割合で実行される。
【0127】
なお、本実施形態では、初期姿勢設定処理(ステップS2)は、ゲーム開始前(ステップS3〜S9の処理ループが実行される前)に1回実行されるのみであるとしたが、他の実施形態においては、ゲーム中における任意のタイミングで初期姿勢設定処理が実行されるようにしてもよい。すなわち、CPU10は、ゲーム中においてプレイヤが上記所定の操作を行ったことに応じて初期姿勢設定処理を実行するようにしてもよい。
【0128】
ステップS3において、CPU10は操作データを取得する。すなわち、コントローラ5から送信されてくる操作データが無線コントローラモジュール19を介して受信される。そして、受信された操作データに含まれる角速度データ、加速度データ、マーカ座標データ、操作ボタンデータがそれぞれメインメモリに記憶される。ステップS3の次にステップS4の処理が実行される。
【0129】
ステップS4において、CPU10は、メインメモリに記憶されている角速度データ63に基づいて第1の姿勢を算出する。入力装置8の姿勢を角速度から算出する方法はどのような方法であってもよいが、本実施形態においては、第1の姿勢は、前回の第1の姿勢(前回の処理ループにおいて算出された第1の姿勢)と、今回の角速度(今回の処理ループにおいて取得された角速度)とを用いて算出される。具体的には、CPU10は、前回の第1の姿勢を今回の角速度で単位時間分回転させた姿勢を、第1の姿勢とする。なお、前回の第1の姿勢は、メインメモリに記憶されている第1姿勢データ68により示され、今回の角速度は、メインメモリに記憶されている角速度データ63により示されている。ステップS4で算出された姿勢(3×3の行列)を示すデータが、第1姿勢データ68としてメインメモリに新たに記憶される。上記ステップS4の次にステップS5の処理が実行される。
【0130】
ステップS5において、CPU10は前述した第1補正処理を実行する。第1補正処理は、加速度データを用いて第1の姿勢を補正する処理である。以下、図15を参照して、第1補正処理の詳細を説明する。
【0131】
図15は、図14に示す第1補正処理(ステップS5)の流れを示すフローチャートである。第1補正処理においては、まずステップS11において、CPU10は、加速度センサ37によって検出された加速度の大きさLを算出する。すなわち、メインメモリに記憶されている加速度データ64を読み出し、当該加速度データ64により示される加速度ベクトルVa1について大きさLを算出する。算出された大きさLを示すデータは加速度大きさデータ69としてメインメモリに記憶される。ステップS11の次にステップS12の処理が実行される。
【0132】
ステップS12において、CPU10は、加速度センサ37によって検出された加速度の大きさが0であるか否かを判定する。すなわち、メインメモリに記憶されている加速度大きさデータ69を読み出し、当該加速度大きさデータ69により示される大きさLが0であるか否かを判定する。ステップS12の判定結果が否定である場合、ステップS13の処理が実行される。一方、ステップS12の判定結果が肯定である場合、以降のステップS13〜S21の処理がスキップされて、CPU10は第1補正処理を終了する。このように、本実施形態においては、加速度センサ37によって検出された加速度の大きさが0である場合には、当該加速度を用いた補正が行われない。これは、加速度の大きさが0である場合には加速度センサ37の検出結果から重力方向を算出できないということ、および、加速度ベクトルの大きさが0であれば以降のステップS13〜S21の処理が困難であることが理由である。
【0133】
ステップS13において、CPU10は、加速度センサ37によって検出された加速度ベクトルVa1を正規化する。すなわち、メインメモリに記憶されている加速度データ64を読み出し、当該加速度データ64により示される加速度ベクトルVa1を、大きさが1となるように補正する。CPU10は、正規化された加速度ベクトルVa1を示すデータをメインメモリに記憶しておく。ステップS13の次にステップS14の処理が実行される。
【0134】
ステップS14において、CPU10は、第1補正処理において第1の姿勢を補正する度合を示す上記補正度Aを算出する。補正度Aは、正規化される前の加速度ベクトルVa1の大きさLに基づいて算出される。具体的には、CPU10は、メインメモリに記憶されている加速度大きさデータ69を読み出す。そして、当該加速度大きさデータ69により示される大きさLを用いて、次の式(2)に従って補正度Aを算出する。
A=|L−1| …(2)
上式(2)で算出された補正度Aを示すデータは、補正度データ70としてメインメモリに記憶される。なお、上式(2)で算出された補正度Aは、最終的な値ではない演算中の値であって、以降のステップS16で値が変換されることによって、最終的な補正度Aの値が得られる。ステップS14の次にステップS15の処理が実行される。
【0135】
ステップS15において、CPU10は、ステップS14で算出された補正度Aが所定値Rよりも小さいか否かを判定する。所定値Rは、予め定められており、例えば0.4に設定される。ここで、上述したように、本実施形態においては、加速度センサ37によって検出される重力加速度の大きさは“1”であり、また、補正度Aは加速度ベクトルVa1の大きさLと“1”との差の絶対値である(上式(2))。したがって、補正度Aが所定値R以上である場合とは、加速度ベクトルVa1の大きさLが重力加速度の大きさから所定値R以上離れている場合である。ステップS15の判定結果が肯定である場合、ステップS16の処理が実行される。一方、ステップS15の判定結果が否定である場合、以降のステップS16〜S21の処理がスキップされて、CPU10は第1補正処理を終了する。
【0136】
上記のように、本実施形態では、加速度センサ37によって検出される加速度の大きさLと重力加速度の大きさ(=1)との差が所定の基準(所定値R)よりも小さい場合にのみ補正が行われ、当該大きさLと重力加速度の大きさとの差が所定の基準以上である場合には補正が行われない。ここで、入力装置8が動かされている状態では、重力加速度以外に、入力装置8が動かされることによって生じる慣性による加速度が加速度センサ37によって検出されるので、検出される加速度ベクトルVa1の大きさLが“1”とは異なる値となり、入力装置8が激しく動かされている場合には、大きさLが“1”から大きく離れた値となる。したがって、上記大きさLと重力加速度の大きさとの差が所定の基準以上である場合とは、入力装置8が激しく動かされている場合であると推測される。一方、入力装置8が激しく動かされている場合には、加速度センサ37によって検出される加速度ベクトルVa1に重力加速度以外の成分(上記慣性による加速度の成分)が多く含まれているため、加速度ベクトルVa1の値は、重力方向を示す値としては信頼できないものと推測される。したがって、上記ステップS15の判定処理は、入力装置8が激しく動かされているか否か、換言すれば、加速度ベクトルVa1の値が重力方向を示す値としては信頼できるものであるか否かを判定する処理である。本実施形態においては、上記ステップS15の判定処理によって、加速度ベクトルVa1の値が重力方向を示す値としては信頼できない場合には補正を行わず、加速度ベクトルVa1の値が重力方向を示す値としては信頼できる場合にのみ補正を行うようにしている。これによって、重力方向を示す値としては信頼できない加速度ベクトルVa1を用いて第1の姿勢に対する補正が行われた結果、第1の姿勢が正しく補正されなくなることを防止することができる。
【0137】
ステップS16において、CPU10は、補正度Aの値を変換する。本実施形態では、補正度Aを、検出された加速度ベクトルVa1の大きさLが重力加速度の大きさに近いほど1に近くなるように、補正度Aを変換する。具体的には、CPU10は、メインメモリに記憶されている補正度データ70を読み出し、当該補正度データ70により示される補正度Aを、以下の式(3)〜(5)に従って変換する。
A2=1−(A1/R) …(3)
A3=A2×A2 …(4)
A4=A3×C1 …(5)
上式(3)〜(5)において、変数A1は変換前の補正度(メインメモリに現在記憶されている補正度データ70により示される値)であり、変数A4がステップS16において最終的に変換される補正度である。上式(3)は、変換前の補正度A1の大きさが重力加速度の大きさ(=1)に近いほど1に近くなるように変換後の補正度A2を得るための式である。上式(4)は、変換前の補正度A2が1に近いほど大きい重みが付されるように変換後の補正度A3を得るための式である。上式(5)は、補正量の大きさを調整するための式である。すなわち、定数C1は、定数C1の値が大きいほど補正量は大きくなる。定数C1は、予め定められ、0<C1≦1の範囲(例えば0.03)で設定される。以上の式(3)〜(5)による変換によって得られた補正度A4を示すデータが、新たな補正度データ70としてメインメモリに記憶される。上記ステップS16の次にステップS17の処理が実行される。
【0138】
なお、本実施形態においては、上式(3)〜(5)による変換を行ったが、他の実施形態においては、上式(3)〜(5)のうち一部または全部の変換を省略してもよい。ただし、式の省略等によって、加速度ベクトルの値が信頼できるほど補正度の値が0に近くなるような演算となる場合には、後述するステップS18で用いる式(7)において、加速度ベクトルVa2と重力方向ベクトル(0,−1,0)とを入れ替える必要がある。
【0139】
ステップS17において、CPU10は、XYZ座標系で表現される加速度ベクトルVa1をxyz座標系の値Va2へと変換する。xyz座標系における加速度ベクトルVa2は、正規化された加速度ベクトルVa1を、前回のフレームにおいて得られた第1の姿勢を表す第1姿勢行列M1を用いて変換することによって算出される。すなわち、CPU10は、ステップS13においてメインメモリに記憶された(正規化された)加速度ベクトルVa1のデータと、第1姿勢データ68とを読み出す。そして、当該加速度ベクトルVa1と当該第1姿勢データ68により示される第1姿勢行列M1とを用いて、xyz座標系における加速度ベクトルVa2を算出する。より具体的には、正規化された加速度ベクトルVa1=(nx,ny,nz)とし、第1姿勢行列M1の各要素を上式(1)に示す変数とし、xyz座標系で表現される加速度ベクトルVa2=(vx,vy,vz)とすると、加速度ベクトルVa2は次の式(6)に従って算出される。
vx=Xx×nx+Yx×ny+Zx×nz
vy=Xy×nx+Yy×ny+Zy×nz
vz=Xz×nx+Yz×ny+Zz×nz …(6)
上式(6)に示されるように、加速度ベクトルVa2は、回転行列である第1姿勢行列M1によって加速度ベクトルVa1を回転させることによって得ることができる。ステップS17において算出された加速度ベクトルVa2はメインメモリに記憶される。上記ステップS17の次にステップS18の処理が実行される。
【0140】
ステップS18において、CPU10は、xyz座標系で表現される加速度ベクトルVa2と補正度Aとを用いて補正量ベクトルVgを算出する。補正量ベクトルVgは、上記ステップS16による変換後の補正度と、xyz座標系の鉛直下方向(重力方向)を示すベクトル(0,−1,0)とを用いて算出される。具体的には、CPU10は、メインメモリに記憶されている補正度データ70を読み出し、当該補正度データ70により示される補正度Aを用いて、以下の式(7)に従って補正量ベクトルVg=(gx,gy,gz)を算出する。
gx=(0−vx)×A+vx
gy=(−1−vy)×A+vy
gz=(0−vz)×A+vz …(7)
上式(7)に示されるように、補正量ベクトルVgは、加速度ベクトルVa2の終点から重力方向ベクトル(0,−1,0)の終点までを結ぶ線分をA:(1−A)に内分する点を終点とするベクトルである。したがって、補正量ベクトルVgは、補正度Aの値が大きいほど、重力方向ベクトルに近づくこととなる。CPU10は、上式(7)によって算出された補正量ベクトルVgを示すデータを、補正量ベクトルデータ71としてメインメモリに記憶する。上記ステップS18の次にステップS19の処理が実行される。
【0141】
ステップS19において、CPU10は、上記ステップS18で算出された補正量ベクトルVgを正規化する。すなわち、メインメモリに記憶されている補正量ベクトルデータ71を読み出し、当該補正量ベクトルデータ71により示されるベクトルを正規化する。そして、正規化されたベクトルを示すデータを新たな補正量ベクトルデータ71としてメインメモリに記憶する。なお、上記ステップS19で算出された補正量ベクトルVgが、図9に示すベクトルv3に相当する。上記ステップS19の次にステップS20の処理が実行される。
【0142】
ステップS20において、CPU10は、第1の姿勢を補正するための補正行列Maを算出する。補正行列Maは、xyz座標系で表現される加速度ベクトルVa2と、ステップS19において正規化された補正量ベクトルVgとに基づいて算出される。具体的には、CPU10は、ステップS17でメインメモリに記憶された加速度ベクトルVa2と、補正量ベクトルデータ71を読み出す。そして、上記加速度ベクトルVa2を補正量ベクトルVgと一致するように回転させる回転行列を算出し、算出された回転行列を補正行列Maとする。つまり、補正行列Maは、図9に示す角度Δθの回転を行う回転行列である。ステップS20で算出された補正行列Maを示すデータは、補正行列データ72としてメインメモリに記憶される。上記ステップS20の次にステップS21の処理が実行される。
【0143】
ステップS21において、CPU10は、第1の姿勢を示す第1姿勢行列M1を補正行列Maで補正する。具体的には、CPU10は、メインメモリに記憶されている第1姿勢データ68および補正行列データ72を読み出す。そして、当該第1姿勢データ68により示される第1姿勢行列M1を、当該補正行列データ72により示される補正行列Maによって変換する(第1姿勢行列M1と補正行列Maとの積を算出する)。変換後の第1姿勢行列M1が、補正された第1の姿勢を示すこととなる。つまり、ステップS21の処理は、図10に示すベクトルv1を角度Δθだけ回転させる処理に相当する。CPU10は、変換後の第1姿勢行列M1を示すデータを、新たな第1姿勢データ68としてメインメモリに記憶する。上記ステップS21の後、CPU10は第1補正処理を終了する。
【0144】
以上のように、第1補正処理においては、加速度センサ37によって検出された加速度ベクトルと、重力方向ベクトル(図8に示すベクトルG)との間に補正量ベクトルVgを算出し(ステップS18およびS19)、この補正量ベクトルVgにより表される補正量(補正行列Ma。図9に示す角度Δθ)だけ第1の姿勢を補正した(ステップS21)。これによって、ジャイロセンサ55および56から算出される第1の姿勢(図8に示すベクトルv1または角度θ1)を、加速度センサ37によって決められる第2の姿勢(図8に示す角度θ2)に近づける補正を行うことができる。かかる補正を行うことにより、より正確な値となるように第1の姿勢を補正することができる。
【0145】
また、第1補正処理においては、加速度ベクトルVa1が信頼できる場合ほど(加速度ベクトルVa1の大きさLと重力加速度の大きさとの差が小さいほど)、補正度Aの値が大きくなり、その結果、第1の姿勢は第2の姿勢により近づくように補正される。つまり、加速度ベクトルVa1が信頼できる場合ほど、補正量が大きくなり、補正後の第1の姿勢に第2の姿勢が強く反映されることとなる。このように、本実施形態によれば、加速度センサベクトルVa1の信頼度に応じて第1補正処理における補正量が決まるので、補正量を当該信頼度に応じて適切に決定することができ、ひいては入力装置8の姿勢をより正確に算出することができる。
【0146】
なお、本実施形態においては、上記ステップS18で算出される補正量ベクトルVgは、加速度ベクトルVa2の終点から重力方向ベクトルの終点までを結ぶ線分をA:(1−A)に内分する点を終点とするベクトルであって、補正度Aの値が大きいほど重力方向ベクトルに近づくベクトルであった。ここで、他の実施形態において、補正度Aの算出方法によっては、補正量ベクトルVgは、重力方向ベクトルの終点と加速度ベクトルVa2の終点とを(1−A):Aに内分する点を終点とするベクトルであって、補正度Aの値が小さいほど重力方向ベクトルに近づくベクトルとしてもよい。このとき、上記ステップS20においては、上記補正量ベクトルVgを重力方向と一致するように回転させる回転行列を算出し、算出された回転行列を補正行列Maとすればよい。これによっても、本実施形態と同様に補正を行うことができる。
【0147】
図14の説明に戻り、ステップS5の次のステップS6において、CPU10は、前述した第2補正処理を実行する。第2補正処理は、マーカ座標データを用いて第1の姿勢を補正する処理である。以下、図16を参照して、第2補正処理の詳細を説明する。
【0148】
図16は、図14に示す第2補正処理(ステップS6)の流れを示すフローチャートである。第1補正処理においては、まずステップS31において、CPU10は、入力装置8の撮像手段(撮像素子40)によってマーカ部6が撮像されているか否かを判定する。ステップS31の判定は、メインメモリに記憶されているマーカ座標データ65を参照することによって行うことができる。ここでは、マーカ座標データ65が2つのマーカ座標を示す場合、マーカ部6が撮像されていると判定し、マーカ座標データ65が1つのマーカ座標のみを示す場合、または、マーカ座標がないことを示す場合、マーカ部6が撮像されていないと判定する。ステップS31の判定結果が肯定である場合、以降のステップS32〜S37の処理が実行される。一方、ステップS31の判定結果が否定である場合、以降のステップS32〜S37の処理がスキップされ、CPU10は、第2補正処理を終了する。このように、撮像素子40によってマーカ部6が撮像されていない場合には、撮像素子40から得られるデータを用いて入力装置8の姿勢を算出することができないので、この場合には第2補正処理において補正は行われない。
【0149】
ステップS32において、CPU10は、マーカ座標データに基づいてロール姿勢成分M3rを算出する。ロール姿勢成分M3rは、撮像画像内でのマーカ部6の向きに基づいて、すなわち、マーカ座標データ65により示される2つのマーカ座標を結ぶ線の傾きに基づいて算出される。以下、図17を参照して、ロール姿勢成分M3rの算出方法の例を説明する。
【0150】
図17は、撮像画像に対応する2次元座標を示す図である。図17に示されるように、本実施形態においては、撮像画像における位置を表すための2次元座標系(x’y’座標系)は、撮像画像の範囲を−1≦x’≦1、−1≦y’≦1で表すものとする。x’y’座標系は、入力装置8が基準姿勢(入力装置8の撮像方向がマーカ部6の中央を向き、かつ、コントローラ5のボタン面が鉛直上向きとなる姿勢)にある場合に、撮像画像において鉛直下向きがy’軸正方向となり、右向きがx’軸正方向となるように設定されるものとする。また、図17に示す点P1および点P2はマーカ座標の位置を示し、点P3は点P1と点P2との中点である。図17に示すベクトルv10は、点P1を始点とし、点P2を終点とするベクトルである。
【0151】
ロール姿勢成分M3rを算出するために、CPU10はまず、マーカ座標データ65を読み出し、当該マーカ座標データ65により示される2つのマーカ座標から上記ベクトルv10を算出する。さらに、ベクトルv10を正規化したベクトル(hx,hy)を算出する。このベクトル(hx,hy)は、入力装置8が上記基準姿勢にある場合にx軸正方向を向き、入力装置8のロール方向の回転に応じて向きが変化する。ベクトル(hx,hy)がロール方向の姿勢に対応しているので、ロール姿勢成分M3rは、このベクトル(hx,hy)に基づいて算出することができる。具体的には、CPU10は、次の式(8)に従ってロール姿勢成分M3rを算出する。
【数2】

上式(8)によって算出された行列を示すデータは、ロール姿勢成分データ73としてメインメモリに記憶される。ステップS32の次にステップS33の処理が実行される。
【0152】
ステップS33において、CPU10は、マーカ座標データに基づいてヨー姿勢成分M3yを算出する。ヨー姿勢成分M3yは、撮像画像内でのマーカ部6の向きおよび位置に基づいて算出される。以下、図17を参照して、ヨー姿勢成分M3yの算出方法の例を説明する。
【0153】
まず、CPU10は、マーカ座標データ65を読み出し、当該マーカ座標データ65により示される2つのマーカ座標の中点を算出する。本実施形態では、マーカ部6の位置として当該中点の位置を用いる。さらに、CPU10は、算出された中点の座標を、x’y’座標系の原点を中心として、入力装置8のロール方向に関する回転角度だけ(入力装置8の回転方向とは逆方向に)回転させた座標(px,py)を算出する。換言すれば、中点の座標は、原点を中心として、上記ベクトル(hx,hy)がx軸正方向を向くように回転される。入力装置8が水平方向(x軸方向)に関してマーカ部6と同じ位置(すなわち、マーカ部6の正面の位置)にあるとすれば、上記のようにして得られた回転後の座標(px,py)から、ヨー方向に関する姿勢を算出することができる。
【0154】
次に、CPU10は、上記中点の回転後の座標(px,py)と、マーカ部6がx’軸方向の端に位置する場合のヨー方向の角度(限界角度)θy’とに基づいて、ヨー方向に関する回転角度θyを算出する。ここで、上記限界角度θy’と、上記限界角度θy1となる場合における上記中点の回転後のx座標値px’とは予め求めておくことができる。したがって、pxとpx’との比が、θyとθy’との比に等しくなることを用いて、ヨー方向に関する回転角度θyを算出することができる。具体的には、ヨー方向に関する回転角度θyは、次の式(9)によって算出することができる。
θy=px×θy’/px’ …(9)
なお、マーカ部6の水平方向の長さを無視する場合、上記限界角度θy’は、コントローラ5の画角の1/2とし、上記px’の値は“1”とすることができる。
【0155】
最後に、CPU10は、上式(9)により算出された角度θyの回転を行う回転行列をヨー姿勢成分M3yとして算出する。具体的には、ヨー姿勢成分M3yは次の式(10)によって算出される。
【数3】

上式(10)によって算出された行列を示すデータが、ヨー姿勢成分データ74としてメインメモリに記憶される。以上のステップS33の次にステップS34の処理が実行される。
【0156】
ステップS34において、CPU10は、ロール姿勢成分M3rとヨー姿勢成分M3yとを合成する。すなわち、メインメモリからロール姿勢成分データ73およびヨー姿勢成分データ74を読み出し、各データ73および74により示されるロール姿勢成分M3rとヨー姿勢成分M3yとを積算する。ステップS34の次にステップS35の処理が実行される。
【0157】
ステップS35において、CPU10は、第1の姿勢に基づいてピッチ姿勢成分M3pを算出する。なお、本実施形態の処理とは異なるが、ピッチ姿勢成分M3pについても、ヨー姿勢成分M3yと同様の方法で、上記座標(px,py)のy座標値に基づいて算出することが可能である。ただし、上記座標(px,py)を用いてヨー方向(ピッチ方向)の姿勢を算出する方法は、入力装置8が水平方向(ピッチ方向の場合は鉛直方向)に関してマーカ部6と同じ位置にあることを前提として成り立つ方法である。本実施形態のゲームシステム1においては、プレイヤは、水平方向に関してマーカ部6(テレビ2)のほぼ正面の位置で入力装置8を操作すると考えられるので、「入力装置8が水平方向に関してマーカ部6と同じ位置にある」ことを前提して、上記ステップS33の方法によってヨー方向の姿勢を算出することが可能である。一方、プレイヤは、立って入力装置8を操作することも座って入力装置8を操作することも考えられ、また、マーカ部6の位置もテレビ2の画面の上側に配置されることも下側に配置されることも考えられる。そのため、本実施形態のゲームシステム1においては、「入力装置8が鉛直方向に関してマーカ部6と同じ位置にある」ことを必ずしも前提にできないため、上記座標(px,py)を用いてピッチ方向の姿勢を算出することを行わないようにしてもよい。
【0158】
そこで、本実施形態においては、ピッチ姿勢成分M3pについては、第1の姿勢をそのまま用いることとする(したがって、第2補正処理においては、ピッチ方向に関しては補正が行われない)。具体的には、CPU10は、メインメモリから第1姿勢データ68を読み出す。そして、第1姿勢データ68により示される第1姿勢行列M1の各要素を用いて、ピッチ方向に関する回転角度θpを、次の式(11)に従って算出する。
cos(θp)=(Zx×Zx+Zz×Zz)1/2
sin(θp)=Zy …(11)
上式(11)における変数Zx,Zy,Zzは、上式(1)において示した第1姿勢行列M1の要素である。なお、ここで用いられる第1姿勢行列M1は、今回の処理ループにおいて第1補正処理が行われた後の第1姿勢行列M1である。さらに、CPU10は、上式(11)で算出したcos(θp)およびsin(θp)を用いて、次の式(12)に従ってピッチ姿勢成分M3pの行列を算出する。
【数4】

上式(12)によって算出された行列を示すデータが、ピッチ姿勢成分データ75としてメインメモリに記憶される。以上のステップS35の次にステップS36の処理が実行される。
【0159】
ステップS36において、CPU10は、ロール方向、ヨー方向、およびピッチ方向の各姿勢成分に基づいて第3の姿勢を算出する。第3の姿勢は、ロール姿勢成分M3rとヨー姿勢成分M3yとの合成結果に、ピッチ姿勢成分M3pをさらに合成することによって得られる。具体的には、CPU10は、メインメモリからピッチ姿勢成分データ75を読み出し、当該ピッチ姿勢成分データ75により示されるピッチ姿勢成分M3pを、ステップS34で算出された行列に積算する。算出された行列を示すデータは、第3姿勢データ76としてメインメモリに記憶される。ステップS36の次にステップS37の処理が実行される。
【0160】
ステップS37において、CPU10は、第3の姿勢を用いて第1の姿勢を補正する。ステップS37における補正は、第1姿勢行列M1を第3姿勢行列M3に所定の割合(下記の定数C2)で近づけることによって行われる。CPU10は、メインメモリから第1姿勢データ68および第3姿勢データ76を読み出す。そして、第1姿勢データ68により示される第1姿勢行列M1と、第3姿勢データ76により示される第3姿勢行列M3とを用いて、次の式(13)に従って補正を行う。
M1=(M3−M1’)×C2+M1’ …(13)
上式(13)において、変数M1’は補正前の第1姿勢行列である。また、定数C2は、0<C2≦1の範囲で予め設定され、例えば0.1に設定される。上式(13)によって算出された補正後の第1姿勢行列M1を示すデータが、新たな第1姿勢データ68としてメインメモリに記憶される。上記ステップS37の後、CPU10は第2補正処理を終了する。
【0161】
以上のように、第2補正処理においては、撮像画像(マーカ座標)から第3の姿勢を算出し、第1の姿勢を第3の姿勢に近づけるように補正することとした。この補正によって、より正確な値となるように第1の姿勢を補正することができる。なお、本実施形態においては、ロール方向およびヨー方向の姿勢についてのみ撮像画像から第3の姿勢を算出したが、上述のように、ピッチ方向についても撮像画像から第3の姿勢を算出することは可能であり、他の実施形態においては、ロール方向、ヨー方向、およびピッチ方向について撮像画像から第3の姿勢を算出してもよい。また、第2補正処理においては、ロール方向、ヨー方向、およびピッチ方向のうち少なくとも1方向について第3の姿勢を算出すればよい。
【0162】
図14の説明に戻り、ステップS6の次のステップS7において、CPU10は、補正後の第1の姿勢に基づいて2次元座標(仮想面座標)を算出する。詳細は後述するが、本実施形態において上記2次元座標が、後述するゲーム処理(ステップS8)においてプレイヤによる入力として用いられる。以下、図18および図19を参照して、ステップS7の詳細を説明する。
【0163】
図18は、所定の仮想空間に入力装置と所定の平面とを仮想的に配置した図である。本実施形態では、図18に示すように、CPU10は、3次元の仮想空間を定義し、入力装置8と所定の平面Qとが仮想的に配置されていると考えて座標の算出を行う。平面Qは、テレビ2の画面に対応するものである。CPU10は、仮想空間において入力装置8のZ軸(図18に示すZ軸ベクトルVZ)の方向が指し示す平面Q上の位置の座標を算出する。すなわち、仮想空間において入力装置8の姿勢を表すZ軸ベクトルVZを延ばした線分と、当該仮想空間における所定平面Qとの交点Rの座標を算出する。なお、「Z軸ベクトルVZを延ばした線分」とは、Z軸ベクトルVZに平行でかつZ軸ベクトルVZを通る線分を意味する。なお、詳細は後述するが、本実施形態では、算出された座標に対応する画面上の位置にカーソル等が表示される。これによって、入力装置8の姿勢に応じて画面上のカーソルの位置が制御され、プレイヤは入力装置8の姿勢を変化させる操作によってカーソルを動かすことが可能となる。
【0164】
なお、図18に示すように、本実施形態では、上記仮想空間の位置を上述した空間座標系(xyz座標系)によって表現するものとする。これによって、入力装置8の姿勢を示すデータとして上記第1姿勢データ68をそのまま用いることができるので、仮想空間における計算を容易に行うことができる。また、平面Q上の位置をX’Y’座標系で表現するものとする。このとき、空間座標系のxy平面に平行となるように平面Qを設定し、空間座標系のx軸と平面QのX’軸が平行となり、空間座標系のy軸と平面QのY’軸が平行となるようにX’Y’座標系を設定する(図18)。
【0165】
また、本実施形態では、プレイヤは入力装置8をテレビ2の画面のほぼ正面の位置で使用する状況を想定し、上記仮想空間において入力装置8の位置は変化しないものとする。すなわち、CPU10は、上記仮想空間において入力装置8の姿勢のみが変化し、入力装置8の位置を変化させずに処理を行う。これによって、入力装置8の姿勢から平面Q上の位置(交点Rの位置)を一義的に決定することができる。
【0166】
次に、平面Q上の位置(交点Rの位置)を算出する方法について詳細に説明する。図19は、図18に示す仮想空間をy軸正方向側から負方向側へ見た図である。図19においては、入力装置8の位置を表す点Sから、当該点Sを平面Qに投影させた点(投影点)Tまでの長さを“L”とする。また、投影点Tから上記交点Rまでの、X’成分に関する長さを“Wx”とする。本実施形態では、上記長さLの値は、所定のタイミング(例えば、ゲーム処理が開始されるタイミング等)でプレイヤによって設定される。メインメモリには、プレイヤによって設定された長さLの値を示すデータ(長さデータと呼ぶ)が記憶される。
【0167】
上記Z軸ベクトルVZは、入力装置8の姿勢(第1の姿勢)を表す第1姿勢行列M1により決められている。すなわち、上記Z軸ベクトルVZは、第1姿勢行列M1の第3行の各要素を順にx成分、y成分、およびz成分とするベクトル(=(Zx,Zy,Zz)である。また、図19から明らかなように、上記長さWxと上記長さLとの比は、Z軸ベクトルVZのx成分(Zx)とZ軸ベクトルVZのz成分(Zz)との比に等しくなるという関係がある。したがって、この関係に基づいて、既知のベクトルVZのx成分Zx、z成分Zz、および既知の長さLから、長さWxを算出することができる。具体的には、次の式(14)によって長さWxを算出することができる。
Wx=L×Zx/Zz …(14)
また、X’成分の長さWxと同様に、投影点Tから交点RまでのY’成分の長さWyは、次の式(15)によって算出することができる。
Wy=L×Zy/Zz …(15)
【0168】
上記長さWxおよびWyが得られれば、平面Q上における交点Rの位置を示す2次元座標を算出することができる。本実施形態では、上記投影点Tの位置をX’Y’座標系の原点とする。このとき、交点Rの2次元座標は(Wx,Wy)となる。
【0169】
ステップS7における具体的な処理を説明すると、CPU10は、まずメインメモリから第1姿勢データ68および長さデータを読み出す。そして、第1姿勢データ68により示される第1姿勢行列M1に含まれるZx、Zy、およびZzと、長さデータにより示される長さLとを上式(14)および(15)に代入することによって上記長さWxおよびWyを算出する。これによって、平面Q上における交点Rの2次元座標(Wx,Wy)が得られたこととなる。CPU10は、仮想面座標データ77として当該2次元座標を示すデータをメインメモリ32に記憶する。ステップS7の次にステップS8の処理が実行される。
【0170】
以上のように、上記ステップS7によれば、入力装置8と所定の平面Qとを配置する仮想空間を設定し、仮想空間において入力装置8の所定軸(Z軸)の方向が指し示す平面Q上の位置の座標を算出することによって、入力装置8の姿勢から2次元座標を得ることができる。
【0171】
なお、上記実施形態においては、長さLをプレイヤが設定することができるようにした。ここで、上式(14)および(15)から明らかなように、長さLの大きさを調整することによって、算出される2次元座標(Wx,Wy)の値を変化させることができる。つまり、長さLの大きさを調整することによって、Z軸ベクトルVZの向きの変化(すなわち、入力装置8の姿勢の変化)に対する2次元座標(Wx,Wy)の変化量を調整することができる。具体的には、長さLの値が大きくなると上記変化量は大きくなる。その結果、入力装置8の姿勢を少し変化させるだけで、カーソルが大きく移動することになる。一方、長さLの値が小さくなると上記変化量は小さくなる。その結果、入力装置8の姿勢を大きく変化させても、カーソルは少ししか移動しないことになる。以上より、上記実施形態においては、長さLをプレイヤに設定させることによって、入力装置8の操作感をプレイヤ自身が調整することができるようになる。例えば、プレイヤは、カーソルを細かく操作することを必要とする場合には長さLを相対的に小さく設定すればよく、カーソルを大きく移動させる操作を必要とする場合には長さLを相対的に大きく設定すればよい。なお、他の実施形態においては、上記Lの長さは、予め定められた定数であってもよい。
【0172】
また、他の実施形態においては、上記Lの長さは、ゲーム装置10が所定の方法で算出するようにしてもよい。例えば、CPU10は、入力装置8からテレビ2の画面までの実際の距離を算出し、算出された距離を長さLとして設定してもよい。上記実際の距離は、例えば、撮像素子40によって撮像された撮像画像内における2つのマーカ6Rおよび6Lの間の長さ、または、マーカ6Rまたは6Lの大きさを用いて算出することができる。さらに、仮想空間における平面Qの位置および大きさと実空間におけるテレビ2の画面の位置および大きさとを対応させるように平面Qを設定すれば(例えば、プレイヤにテレビの画面の大きさを設定させるようにしてもよい)、2次元座標(Wx,Wy)に対応するテレビ2の画面上の位置にカーソルが表示されることとなる。これによれば、入力装置8が指し示す(画面上の)位置にカーソルを表示させることができる。
【0173】
なお、入力装置8を用いて2次元座標を得る方法として、上述したマーカ座標(図13に示すマーカ座標データ65)を用いて2次元座標を得ることができる。すなわち、入力装置8が指し示す位置に応じてマーカ座標が変化するので、入力装置8が指し示す画面上の位置をマーカ座標に基づいて算出することが可能である。したがって、マーカ部6が存在している状況であればマーカ座標を用いて上記2次元座標を算出可能である。しかしながら、マーカ部6が使用できない場合や、撮像素子が備えられていない入力装置では、マーカ部6の撮影によって2次元座標を得ることができない。本実施形態における方法は、入力装置8の撮像素子40がマーカ部6を撮影していない場合でも2次元座標を得ることができるので、マーカ部や撮像素子が無い入力装置においても使うことができるものである。
【0174】
また、本実施形態においては、上記第1および第2補正処理による補正が行われた第1の姿勢に基づいて2次元座標を算出した。ここで、他の実施形態においては、2次元座標は、任意の方法で算出された入力装置8の姿勢に基づいて算出されればよく、上記第1および第2補正処理は行われなくてもよい。
【0175】
また、上記実施形態では、プレイヤが入力装置8のZ軸方向をテレビ2の画面に向けて使用する態様を想定し、入力装置8のZ軸方向がテレビ2の画面(マーカ部6)を向く場合における当該Z軸方向に平面Qを配置した。ただし、上述のように、撮像素子40がマーカ部6を撮影していなくても2次元座標を得ることが可能であるので、プレイヤは、入力装置8のZ軸方向を任意の方向に向けて使用することが可能である。例えば、CPU10は、プレイヤが所定の操作(例えば操作ボタンを押す操作)を行ったことに応じて、当該所定の操作の時点における入力装置8のZ軸方向に上記平面Qを設定してもよい。これによれば、仮想空間内において入力装置8の向きに応じた適切な位置に平面Qを配置することができるので、当該所定の操作の時点において入力装置8がどのような向きであっても2次元座標を算出することができる。すなわち、プレイヤは、入力装置8を任意の方向に向けて使用することができる。
【0176】
なお、本実施形態では、ゲーム装置3は、入力装置8のZ軸方向が水平方向を向く場合に原点(0,0)を取るように2次元座標を算出する方法(第1の方法と呼ぶ)を採用した。ここで、ゲーム装置3は、上記第1の方法に代えて、後述する第2の方法によって2次元座標を算出してもよい。
【0177】
図14の説明に戻り、ステップS7の次のステップS8において、CPU10は、上記2次元座標を用いた表示制御処理を行う。表示制御処理は、表示対象のうちで表示装置(テレビ2)に表示すべき表示範囲を、上記ステップS7で算出される2次元座標に基づいて制御する処理である。表示制御処理は、上記の表示対象を2次元座標に基づいてスクロール等させる処理である。つまり、本実施形態では、ユーザは、入力装置8の姿勢を変える操作によってテレビ2に表示される画面をスクロール等させることができる。また、上記表示対象とはどのようなものであってもよく、例えば、ゲーム空間内に形成されるフィールド(フィールド上に配置されるオブジェクトを含む)や、ゲーム空間を表すマップ等であってもよいし、Webページや電子番組表等であってもよい。
【0178】
また、本実施形態においては、CPU10は、仮想空間に表示対象および仮想カメラを配置し、当該仮想空間内において仮想カメラの向きおよび/または位置を仮想面座標に基づいて変化させることで表示範囲の制御を行うものとする。なお、表示対象が配置される仮想空間は、ステップS7で算出される2次元座標が存在する仮想空間とは異なる空間である。以下では、両者を区別する目的で、上記2次元座標が存在する仮想空間を「第1の仮想空間」と呼び、表示対象が配置される仮想空間を「第2の仮想空間」と呼ぶことがある。
【0179】
なお、表示範囲の制御方法は、仮想面座標に応じて表示範囲を変化させる方法であればどのようなものであってもよい。例えば、CPU10は、仮想カメラでなく表示対象を移動させるようにしてもよい。また、表示範囲の制御方法は、3次元空間において仮想カメラを用いて表示範囲を算出する方法でなくてもよい。例えば、CPU10は、表示対象である2次元平面上に表示範囲を設定し、当該表示範囲を仮想面座標に応じて変化させてもよい。
【0180】
以下、図20を参照して、表示制御処理の詳細を説明する。なお、以下の表示制御処理の説明では、上記ステップS7で算出される2次元座標を、表示画面上の座標(画面座標)と区別する目的で「仮想面座標」と呼ぶ。
【0181】
図20は、図14に示す表示制御処理(ステップS8)の流れを示すフローチャートである。本実施形態における表示制御処理においては、まずステップS41において、カメラ向き制御処理が実行される。カメラ向き制御処理は、仮想面座標に基づいて仮想カメラの向きを制御する処理である。
【0182】
図21は、入力装置8の姿勢と、カメラ向き制御処理によって決められる表示範囲との関係の一例を示す図である。図21においては、入力装置8が基準姿勢(ここでは、入力装置8のZ軸がテレビ2の画面を向く姿勢)である場合、カレンダーの一部が画面に表示されるような表示範囲が設定されるとする(図21における上段参照)。ここで、入力装置8を基準姿勢から右に向け、入力装置8が指し示す位置を画面の右側に外した場合(図21における中段参照)、表示範囲は右向きに変化する(画面に表示される画像は左に移動し、視線がカレンダーに対して左右方向に傾いたような表示となる)。つまり、上記の場合、CPU10は、表示範囲が右に移動するように仮想カメラの向きを制御する。また、入力装置8を基準姿勢から上に向け、入力装置8が指し示す位置を画面の上側に外した場合(図21における下段参照)、表示範囲は上向きに変化する(画像は下に移動し、視線がカレンダーに対して上下方向に傾いたような表示となる)。このように、本実施形態におけるカメラ向き制御処理によれば、ユーザは、入力装置8の向きと仮想カメラの向きとが対応するように仮想カメラを制御することができ、入力装置8の向きをテレビ2の画面から外す方向および量によって、画像をスクロールさせる方向および量を操作することができる。以下、カメラ向き制御処理の詳細を説明する。
【0183】
図22は、図20に示すカメラ向き制御処理(ステップS41)の流れを示すフローチャートである。カメラ向き制御処理においては、まずステップS46において、CPU10は、仮想面座標は所定領域の外にあるか否かを判定する。ここで、所定領域は、上記第1の仮想空間に配置される平面Q上において設定される領域である。図23は、第1の仮想空間に配置される平面Qを示す図である。図23においては、一点鎖線で表される領域Arが上記所定領域である。ここで、CPU10は、仮想面座標に基づいてテレビ2の画面上の位置(後述するカーソル位置)を算出する(後述するステップS43)。画面上の位置は、所定領域Arとテレビ2の画面の領域とが対応するように算出される。例えば、仮想面座標が所定領域Arの縁に位置する場合に、画面上の位置としては画面の端の位置が算出される。つまり、本実施形態において、所定領域Arは、平面Q上においてテレビ2の画面の領域に対応する領域である。なお、所定領域Arはテレビ2の画面の領域に対応することが好ましいが、所定領域Arの縁が画面の領域の縁に厳密に対応している必要はない。したがって、所定領域Arは長方形に限らず、例えば楕円形あるいは円形であってもよい。また、他の実施形態においては所定領域Arはどのように設定されてもよい。
【0184】
本実施形態においては、所定領域Arは予め定められているものとする。ただし、所定領域Arは、ユーザの指示あるいはゲーム状況等に応じて可変としてもよい。例えば、CPU10は、所定領域Arとテレビ2の画面の領域とが対応するように、第1の仮想空間における入力装置8から平面Qまでの長さL(図19参照)に応じて所定領域Arを変化させてもよい。
【0185】
CPU10は、予め定められた所定領域Arを示すデータと仮想面座標データ77とをメインメモリから読み出し、仮想面座標と所定領域Arとの位置関係を判別することで上記ステップS46の判定を行う。ステップS46の判定結果が肯定である場合、ステップS47およびS48の処理が実行される。一方、ステップS46の判定結果が否定である場合、後述するステップS49の処理が実行される。
【0186】
ステップS47において、CPU10ははみ出しベクトルを算出する。はみ出しベクトルは、上記平面Qにおいて、仮想面座標が所定領域Arからはみ出している方向および量を表すベクトルである。以下、図23を参照して、はみ出しベクトルの算出方法を説明する。図23において、点Rは仮想面座標が示す位置である。また、点P10は、上述の投影点Tであり、平面Q上のX’Y’座標系の原点である。このとき、はみ出しベクトルVdは、点P10から点Rまでを結ぶ線分と所定領域Arとの交点P11を始点とし、点Rを終点とするベクトルである。したがって、はみ出しベクトルVdは、所定領域Arを表す式と仮想面座標とに基づいて算出することができる。具体的には、CPU10は、所定領域Arを示すデータと仮想面座標データ77とをメインメモリから読み出し、所定領域Arを表す式と仮想面座標とに基づいてはみ出しベクトルVdを算出する。算出されたはみ出しベクトルVdを示すデータは、はみ出しベクトルデータ78としてメインメモリに記憶される。ステップS47の次にステップS48の処理が実行される。
【0187】
なお、はみ出しベクトルは、仮想面座標が所定領域Arからはみ出している方向および量を表すものであればよく、はみ出しベクトルの算出方法は上記に限らない。例えば、はみ出しベクトルは、所定領域Arの4辺のうちで仮想面座標に最も近い辺の中点を始点とする(そして、仮想面座標の点Rを終点とする)ように算出されてもよい。
【0188】
ステップS48において、CPU10は、はみ出しベクトルVdに基づいて仮想カメラの向きを制御する。本実施形態においては、仮想カメラの向きは、はみ出しベクトルVdの向きに応じた方向へ表示範囲が移動するように、かつ、はみ出しベクトルVdの大きさに応じた量だけ表示範囲が移動するように制御される。以下、ステップS48の詳細を説明する。
【0189】
まず、表示対象および仮想カメラが配置される仮想空間(第2の仮想空間)について説明する。図24は、表示対象および仮想カメラが配置される仮想空間を示す図である。本実施形態においては、第2の仮想空間はx”y”z”座標系によって表される。x”y”z”座標系は、平面状の表示対象92の正面の位置から見て、表示対象92を向く方向を前方向とした場合において、後方向をz”軸正方向とし、上方向をy”軸正方向とし、右方向をx”軸正方向とした座標系である。
【0190】
仮想カメラ91の向き(姿勢)は、入力装置8の第1の姿勢と同様、3×3の回転行列によって表される。この行列は、仮想カメラ91の視線方向を前方向としたときにおける下記3つのベクトルの各成分を行列の各要素とするものである。
・右方向(画面の右方向に対応)を向くベクトルCX=(CXx,CXy,CXz)
・上方向(画面の上方向に対応)を向くベクトルCY=(CYx,CYy,CYz)
・後方向を向くベクトルCZ=(CZx,CZy,CZz)
上記行列は、所定の基準姿勢から現在の仮想カメラ91の姿勢への回転を表す回転行列である。所定の基準姿勢は、本実施形態においては、上記3つのベクトルCX,CY,およびCZが、それぞれx”軸、y”軸、およびz”軸の向きと一致する姿勢である。つまり、基準姿勢となる場合、仮想カメラ91の視線方向は表示対象92の平面に垂直な方向を向く。
【0191】
上記ステップS48においては、CPU10は、まず、上記基準姿勢から仮想カメラ91を回転させるべき角度(回転角度)をはみ出しベクトルVdに基づいて算出する。本実施形態においては、はみ出しベクトルVdのX’成分dxに応じて仮想カメラ91のy”軸回りの回転角度rXが算出され、はみ出しベクトルVdのY’成分dyに応じて仮想カメラ91のx”軸回りの回転角度rYが算出される。具体的には、CPU10は、はみ出しベクトルデータ78をメインメモリから読み出し、各回転角度rXおよびrYを下記の式(16)に従って算出する。
rX=dx×K1
rY=dy×K1 …(16)
上式(16)において、定数K1は予め定められる。なお、定数K1を大きくすると仮想カメラ91の回転角度が大きくなる。
【0192】
上記ステップS48においては、次に、CPU10は、上記基準姿勢から上記回転角度だけ回転した仮想カメラ91の姿勢を算出する。具体的には、回転後の仮想カメラ91の姿勢を表す行列Mcは次の式(17)に従って算出される。
【数5】

上式(17)で算出された行列Mcを示すデータは、カメラ向きデータ79としてメインメモリに記憶される。以上のステップS48の後、CPU10はカメラ向き制御処理を終了する。
【0193】
上記ステップS48によれば、仮想カメラ91の姿勢の変化方向(基準姿勢から変化する方向)は、はみ出しベクトルVdの向きに応じて決定され、仮想カメラ91の姿勢の変化量(基準姿勢からの変化量、すなわち、上記回転角度)は、はみ出しベクトルVdの大きさに応じて決定される。したがって、表示範囲が変化する方向(仮想カメラ91の姿勢の変化方向に対応する)は、所定領域Arから仮想面座標が示す位置までの方向(はみ出しベクトルVdの向き)に応じて決定される。また、表示範囲が変化する度合(仮想カメラの姿勢の変化量に対応する)は、仮想面座標が示す位置が所定領域Arから離れている度合(はみ出しベクトルVdの大きさ)に応じて決定される。
【0194】
なお、上記ステップS48の処理においては、仮想カメラの向き(姿勢)のみを変化させたが、他の実施形態においては、仮想カメラの向きおよび位置を変化させるようにしてもよい。例えば、基準姿勢である仮想カメラを右に向ける場合、CPU10は、仮想カメラ91の姿勢のみを変化させてもよいし、仮想カメラ91の姿勢を右に向けるとともに位置を右に移動させるようにしてもよい。
【0195】
一方、ステップS49において、CPU10は、仮想カメラ91を基準姿勢となるように制御する。基準姿勢を表す行列は、上式(17)において、回転角度を示す変数rXおよびrYを“0”としたときの行列となる。CPU10は、基準姿勢を表す行列を示すデータをカメラ向きデータ79としてメインメモリに記憶する。以上のステップS48の後、CPU10はカメラ向き制御処理を終了する。
【0196】
以上に説明したカメラ向き制御処理によれば、仮想面座標が所定領域Ar内にある場合には、仮想カメラ91は基準姿勢に固定される(ステップS49)ので、表示範囲は移動しない。このように、本実施形態においては、表示範囲を移動させる処理(ステップS47およびS48)は、仮想面座標が平面Qにおける所定領域Arの外側の位置を示す場合に実行される。一方、仮想面座標が所定領域Ar外となった場合には、仮想面座標が所定領域Arから外れた方向および外れた度合に応じて仮想カメラ91の姿勢が制御される結果、当該外れた方向および度合に応じて表示範囲が移動する。ここで、本実施形態においては、仮想面座標が所定領域Ar内にある場合とは、入力装置8がテレビ2の画面の方を向く、すなわち、入力装置8が画面上の位置を指し示す場合である。また、仮想面座標が所定領域Ar外にある場合とは、入力装置8の向きがテレビ2の画面から外れる、すなわち、入力装置8の指し示す位置が画面上から外れる場合である。したがって、上記カメラ向き制御処理によれば、ユーザは、入力装置8の向きをテレビ2の画面から外すように操作することによって、表示範囲を移動させることができる(図21参照)。
【0197】
なお、上記カメラ向き制御処理では、CPU10は、仮想面座標が所定領域Arから離れている度合に基づいて表示範囲の移動量を決定した。ここで、他の実施形態においては、CPU10は、上記度合に基づいて表示範囲の速さ(単位時間当たりの移動量)を決定するようにしてもよい。すなわち、CPU10は、仮想面座標が所定領域Arの外へ出た場合、上記度合に応じた角速度で仮想カメラを回転させるようにしてもよい。これによれば、ユーザは、入力装置8の向きをテレビ2の画面から外した状態で静止させても、仮想カメラを回転させて表示範囲を変化させることができる。
【0198】
図20の説明に戻り、ステップS42において、CPU10はカメラ位置制御処理を実行する。カメラ位置制御処理は、仮想面座標に基づいて仮想カメラの位置を制御する処理である。以下、図25〜図31を参照して、カメラ位置制御処理について説明する。
【0199】
カメラ位置制御処理における制御方法は種々考えられるが、以下では、例として4種類の制御方法について説明する。図25は、仮想カメラの位置制御に関する第1〜第4の制御方法の例を示す図である。なお、図25においては、CPU10は、仮想面座標から算出される画面座標の位置にカーソル93を表示するものとする。
【0200】
第1の制御方法は、仮想面座標の移動量および移動方向に応じて仮想カメラの位置を制御する方法である。第1の制御方法では、仮想面座標の(所定の期間における)移動量に応じた量で、かつ、仮想面座標の移動方向に応じた方向へ仮想カメラを移動させる。なお、本実施形態においては、ユーザが指定した期間(例えば、ユーザが入力装置8の所定のボタンを押下している期間)のみ、第1の制御方法による仮想カメラの移動が行われるものとする。第1の制御方法によれば、図25の上段に示されるように、ユーザがある時点において所定のボタンを押下し、所定のボタンを押下したままカーソル93を左に移動させた(仮想面座標をX’軸負方向に移動させた)場合、画面に表示される画像がカーソル93とともに移動される(つまり、表示範囲が右に移動する)。このとき、本実施形態では、カーソル93が指し示す表示対象の位置(図25では、「D」の文字の位置)が表示範囲の移動前後で変化しないように、仮想カメラの位置が制御される。つまり、本実施形態では、カーソル93の指し示す表示対象の位置を固定したまま、表示範囲を移動させることができる。
【0201】
第2の制御方法は、所定の基準位置から仮想面座標への方向に応じた方向へ仮想カメラを継続的に移動させる方法である。第2の制御方法では、上記基準位置から仮想面座標が示す位置への方向に応じて仮想カメラの移動方向を制御する。また、本実施形態においては、上記基準位置から仮想面座標が示す位置までの距離(図25に示す矢印94参照)に応じて仮想カメラの移動速度を制御する。なお、所定の基準位置は、例えば、ユーザが入力装置8の所定のボタンを押下した(あるいは押下し始めた)時点における仮想面座標の位置である。ただし、所定の基準位置は、どのような位置であってもよく、例えば予め定められた位置でもよい。第2の制御方法によれば、ユーザがある時点において所定のボタンを押下し、その後、カーソル93を右に移動させると、表示範囲は右に継続的に移動していく(図25の上段参照)。なお、本実施形態では、上記長さが長いほど移動速度が大きくなる。また、本実施形態では、第1の制御方法と同様、ユーザが指定した期間のみ、第2の制御方法による仮想カメラの移動が行われるものとする。
【0202】
第3および第4の制御方法は、仮想面座標が上記所定領域Ar外になった場合にカメラを移動させる方法である。本実施形態では、仮想カメラは、所定領域Arから仮想面座標が示す位置までの方向に応じた方向に移動される。第3および第4の制御方法によれば、入力装置8が指し示す位置を画面内から画面外へ移動させた場合、表示範囲は、当該位置が画面外へ出た方向に移動する。例えば、図25の下段に示されるように、入力装置8が指し示す位置を画面の右側へ移動させた場合、表示範囲は右へ移動する。
【0203】
なお、第3の制御方法と第4の制御方法との違いは、仮想カメラの移動速度を算出する方法にある。すなわち、第3の制御方法においては、仮想カメラの移動速度は、仮想面座標が所定領域Arから離れている度合に基づいて算出される。一方、第4の制御方法においては、仮想カメラの移動速度は、仮想面座標が所定領域Arの外側に位置する間における仮想面座標の速度に基づいて算出される。
【0204】
次に、図26を参照して、上記第1の制御方法の詳細について説明する。図26は、第1の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャートである。この場合、まずステップS51において、CPU10は、現時点が、カメラ位置を移動すべき所定期間であるか否かを判定する。所定期間は、ユーザによって指定される期間であり、本実施形態では、入力装置8のBボタン32iが押下されている間の期間とする。すなわち、CPU10は、メインメモリに記憶されている操作ボタンデータ66を参照し、Bボタン32iが押下されているか否かを判定する。ステップS51の判定結果が肯定である場合、ステップS52およびS53の処理が実行される。一方、ステップS51の判定結果が否定である場合、CPU10はカメラ位置制御処理を終了する。つまり、Bボタン32iが押下されていない場合、仮想カメラの位置は移動されない。このように、本実施形態においては、CPU10は、ユーザが入力装置8を用いて指定した期間においてのみ、仮想面座標に基づく表示範囲の移動を行う。
【0205】
ステップS52において、CPU10は、仮想面座標の移動量・移動方向を算出する。この移動量・移動方向は、仮想面座標の速度を意味し、今回のステップS3〜S9の処理ループにおける仮想面座標と、前回の処理ループにおける仮想面座標との差分として算出される。すなわち、CPU10は、前回の仮想面座標を始点とし今回の仮想面座標を終点とする速度ベクトルを算出する。ステップS52の次にステップS53の処理が実行される。
【0206】
ステップS53において、CPU10は、仮想面座標の移動量・移動方向に応じて仮想カメラを移動させる。本実施形態では、CPU10は、カーソル93が指し示す表示対象の位置が仮想カメラの移動前後で変化しないようにする。具体的には、まず、仮想カメラを移動すべき移動量および移動方向を表すベクトル(移動ベクトル)Cvが算出される。上記ステップS52で算出された速度ベクトルを(Vrx,Vry)とすると、上記移動ベクトルCv=(Cvx,Cvy)は、次の式(18)に従って算出される。
Cvx=Vrx
Cvy=Vry …(18)
上式(18)に示されるように、ここでは、第1の仮想空間の平面QにおけるX’軸と第2の仮想空間におけるx”軸とが対応し、第1の仮想空間の平面QにおけるY’軸と第2の仮想空間におけるy”軸とが対応するように仮想カメラを移動させている。なお、ここでは、平面QにおけるX’Y’座標系と第2の仮想空間におけるx”y”z”座標系との大きさが等しい(X’Y’座標系における長さ1が、x”y”z”座標系における長さ1に相当する)ものとする。
【0207】
上記移動ベクトルCvが算出されると、次に、移動ベクトルCvに従って仮想カメラが移動される。すなわち、CPU10は、メインメモリからカメラ位置データ80を読み出し、カメラ位置データが示す位置を、上記移動ベクトルCvだけ移動させた位置を算出する。算出された位置が移動後の仮想カメラの位置となる。算出された位置を示すデータは、新たなカメラ位置データ80としてメインメモリに記憶される。以上のステップS53の後、CPU10はカメラ位置制御処理を終了する。
【0208】
上記ステップS51〜S53の処理によれば、仮想面座標の移動量・移動方向に応じた移動量・移動方向だけ仮想カメラが移動される。したがって、第1の制御方法によれば、ユーザは、入力装置8の姿勢を変化させた方向へ、変化させた角度に応じた量だけ、表示範囲を移動させることができる(図25)。第1の制御方法では、入力装置8の変化量が表示範囲の移動量に対応するので、第1の制御方法を採用する場合には、ユーザは表示範囲の移動量を細かく制御することが容易である。したがって、表示範囲の移動量を細かく操作し、表示範囲の位置を精度良く操作する必要がある場合には、第1の制御方法は特に有効である。
【0209】
また、本実施形態においては、カーソル93が指し示す表示対象の位置は、上記処理によって変化しないので、上記処理によれば、カーソル93が指し示す対象を変化させずに表示範囲を移動させることができる。なお、他の実施形態においては、カーソル93が指し示す表示対象の位置は、仮想カメラの移動前後で変化してもよい。
【0210】
また、本実施形態では、CPU10は、ユーザが指定する上記所定期間のみ仮想カメラの移動処理を行うので、所定期間以外の期間では仮想カメラは移動されない。したがって、詳細は後述するが、所定期間以外の期間では、画面上のカーソルの位置のみが入力装置8に対する操作に応じて制御されることになる。そのため、本実施形態によれば、入力装置8に対する操作を、仮想カメラの制御(表示範囲の移動制御)と、カーソルの制御との両方に用いることができる。ユーザは、入力装置8を用いて、カーソルの移動と表示範囲の移動との両方を行うことができるので、本実施形態によれば非常に操作しやすい操作方法を提供することができる。
【0211】
なお、上記ステップS51では、上記所定期間は、入力装置8のBボタン32iが押下されている間の期間であったが、他の実施形態においては、ユーザによって指定される期間であればよい。例えば、所定期間は、ユーザによってある操作が行われてから、その後にさらに操作が行われるまでの期間(例えば、Bボタン32iが押下されてから、次にBボタン32iが押下されるまでの期間)であってもよいし、ユーザによってある操作が行われてから予め定められた所定時間が経過するまでの期間であってもよい。
【0212】
次に、図27を参照して、上記第2の制御方法の詳細について説明する。図27は、第2の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャートである。この場合、まずステップS55において、CPU10は、現時点が、カメラ位置を移動すべき所定期間であるか否かを判定する。ステップS55の処理は上記ステップS51と同じである。ステップS55の判定結果が肯定である場合、ステップS56およびS57の処理が実行される。一方、ステップS55の判定結果が否定である場合、CPU10はカメラ位置制御処理を終了する。
【0213】
ステップS56において、CPU10は、所定期間が開始したか否かを判定する。ステップS56の判定は、前回の処理ループにおけるステップS55の判定結果を参照することによって行うことができる。すなわち、前回の処理ループにおけるステップS55の判定結果が否定であった場合、今回の処理ループにおいて所定期間が開始したと判断することができる。ステップS56の判定結果が肯定である場合、ステップS57の処理が実行される。一方、ステップS56の判定結果が否定である場合、ステップS57の処理がスキップされてステップS58の処理が実行される。
【0214】
ステップS57において、CPU10は、上記ステップS7で算出された仮想面座標を、所定の基準位置を示す座標としてメインメモリに記憶する。このように、本実施形態においては、上記所定期間が開始した時点における仮想面座標の位置が所定の基準位置となる。なお、他の実施形態においては、所定の基準位置は、予め定められていてもよく、例えば、上述した投影点Tの位置を所定の基準位置としてもよい。ステップS57の次にステップS58の処理が実行される。
【0215】
ステップS58において、CPU10は、所定の基準位置と仮想面座標が示す位置までの差分を算出する。具体的には、CPU10は、ステップS57で記憶される所定の基準位置を示すデータと、仮想面座標データ77とをメインメモリから読み出す。そして、仮想面座標の値から所定の基準位置を表す座標値を減算することで、上記差分を算出する。ステップS58の次にステップS59の処理が実行される。
【0216】
ステップS59において、CPU10は、ステップS58で算出された差分に応じて仮想カメラを移動させる。具体的には、まず、上記ステップS53と同様の移動ベクトルCvが算出される。第2の制御方法においては、移動ベクトルCv=(Cvx,Cvy)は、次の式(19)に従って算出される。
Cvx=Δx×K2
Cvy=Δy×K2 …(19)
上式(19)において、変数Δxは上記差分のX’成分であり、変数Δyは上記差分のY’成分である。定数K2は予め定められる。なお、定数K2を大きくすると仮想カメラの移動速度が大きくなる。なお、上式(19)によれば、上記差分が大きくなりすぎると、移動ベクトルCvが大きくなりすぎる結果、表示範囲の移動が速くなりすぎるおそれがある。そのため、他の実施形態においては、CPU10は、移動ベクトルCvの大きさに上限値を設けておき、上限値を超えないように移動ベクトルCvを補正するようにしてもよい。
【0217】
上記移動ベクトルCvが算出されると、次に、移動ベクトルCvに従って仮想カメラが移動される。移動ベクトルCvに基づいて仮想カメラの移動後の位置を算出する方法は、ステップS59においても上記ステップS53と同様である。算出された移動後の仮想カメラの位置を示すデータは、新たなカメラ位置データ80としてメインメモリに記憶される。以上のステップS59の後、CPU10はカメラ位置制御処理を終了する。
【0218】
上記ステップS55〜S59の処理によれば、所定の基準位置と仮想面座標との差分に応じた移動量・移動方向だけ仮想カメラが移動される。したがって、第2の制御方法によれば、ユーザは、上記基準位置に対応する(入力装置8の)基準姿勢から入力装置8の姿勢を変化させた方向へ、変化させた量に応じた速度で、表示範囲を移動させることができる(図25)。第2の制御方法では、ユーザは、基準姿勢から傾いた状態にしていれば、入力装置8を静止させていても表示範囲を移動させることができる。そのため、表示対象が非常に大きいために表示範囲を大きく移動させる必要がある場合には、第2の制御方法は特に有効である。
【0219】
また、本実施形態では、第2の制御方法においても第1の制御方法と同様、CPU10は、ユーザが指定する上記所定期間のみ仮想カメラの移動処理を行う。したがって、第2の制御方法を採用する場合においても、ユーザは、入力装置8を用いてカーソルの移動と表示範囲の移動との両方を行うことができ、操作しやすい操作方法を提供することができる。
【0220】
次に、図28を参照して、第3の制御方法の詳細について説明する。図28は、第3の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャートである。この場合、まずステップS61において、CPU10は、仮想面座標は所定領域Arの外にあるか否かを判定する。ステップS61の処理は上述したステップS46の処理と同じである。ステップS61の判定結果が肯定である場合、ステップS62の処理が実行される。ステップS61の判定結果が否定である場合、CPU10はカメラ位置制御処理を終了する。つまり、第3の制御方法においても、上記仮想カメラ向き制御処理(ステップS46〜S48)と同様、仮想面座標が所定領域Ar外となった場合にのみ、仮想カメラが制御されて表示範囲が移動する。
【0221】
ステップS62において、CPU10ははみ出しベクトルVdを算出する。ステップS62の処理はステップS47の処理と同じである。ステップS62の次のステップS63において、CPU10は、はみ出しベクトルVdに基づいて仮想カメラの位置を制御する。第3の制御方法においては、仮想カメラは、はみ出しベクトルVdの方向に応じた方向へ、はみ出しベクトルVdの大きさに応じた速さ(移動量)で、移動される。具体的には、CPU10は、移動ベクトルCv=(Cvx,Cvy)を、下記の式(20)に従って算出する。
Cvx=dx×K3
Cvy=dy×K3 …(20)
上式(20)において、変数dxおよびdyは、はみ出しベクトルVdのX’成分およびY’成分である。また、定数K3は予め定められる。なお、定数K3を大きくすると仮想カメラの移動速度が大きくなる。
【0222】
上記移動ベクトルCvを算出した後、CPU10は、移動ベクトルCvに従って仮想カメラを移動する。移動ベクトルCvに基づいて仮想カメラの移動後の位置を算出する方法は、上記ステップS53等と同様である。算出された移動後の仮想カメラの位置を示すデータは、新たなカメラ位置データ80としてメインメモリに記憶される。ステップS63の後、CPU10はカメラ位置制御処理を終了する。
【0223】
以上のように、上記ステップS61〜S63の処理によれば、仮想面座標が上記所定領域Ar外になった場合に、所定領域Arから仮想面座標までの方向に応じた方向に仮想カメラが移動される。したがって、上記第3の制御方法においても上記仮想カメラ向き制御処理(ステップS46〜S48)と同様、ユーザは、入力装置8の向きをテレビ2の画面から外すように操作することによって、表示範囲を移動させることができる(図25参照)。
【0224】
また、上記ステップS61〜S63の処理によれば、仮想カメラの移動量(移動ベクトルCvの大きさ)は、所定領域Arから仮想面座標までの距離(はみ出しベクトルVdの大きさ)に応じて決定される。そのため、仮想面座標が停止していても仮想カメラは移動するので、ユーザは、(入力装置8の向きを画面から外していれば)入力装置8を動かしていない時でも表示範囲を移動させることができる。したがって、第3の制御方法は第2の制御方法と同様、表示対象が非常に大きいために表示範囲を大きく移動させる必要がある場合等に特に有効である。
【0225】
なお、本実施形態における第3の制御方法では、CPU10は、仮想面座標が所定領域Arから離れている度合に基づいて表示範囲の速さ(単位時間当たりの移動量)を決定した。ここで、他の実施形態においては、CPU10は、上記度合に基づいて表示範囲の移動量を決定するようにしてもよい。すなわち、CPU10は、仮想面座標が所定領域Arの外へ出た場合、上記度合に応じた量だけ表示範囲を移動させ、仮想面座標が停止した場合には表示範囲を停止させるようにしてもよい。
【0226】
次に、図29〜図31を参照して、第4の制御方法の詳細について説明する。図29は、第4の制御方法を採用する場合においてゲーム装置3のメインメモリに記憶されるゲーム処理用データ67を示す図である。なお、図29においては、図13に示すデータについては記載を省略しているが、第4の制御方法を採用する場合においても図13に示すデータはメインメモリに記憶されている。
【0227】
図29に示すように、第4の制御方法を採用する場合、ゲーム処理用データ67は、図13に示すデータの他、スクロール成分速度データ83、速度最大値データ84、および速度最小値データ85をさらに含む。
【0228】
スクロール成分速度データ83は、仮想面座標のスクロール成分速度Sを示すデータである。ここで、仮想面座標のスクロール成分速度Sは、仮想面座標の速度のうち、上記所定領域Arから仮想面座標への方向の成分(スクロール成分と呼ぶ)の大きさを表す(図31参照)。詳細は後述するが、本実施形態では、所定領域Arから仮想面座標への方向が、表示範囲の移動方向、すなわち、画像のスクロール方向と対応することになる。そのため、以下では、所定領域Arから仮想面座標への方向を「スクロール方向」と呼ぶ。
【0229】
速度最大値データ84は、仮想面座標が所定領域Ar外となっている期間における、上記スクロール成分速度Sの最大値を示す。また、速度最小値データ85は、上記期間におけるスクロール成分速度Sの最小値を示す。なお、これらの最大値および最小値は、仮想面座標が所定領域Arの内側に入った時点で消去(リセット)される。
【0230】
図30は、第4の制御方法を採用する場合におけるカメラ位置制御処理(ステップS42)の流れを示すフローチャートである。この場合、まずステップS71において、CPU10は、仮想面座標は所定領域Arの外にあるか否かを判定する。ステップS71の処理は上述したステップS46の処理と同じである。ステップS71の判定結果が否定である場合、ステップS72の処理が実行される。一方、ステップS71の判定結果が肯定である場合、後述するステップS73の処理が実行される。
【0231】
ステップS72においては、CPU10は、スクロール成分速度の最大値Smaxおよび最小値Sminをリセットする。具体的には、CPU10は、速度最大値データ84として“0”を示すデータをメインメモリに記憶させ、速度最小値データ85として“0”を示すデータをメインメモリに記憶させる。なお、前回の処理ループにおいてもステップS72が実行されている場合(速度最大値データ84および速度最小値データ85が示す値がすでに“0”である場合)には、今回の処理ループにおけるステップS72の処理は省略されてもよい。
【0232】
上記ステップS72の後、CPU10はカメラ位置制御処理を終了する。つまり、仮想面座標が所定領域Ar内となる場合には、仮想カメラの位置を制御する処理(ステップS78)は実行されず、表示範囲は移動しない。このように、第4の制御方法においても、上記仮想カメラ向き制御処理(ステップS46〜S48)と同様、仮想面座標が所定領域Ar外となった場合にのみ、仮想カメラが制御されて表示範囲が移動する。
【0233】
一方、ステップS73においては、CPU10は上記スクロール成分速度Sを算出する。スクロール成分速度Sは、仮想面座標の位置、仮想面座標の速度、および所定領域Arに基づいて算出される。以下、図31を参照して、スクロール成分速度Sの算出方法を説明する。
【0234】
図31は、平面Qにおけるスクロール成分速度Sを示す図である。なお、図31において、ベクトルVnは上記スクロール方向を表し、ベクトルVrは仮想面座標の速度を表す。上記ステップS73においては、まず、スクロール方向ベクトルVnが算出される。スクロール方向ベクトルVnは、点P10(投影点Tであり、X’Y’座標系の原点である)から仮想面座標が表す点Rへの方向を向く単位ベクトルである。なお、スクロール方向ベクトルVnは、所定領域Arに対する仮想面座標の方向を表すものであればよい。例えば、他の実施形態においては、スクロール方向ベクトルVnは、所定領域Arの4辺のうちで仮想面座標に最も近い辺の中点から仮想面座標への方向を表すように算出されてもよい。
【0235】
スクロール方向ベクトルVnが算出されると次に、スクロール成分速度Sが算出される。図31に示すように、スクロール成分速度Sは、仮想面座標の速度(ベクトルVr)のうち、上記スクロール方向(ベクトルVnの方向)の成分の大きさである。すなわち、上記スクロール方向ベクトルVn=(nx,ny)とし、仮想面座標の速度Vr=(Vrx,Vry)とすると、スクロール成分速度Sは、次の式(21)に従って算出される。
S=nx×Vrx+ny×Vry …(21)
上式(21)に従って算出されたスクロール成分速度Sを示すデータは、スクロール成分速度データ83としてメインメモリに記憶される。なお、図31および上式(21)から明らかなように、スクロール成分速度Sは、仮想面座標が所定領域Arから離れる方向に移動している場合に正の値となり、仮想面座標が所定領域Arに近づく方向に移動している場合に負の値となる。ステップS73の次にステップS74の処理が実行される。
【0236】
ステップS74において、CPU10は、ステップS73で算出されたスクロール成分速度Sが、最大値Smaxを超えたか否かを判定する。すなわち、CPU10は、スクロール成分速度データ83および速度最大値データ84をメインメモリから読み出し、スクロール成分速度Sと最大値Smaxの大きさを比較する。ステップS73の判定結果が肯定である場合、ステップS75の処理が実行される。一方、ステップS73の判定結果が否定である場合、ステップS75の処理がスキップされてステップS76の処理が実行される。
【0237】
ステップS75において、CPU10は、スクロール成分速度Sの最大値Smaxを更新する。すなわち、最大値Smaxは、今回の処理ループで算出されたスクロール成分速度Sの値へと更新される。具体的には、CPU10は、スクロール成分速度データ83と同じ値を示すデータを新たな速度最大値データ84としてメインメモリに記憶する。ステップS75の次にステップS76の処理が実行される。
【0238】
ステップS76において、CPU10は、ステップS73で算出されたスクロール成分速度Sが、最小値Sminを下回ったか否かを判定する。すなわち、CPU10は、スクロール成分速度データ83および速度最小値データ85をメインメモリから読み出し、スクロール成分速度Sと最小値Sminの大きさを比較する。ステップS76の判定結果が肯定である場合、ステップS77の処理が実行される。一方、ステップS76の判定結果が否定である場合、ステップS77の処理がスキップされてステップS78の処理が実行される。
【0239】
ステップS77において、CPU10は、スクロール成分速度Sの最小値Sminを更新する。すなわち、最小値Sminは、今回の処理ループで算出されたスクロール成分速度Sの値へと更新される。具体的には、CPU10は、スクロール成分速度データ83と同じ値を示すデータを新たな速度最小値データ85としてメインメモリに記憶する。ステップS77の次にステップS78の処理が実行される。
【0240】
ステップS78において、CPU10は、上記最大値Smaxおよび最小値Sminに基づいて仮想カメラを移動させる。第4の制御方法においては、仮想カメラは、上記スクロール方向に応じた方向へ、上記最大値Smaxと最小値Sminとの和に応じた速さ(移動量)で、移動される。すなわち、第4の制御方法においては、移動ベクトルCv=(Cvx,Cvy)は、下記の式(22)に従って算出される。
Cvx=nx×(Smax+Smin)
Cvy=ny×(Smax+Smin) …(22)
上式(22)から明らかなように、移動ベクトルCvは、スクロール方向ベクトルVn=(nx,ny)に対応する方向をむき、最大値Smaxと最小値Sminとの和に対応した大きさとなる。なお、他の実施形態においては、移動ベクトルCvの方向を、仮想面座標の移動方向と一致するようにしてもよい。ただし、移動ベクトルCvの方向を、仮想面座標の移動方向とする場合は、画面に対する入力装置8の向きと、表示範囲の移動方向とが一致しなくなるので、ユーザが違和感を抱くおそれがある。これに対して、本実施形態によれば、所定領域Arに対する仮想面座標の方向に応じた方向へ表示範囲を移動させることによって、画面に対する入力装置8の向きと表示範囲の移動方向とを対応させることができ、操作性を向上することができる。
【0241】
上記移動ベクトルCvを算出した後、CPU10は、移動ベクトルCvに従って仮想カメラを移動する。移動ベクトルCvに基づいて仮想カメラの移動後の位置を算出する方法は、上記ステップS53およびS59と同様である。算出された移動後の仮想カメラの位置を示すデータは、新たなカメラ位置データ80としてメインメモリに記憶される。ステップS78の後、CPU10はカメラ位置制御処理を終了する。
【0242】
以上のように、上記ステップS71〜S78の処理によれば、仮想面座標が上記所定領域Ar外になった場合に、所定領域Arから仮想面座標までの方向に応じた方向に仮想カメラが移動される。したがって、上記第4の制御方法においては、上記仮想カメラ向き制御処理(ステップS46〜S48)と同様、ユーザは、入力装置8の向きをテレビ2の画面から外すように操作することによって、表示範囲を移動させることができる(図25参照)。
【0243】
なお、上記ステップS78における上式(22)によれば、上記和が負の値となる場合には、移動ベクトルCvはスクロール方向ベクトルVnと逆向きとなるので、上記和が正の値となる場合に対して表示範囲の移動方向が逆向きとなる。つまり、上記和が負の値となる場合には、入力装置8の向き(テレビ2への方向を正面方向とした場合の向き)と、表示範囲の移動方向とが逆向きとなってしまう。例を挙げて説明すると、ユーザが入力装置8を画面の右側に向けているのに対して、表示範囲が左に移動することになるのである。したがって、上記和が負の値となる場合には、ユーザが操作に違和感を抱くおそれがある。そこで、上記ステップS78においては、CPU10は、上記和が負の値となる場合には移動ベクトルCvを“0”としてもよい。つまり、上記和が負の値となる場合には表示範囲を停止するようにしてもよい。これによれば、入力装置8の向きと表示範囲の移動方向とが逆向きとなってしまうことがないので、ユーザが操作に違和感を抱くことを防止することができる。
【0244】
また、上記ステップS71〜S78の処理によれば、仮想カメラの移動量(移動ベクトルCvの大きさ)は、仮想面座標の速度そのものではなく、上記スクロール成分速度Sの最大値Smaxと最小値Sminと和に応じて決定された。そのため、仮想面座標が停止していても仮想カメラは移動するので、ユーザは、(入力装置8の向きを画面から外していれば)入力装置8を動かしていない時でも表示範囲を移動させることができる。したがって、第4の制御方法は第2の制御方法と同様、表示対象が非常に大きいために表示範囲を大きく移動させる必要がある場合等に特に有効である。
【0245】
なお、上記ステップS71〜S78の処理においては、仮想面座標が所定領域Arの外側へ出たか否かの判定を、X’Y’座標系の2次元平面上で行った。ここで、他の実施形態においては、上記判定をX’軸とY’軸とで別々に行ってもよい。例えば、仮想面座標がX’軸方向に関しては所定領域Arの外側であり、X’軸方向に関しては所定領域Arの内側である場合には、CPU10は、X’軸方向に対応する方向(x”軸方向)にのみ仮想カメラを移動させ、Y’軸方向に対応する方向(y”軸方向)には仮想カメラを移動させないようにしてもよい。
【0246】
ここで、上記第3の制御方法においては、表示範囲の移動速度は、所定領域Arから仮想面座標までの距離に応じた速度となる。そのため、表示範囲の移動が開始される時点(すなわち、仮想面座標が所定領域Arの外へ出た直後の時点)においては、移動速度は必ず0に近い値となる。したがって、ユーザが入力装置8を速く動かしていた場合には、入力装置8の動きの速さと表示範囲の移動速度との間にギャップが生じるために、表示範囲の動きだしの際にユーザが違和感を抱くおそれがある。
【0247】
これに対して、第4の制御方法によれば、表示範囲の移動が開始される時点において、表示範囲の移動速度は、概ね、その時点での仮想面座標の速度となる。つまり、表示範囲を移動させる際に、ユーザが入力装置8を速く動かしていれば表示範囲も速く移動し、ユーザが入力装置8をゆっくりと動かしていれば表示範囲もゆっくりと移動する。したがって、入力装置8の動きの速さと表示範囲の移動速度との間にギャップが生じないので、表示範囲の動きだしの際にユーザが違和感を抱くことがない。このように、第4の制御方法によれば、より操作性の良い操作方法を提供することができる。特に、本実施形態のように、仮想面座標に応じた画面上の位置にカーソルを表示する(後述するステップS43)場合には、表示範囲の移動開始前におけるカーソルの移動速度と、移動開始後における表示範囲の移動速度とが等しくなる。そのため、カーソルが画面上を移動する状態から表示範囲が移動する状態への切り替わりがユーザにとっては違和感なくスムーズに感じられ、良好な操作感覚をユーザに抱かせることができる。
【0248】
また、上記第3の制御方法においては、ユーザが表示範囲を低速で移動させたい場合には、仮想面座標が所定領域Arの周よりもやや外側となる姿勢で入力装置8を静止しなければならないので、操作が困難である。これに対して、第4の制御方法によれば、ユーザが表示範囲を低速で移動させたい場合には、ユーザは入力装置8の姿勢をゆっくりと変化させるだけでよく、表示範囲を容易に低速で移動させることができる。
【0249】
なお、本実施形態における第4の制御方法では、CPU10は、上記スクロール成分速度Sに基づいて表示範囲の速度を決定した。ここで、他の実施形態においては、CPU10は、スクロール成分速度Sに基づいて表示範囲の移動量を決定するようにしてもよい。すなわち、CPU10は、仮想面座標が所定領域Arの外へ出た場合、上記スクロール成分速度Sの最大値Smaxおよび最小値Sminの和に応じた量だけ表示範囲を移動させ、仮想面座標が停止した場合には表示範囲を停止させるようにしてもよい。
【0250】
また、本実施形態における第4の制御方法では、CPU10は、表示範囲を変化させる度合(表示範囲の移動速度)を上記スクロール成分速度Sに基づいて決定した。ここで、他の実施形態においては、CPU10は、仮想面座標が所定領域Arの外側に位置する場合における当該仮想面座標の速度に基づいて決定するものであれば、どのような方法で上記度合を決定してもよい。例えば、上記度合は、上記スクロール成分速度Sの最大値Smaxに応じて決定されてもよい。また、上記度合は、上記スクロール成分速度Sに応じて、あるいは、仮想面座標の速度に応じて決定されてもよい(このとき、仮想面座標が停止した場合には表示範囲は停止する)。
【0251】
また、本実施形態における第4の制御方法では、CPU10は、仮想面座標が所定領域Ar外となっている期間における上記スクロール成分速度Sの最大値および最小値に応じて表示範囲の速度を決定した。ここで、上記スクロール成分速度Sの最大値および最小値を決定する期間は、仮想面座標が所定領域Ar外となっている期間の全部である必要はなく、当該期間の一部の期間のみであってもよい。例えば、CPU10は、仮想面座標が所定領域Arの外側に出てからの(予め定められた)一定期間における上記スクロール成分速度Sのうちから最大値および最小値を決定するようにしてもよい。これによっても、上記実施形態と同様、入力装置8の動きの速さと表示範囲の移動速度との間にギャップが生じないので、表示範囲の動きだしの際にユーザが違和感を抱くことを防止することができる。
【0252】
以上、ステップS42におけるカメラ位置制御処理の例として、4つの制御方法を説明したが、仮想カメラの位置を制御する方法はこれらの制御方法に限らない。カメラ位置制御処理は、仮想面座標を用いて仮想カメラの位置を制御する方法であればどのようなものであってもよい。
【0253】
また、上記実施形態においては、仮想カメラの向きおよび位置の両方を制御する(ステップS41およびS42)ものとしたが、他の実施形態においては、仮想カメラの向きおよび位置のいずれか一方のみを制御するようにしてもよい。つまり、CPU10は、上記ステップS41およびS42のいずれか一方のみを実行してもよい。
【0254】
また、上記実施形態においては、カメラ向き制御処理(ステップS41)においては、CPU10は、仮想面座標が所定領域Arから離れている度合に基づいて仮想カメラの向きを制御したが、他の実施形態においては、仮想面座標に関する他の情報に基づいて仮想カメラの向きを制御してもよい。仮想カメラの向きは、例えば、上記第1の制御方法のように、仮想面座標の移動量および移動方向に応じて制御されてもよいし、上記第2の制御方法のように、所定の基準位置から仮想面座標が示す位置までの差分に応じて制御されてもよいし、上記第4の制御方法のように、仮想面座標が所定領域Arの外側に位置する場合における当該仮想面座標の速度に基づいて制御されてもよい。つまり、他の実施形態においては、上記第1、第2、および第4の制御方法において仮想カメラの位置を制御したことに代えて、仮想カメラの向きを制御することによって、表示範囲を変化させるようにしてもよい。
【0255】
また、上記実施形態においては、CPU10は、入力装置8の姿勢(仮想面座標)のみを用いて表示範囲を制御するようにしたが、他の実施形態においては、入力装置8の姿勢の情報に加え、他の入力方法によって得られた情報を用いて表示範囲を制御してもよい。例えば、CPU10は、入力装置8の十字ボタン32aに関する操作データをさらに用いて表示範囲を制御してもよい。具体的には、図20に示す表示制御処理においては、ステップS42におけるカメラ位置制御処理に代えて、十字ボタン32aを用いた方向指示に従って仮想カメラの位置を制御する処理が実行されてもよい。より具体的には、上記処理において、CPU10は、十字ボタン32aの上下左右の各部のうちで押下された部分に従った方向へ表示範囲が移動するように、仮想カメラの位置を制御してもよい。これによれば、ユーザは、十字ボタン32aを用いて仮想カメラの位置を変更することができるとともに、入力装置8の向きを変えることによって仮想カメラの向きを変更することができる。すなわち、2種類の方法で表示範囲を変更することができるので、表示範囲をより自由に操作することができ、操作性を向上することができる。
【0256】
なお、入力装置8の姿勢を用いた入力方法とともに表示範囲の制御に用いる入力方法は、十字ボタン32aを用いた入力方法に限らず、他の入力方法であってもよい。ただし、入力装置8に設けられた操作手段を用いた入力方法であることが好ましい。これによれば、ユーザは、入力装置8の姿勢を変化させる操作と、当該操作手段に対する操作との両方の操作を片手で行うことができるからである。例えば、入力装置8は、十字ボタン32aに代えて、スティックやタッチパッド等の操作手段を備えていてもよく、CPU10は、これらの操作手段に対する方向指示に従って表示範囲を制御してもよい。また、他の実施形態においては、CPU10は、仮想面座標に基づいて仮想カメラの位置を制御し、上記操作手段を用いた方向指示に従って仮想カメラの向きを制御してもよい。
【0257】
図20の説明に戻り、ステップS43において、CPU10は、仮想面座標に基づいてテレビ2の画面上においてカーソルを表示する位置(カーソル位置)を算出する。本実施形態においては、カーソル位置は、第1の仮想空間における平面Q上の所定領域Arとテレビ2の画面の領域とが対応するように算出される。つまり、CPU10は、所定領域Arに対する仮想面座標の位置関係と、画面の領域に対するカーソル位置の位置関係とが同じになるように、カーソル位置を算出する。なお、仮想面座標が所定領域Arの外となる場合には、CPU10は、所定領域Arの周のうちで仮想面座標に最も近い位置を特定し、当該位置に対応する画面の端の位置をカーソル位置として算出してもよい。算出されたカーソル位置を示すデータは、カーソル位置データ81としてメインメモリに記憶される。ステップS43の次にステップS44の処理が実行される。
【0258】
ステップS44において、CPU10は、テレビ2に表示すべき表示対象の画像を仮想カメラの位置および向きに基づいて生成する。具体的には、CPU10は、仮想カメラの位置を視点位置とし、仮想カメラの向きを視線方向として表示対象に対して透視投影変換等の変換処理を行うことによって、表示対象の画像を生成する。これによって、表示対象のうちの一部を表す画像が生成されるので、仮想カメラを用いて表示範囲が決定されたこととなる。ステップS44で生成された画像は、テレビ2の画面に表示される。
【0259】
また、CPU10は、表示対象の画像に重ねて、上記カーソル位置にカーソルの画像を表示する。入力装置8の姿勢に対応した位置にカーソルが表示されるので、プレイヤは、入力装置8の姿勢を変化させることによってカーソルを動かす操作が可能となる。なお、仮想面座標が所定領域Arの外となる場合、CPU10は、カーソルを表示してもよいし表示しなくてもよい。例えば、上記ステップS42の処理において上記第2〜第4の制御方法を採用する場合には、表示範囲の移動方向をユーザが認識しやすくなるように、CPU10は、画面の端の位置にカーソルを表示するようにしてもよい。一方、上記ステップS42の処理において上記第1の制御方法を採用する場合には、仮想面座標が所定領域Arの外となった時に画面の端にカーソルを表示すると、カーソルが指し示す表示対象の位置が変化してしまう。そのため、この場合には、CPU10はカーソルを表示しない(カーソルを画面外に出たように見せる)ようにしてもよい。なお、ステップS42の処理において上記第2の制御方法を採用する場合には、CPU10は、表示範囲の移動方向ユーザがより認識しやすくなるように、基準位置と仮想面座標との差分を表すベクトル(図25に示す矢印94)を表示するようにしてもよい。以上のステップS44の次にステップS45の処理が実行される。
【0260】
ステップS45において、CPU10は、カーソル位置に基づくゲーム処理を実行する。例えば、所定の指示を表すボタン画像がカーソルによって指し示されている状態で所定の操作(例えば入力装置8の所定のボタンが押下される操作)が行われた場合、CPU10は、当該所定の指示に従ったゲーム処理を実行する。なお、ステップS45におけるゲーム処理は、カーソル位置をユーザの入力として用いる処理であればどのような処理でもよい。例えば、上記ゲーム処理は、カーソル位置が移動した軌跡に沿って線を描画する処理であってもよい。上記ステップS45によって、ユーザは、入力装置8を画面上の位置を指定するポインティングデバイスとして使用することができる。
【0261】
なお、他の実施形態においては、ステップS45におけるゲーム処理は、上記2次元座標を入力値としてゲーム結果に反映させる処理であればどのような処理であってもよい。例えば、仮想のゲーム空間内のオブジェクトを2次元座標に対応するゲーム空間内の位置に移動させる処理であってもよいし、上記2次元座標により表される2次元ベクトルの大きさおよび方向に応じた速度で上記オブジェクトを移動させるように制御して表示する処理であってもよい。ステップS45の後、CPU10は図20に示す表示制御処理を終了する。
【0262】
表示制御処理(ステップS8)の次のステップS9において、CPU10は、ゲームを終了するか否かを判定する。ステップS9の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS9の判定結果が否定である場合、ステップS3の処理が再度実行される。以降、ステップS9でゲームを終了すると判定されるまで、ステップS3〜S9の処理ループが繰り返し実行される。一方、ステップS9の判定結果が肯定である場合、CPU10は、図14に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【0263】
以上のように、本実施形態においては、ジャイロセンサ55および56によって検出された角速度から入力装置8の第1の姿勢を算出し(ステップS4)、第1の姿勢を第1補正処理(S5)および第2補正処理(S6)によって補正した。そして、補正後の第1の姿勢を用いてゲーム処理を実行する(ステップS7,S8)ので、CPU10は、入力装置8の正確な姿勢に基づいたゲーム処理を実行することができる。これによれば、例えば、入力装置8の姿勢を画面上のカーソルの位置に対して正確に反映させることができるので、ゲーム操作の操作性を向上することができる。
【0264】
[座標を算出する第2の方法]
以下、図32〜図37を参照して、入力装置8の姿勢から画面上における位置を算出する第2の方法について説明する。なお、上記実施形態においては、上述した第1の方法に代えて以下に示す第2の方法を用いてゲーム処理を実行してもよい。また、以下の説明では、上記仮想空間における平面Q上の座標を「第1の座標」と呼び、第1の座標から算出される画面上の位置を表す座標を「画面座標」と呼び、マーカ座標から算出される画面上の位置を表す座標(詳細は後述する)を「第2の座標」と呼ぶ。
【0265】
図32は、第1の方法と第2の方法との比較を示す図である。図32においては、実空間において、テレビ2の画面の中心よりも下方に入力装置8が位置し、入力装置8のZ軸方向が指す画面上の位置(以下、「(入力装置の)指示位置」と呼ぶ。)が画面の中心となる場合を例として考える(図32の上行左欄参照)。
【0266】
上述した第1の方法では、第1の座標の座標系(仮想空間における平面Q上のX’Y’座標系)は、入力装置8の位置を平面Qに投影させた投影点Tを常に原点Oとするものであった。つまり、第1の座標は、入力装置8のZ軸方向が水平方向を向く場合(Z軸方向が投影点Tを指す場合)に原点(0,0)の値を取るように算出された。したがって、図32に示すように入力装置8のZ軸方向がやや上方を向く場合には、第1の座標の位置Rは原点Oよりも上方になる(図32の上行中央欄参照)。その結果、第1の座標から算出される画面座標の位置Uは、画面の中心よりも上方となる(図32の上行右欄参照)。
【0267】
図32に示す場合、第1の方法では、実際には(実空間では)入力装置8のZ軸方向は画面の中心を指しているのに対して、算出される画面上の位置は中心よりも上方の位置となってしまう。このように、第1の方法では、ユーザが入力装置8を用いて指し示した位置(入力装置の指示位置)と、算出される画面座標の位置との間にずれが生じてしまい、ユーザが違和感を抱くおそれがあった。
【0268】
なお、実際には、テレビ2が設置される状況(床に置かれるのか、台の上に置かれるのか等)や、入力装置8を使用するユーザの状態(入力装置8を立って使用するのか、座って使用するのか等)等によって、画面に対する入力装置8の高さは様々であると考えられる。この高さが変化すれば、入力装置8の指示位置と姿勢との関係は変化し、入力装置8の指示位置が画面の中心となる場合における入力装置8の姿勢も変化する。しかし、第1の方法では、入力装置8の指示位置が考慮されずにX’Y’座標系の原点の位置を固定するために、画面上の位置を適切に算出することができず、入力装置8を用いた操作にユーザが違和感を抱くおそれがあった。
【0269】
そこで、第2の方法では、ゲーム装置3は、第1の方法で算出された第1の座標を、入力装置8のZ軸方向が画面の中心を指す姿勢である場合(指示位置が画面の中心となる場合)に所定値(具体的には、(0,0))となるように補正する。具体的には、ゲーム装置3は、まず、入力装置8のZ軸方向が画面の中心を指す姿勢となったか否かを判定する。この判定は、上述したマーカ座標を参照することで行うことができる。すなわち、ゲーム装置3は、画面上における上記指示位置を示す座標(第2の座標)をマーカ座標に基づいて算出し、第2の座標が画面の中心(中心付近)を表すか否かを判定する。
【0270】
上記の判定の結果、第2の座標が画面の中心となった場合、ゲーム装置3は、第1の座標を補正するための補正量(オフセット量)を決定する。オフセット量は、第2の座標が画面の中心となった時点において(第1の方法で)算出された第1の座標に対応する画面座標の位置と、第2の座標の位置とが一致するように決定される。具体的には、オフセット量は、当該時点における第1の座標が原点の値(0,0)となるような補正量に決定される。なお、上記オフセット量を決定することは、平面Q上のX’Y’座標系を移動することを意味する。図32の例においては、入力装置8が水平方向よりも上方を向いているので、X’Y’座標系は、平面Q上において、投影点Tが原点となる位置(図32に示す点線の位置)から上方へ移動するように移動される(図32の下行中央欄参照)。以上のように第1の座標を原点の値とする結果、第1の座標に対応する画面上の位置Uは、画面の中心位置となる(図32の上行右欄参照)。したがって、入力装置8の指示位置(第2の座標の位置)と、算出される画面上の位置とが画面の中心で一致することになる。このように、第2の方法によれば、ユーザが入力装置8を用いて指した位置と、算出される位置との間のずれが生じることを防止することができ、ユーザが違和感を抱くことを防止することができる。
【0271】
また、本実施形態においては、ゲーム装置3は、X’Y’座標系のY’成分についてのみ第1の座標の補正を行う。つまり、第1の座標(および画面座標)は、画面の上下方向にのみ補正され、左右方向については補正されない。本実施形態では、画面に対する入力装置8の高さ(上下方向の位置)に関しては、入力装置8の姿勢のみからでは判別することができないのに対して、画面に対する入力装置8の左右方向の位置に関しては、入力装置8の姿勢のみからでも判別することができ、左右方向に関しては図32で説明したような「ずれ」は生じないからである。ただし、他の実施形態においては、左右方向に関しても上下方向と同じように第1の座標を補正するようにしてもよい。
【0272】
次に、図33〜図37を参照して、第2の方法を採用する場合においてゲーム装置3が実行する処理の詳細について説明する。図33は、第2の方法を採用する場合においてゲーム装置3のメインメモリに記憶される主なデータを示す図である。なお、図33において、図13に示すデータと同じデータについては、図13と同じ参照符号を付し、詳細な説明を省略する。
【0273】
図33に示すように、第2の方法においては、図13に示すデータに加えて、第1座標データ87、第2座標データ88、オフセット量データ89、および画面座標データ90がメインメモリに記憶される。
【0274】
第1座標データ87は、入力装置8の姿勢に基づいて算出される上記第1の座標を示す。すなわち、第1座標データ87は、上記仮想空間における平面Q上の位置の座標を示す。
【0275】
第2座標データ88は、マーカ座標に基づいて算出される、画面上の位置を表す座標(第2の座標)を示す。第2の座標は、入力装置8のZ軸方向が指し示す画面上の位置を表すものである。第2の座標は、理想的には、入力装置8のZ軸を延ばした直線と画面との交点の位置を表すものであるが、当該交点の位置付近を表すものであればよい。
【0276】
オフセット量データ79は、第1の座標を補正するためのオフセット量を示す。本実施形態では、第1の方法で算出された第1の座標をオフセット量だけ移動した座標が、補正後の第1の座標となる。
【0277】
画面座標データ90は、第1の座標に基づいて算出される、画面上の位置を表す座標(画面座標)を示す。第2の方法では、画面座標は、オフセット量に従って補正された後の第1の座標に基づいて算出される。
【0278】
図34は、第2の方法を採る場合においてゲーム装置3が実行する処理の流れを示すメインフローチャートである。なお、図34において、図14に示す処理ステップと同じ処理ステップについては、図13と同じステップ番号を付し、詳細な説明を省略する。
【0279】
第2の方法を採用する場合には、ステップS2の初期姿勢設定処理の次に、ステップS41の処理が実行される。ステップS81において、CPU10は、オフセット決定処理を実行する。オフセット決定処理は、第1の座標を補正するためのオフセット量を決定する処理である。以下、図35を参照して、オフセット決定処理の詳細を説明する。
【0280】
図35は、図34に示すオフセット決定処理(ステップS81)の流れを示すフローチャートである。オフセット決定処理においては、まずステップS91において、CPU10は操作データを取得する。ステップS91の処理は、上述したステップS3の処理と同じである。ステップS91の次にステップS92の処理が実行される。
【0281】
ステップS92において、CPU10は、入力装置8の指示位置を表す第2の座標を算出する。第2の座標は、ステップS91で取得されたマーカ座標に基づいて算出される。すなわち、CPU10は、メインメモリからマーカ座標データ65を読み出し、マーカ座標に基づいて第2の座標を算出する。マーカ座標から第2の座標を算出する方法は、どのような方法であってもよい。例えば、上述したステップS33で算出する座標(px,py)をマーカ座標から算出し、当該座標(px,py)に基づいて第2の座標を算出することが可能である。具体的には、座標(px,py)のx成分の正負を反転させて所定の割合(例えば、撮像画像のx軸方向の長さを、テレビ2の画面の横方向の長さに一致させる割合)でスケーリングすることによって、画面の横方向に関する指示位置を得ることができる。また、座標(px,py)のy成分の正負を反転させて所定の割合(例えば、撮像画像のy軸方向の長さを、テレビ2の画面の縦方向の長さに一致させる割合)でスケーリングすることによって、画面の縦方向に関する指示位置を得ることができる。なお、縦方向に関しては、マーカ部6がテレビ2の上方に設置されるか下方に設置されるかに応じて、オフセット量を適宜設定することが好ましい。なお、CPU10は、算出した第2の座標を示すデータを第2座標データ88としてメインメモリに記憶させる。以上のステップS92の次にステップS93の処理が実行される。
【0282】
ステップS93において、CPU10は、入力装置8の第1の姿勢を算出する。ステップS93の処理は、上述したステップS4〜S6の処理と同様である。なお、本実施形態では、第1の姿勢を算出する処理を毎フレーム(ステップS91〜S98の処理ループ毎に)実行することとするが、当該処理は、ステップS94の判定結果が肯定となる時点でのみ実行されてもよい。ステップS93の次にステップS94の処理が実行される。
【0283】
ステップS94において、CPU10は、所定の設定画面とカーソルとをテレビ2の画面に表示させる。設定画面は、ユーザが所定の指示を行うためのボタン画像を含む画面である。図36は、設定画面の一例を示す図である。図36においては所定の指示は、カーソルの速度調整(感度調整)を行う指示であり、カーソルの速度を上げる指示を表すボタン画像101と、カーソルの速度を下げる指示を表すボタン画像102とが表示される。なお、ここで調整対象となるカーソルは、現在表示されているカーソル103ではなく、後のゲーム操作で用いる、第1の座標(画面座標)に基づいて位置が決定されるカーソルである。また、上記所定の指示の内容はどのようなものであってもよく、カーソルに関する他の調整(例えば、入力装置8の操作に対するカーソルの追従性の調整や、カーソルに設定される遊びの調整や、手ぶれ防止機能の調整等)を行うための指示であってもよいし、設定画面での設定操作を終了する指示であってもよいし、ゲームを開始する指示であってもよい。
【0284】
また、テレビ2の画面には、上記設定画面とともにカーソル103が表示される。すなわち、CPU10は、メインメモリから第2座標データ88を読み出し、第2の座標データ78が示す位置にカーソル103を表示させる。このように、ステップS94で表示されるカーソル103の位置は、マーカ座標に基づいて算出されるものであり、カーソル103はマーカ座標に基づく方法で制御されるものである。なお、図35では示していないが、CPU10は、上記ボタン画像101または102が指定された(カーソル103がボタン画像を指し示す状態で入力装置8の所定のボタンが押下された)場合に、指定されたボタン画像に応じた調整処理を行う。上記ステップS94の次に、ステップS95の処理が実行される。
【0285】
図35の説明に戻り、ステップS95において、CPU10は、カーソル103が画面の上下方向に関して中央に位置しているか否かを判定する。この判定は、第2の座標を用いて行うことができる。具体的には、CPU10は、メインメモリから第2座標データ88を読み出し、第2座標データ88が示す位置が上記ボタン画像101または102の表示領域内であるか否かを判定する。つまり、CPU10は、上記ボタン画像101または102の表示領域内にカーソル103が位置しているか否かを判定する。ステップS95の判定結果が肯定である場合、ステップS96の処理が実行される。一方、ステップS95の判定結果が否定である場合、ステップS96およびS97の処理がスキップされて、後述するステップS98の処理が実行される。
【0286】
なお、上記ステップS95では、第2の座標(カーソル103)が厳密に画面の中心に位置しているか否かを判定するのではなく、中心付近に(ボタン画像の表示領域内に)第2の座標が位置しているか否かを判定している。これは、本発明では、ユーザに違和感を与えないようにすることが目的であり、入力装置の指示位置と画面座標の位置とを厳密に一致させる必要はないからである。また、ステップS95において第2の座標が画面の中心に位置するか否かを厳密に判定すると、ステップS95の判定結果が肯定となる可能性が低くなり、オフセット量が決定されなくなる可能性があるからである。
【0287】
ステップS96において、CPU10は、第1の姿勢に基づいて第1の座標を算出する。ステップS96における算出処理は、上述したステップS7の算出処理と同じである。すなわち、CPU10は、ステップS93で算出された第1の姿勢に基づいて、上記第1の方法に従って第1の座標を算出する。算出された第1の座標は、第1座標データ87としてメインメモリ32に記憶される。ステップS96の次にステップS97の処理が実行される。
【0288】
ステップS97において、CPU10は、ステップS96で算出された第1の座標に基づいてオフセット量を決定する。図37は、オフセット量の決定方法を示す図である。なお、図37で示す入力装置8の姿勢は、入力装置8の指示位置が画面の上下方向に関して中央となった時点(ステップS95の判定結果がYesとなった時点)における姿勢である。また、原点Oは、第1の方法におけるX’Y’座標系の原点であり、上述した投影点Tの位置である。また、点Rは、ステップS96で算出された第1の座標の位置を示す。
【0289】
オフセット量は、上記時点における第1の座標のY’成分が原点の値(0)となるように決定される。すなわち、上下方向に関して、第1の座標の位置Rが原点の位置となるように決定される。したがって、オフセット量は、第1の座標のY’成分の値dの正負を反転した値“−d”に決定される(図37参照)。CPU10は、第1座標データ87をメインメモリから読み出し、第1座標データ87により示される第1の座標のY’成分の正負を反転した値をオフセット量として決定する。決定されたオフセット量を示すデータは、オフセット量データ89としてメインメモリに記憶される。なお、後述する第1の座標の補正処理(ステップS82)では、第1の方法で算出された第1の座標が上記オフセット量だけ移動した座標へと補正される。したがって、ステップS97のオフセット量を算出する処理は、X’Y’座標系をオフセット量だけ(オフセット量の符号を反転させた方向へ)移動させる処理と言うことができる。以上のステップS97の次にステップS98が実行される。
【0290】
ステップS98において、CPU10は、設定画面を終了するか否かを判定する。ステップS98の判定は、例えば、ユーザが設定画面を終了する指示を行ったか否かによって行われる。ステップS98の判定結果が否定である場合、ステップS91の処理が再度実行される。以降、ステップS98の判定結果が肯定であるまで、ステップS91〜S98の処理が繰り返し実行される。一方、ステップS98の判定結果が肯定である場合、CPU10はオフセット決定処理を終了する。
【0291】
以上のように、オフセット決定処理においては、入力装置8が画面の(上下方向に関して)中央を指し示す時点で算出される第1の座標のY’成分が原点の値(0)となるように、オフセット量が決定される。ここで、オフセット決定処理においてオフセット量を決定するためには、入力装置8が画面の(上下方向に関して)中央を指し示す状態が生じなければならない。本実施形態では、このような状態を生じさせるべく、所定の指示を行うためのボタン画像101および102を画面の(上下方向に関して)中央に表示させるようにしている(図36)。これによれば、ユーザは、所定の指示を行うために、上記状態となるように入力装置8を自然に操作するので、オフセット量の決定操作をユーザに意識させることなく自然に行わせることができる。なお、上記所定の指示は、どのような指示であってもよいが、オフセット量を決定する処理が確実に実行されるようにするため、ユーザが必ず1回は行う指示(例えば、設定画面を終了する指示や、ゲームを開始する指示等)であることが好ましい。また、本実施形態のように、上記所定の指示として、カーソルの調整に関する指示を行わせることによって、カーソルの調整と同時にオフセット量を決定することができる。これによれば、「(オフセット量を決定するために)余計な操作を行っている」という感覚をユーザに与えることなく、オフセット量を決定することができる。
【0292】
図34の説明に戻り、ステップS81のオフセット決定処理の次に、上述した実施形態と同様のステップS3の処理が実行される。さらに、ステップS3の次に、上述した実施形態と同様のステップS4〜S7の処理が実行される。なお、ステップS7の処理は、第1の方法で第1の座標を算出する処理である。第2の方法では、ステップS7の処理の次にステップS82の処理が実行される。
【0293】
ステップS82において、CPU10は、ステップS7で算出された第1の座標をオフセット量に従って補正する。すなわち、CPU10は、第1座標データ87およびオフセット量データ78をメインメモリから読み出し、第1の座標を、Y’成分にオフセット量Dを加算した値へと補正する。補正後の第1の座標を示すデータは、新たな第1座標データ87としてメインメモリに記憶される。
【0294】
なお、本実施形態では、第1の方法による第1の座標の算出処理(ステップS7)と、第1の座標の補正処理(ステップS82)とを別々の処理として記載したが、CPU10は、これら2つの処理をまとめて実行してもよい。すなわち、ステップS7において、CPU10は、上式(15)に代えて、以下の式(23)に従って第1の座標を算出してもよい。
Wy=L×Zy/Zz+D …(23)
上式(23)において、変数Dは、オフセット量を示し、上記ステップS96で算出された第1の座標のY’成分(d)の符号を反転させた値(−d)である。上式(23)を用いる場合、補正処理を含めた形で第1の座標を算出することができる。
【0295】
ステップS82の次にステップS83およびS84の処理が実行される。ステップS83およびS84の処理は、上述したステップS8の処理と同様であるが、図34ではステップS8の処理を2つに分けてステップS83およびS84として説明を行う。
【0296】
ステップS83において、CPU10は、テレビ2の画面上の位置を表す座標(画面座標)を算出する。画面座標は、ステップS82で補正された第1の座標に基づいて算出される。すなわち、CPU10は、第1座標データ87をメインメモリから読み出し、第1座標データ87により示される第1の座標に基づいて画面座標を算出する。画面座標は、第1の座標が原点の値(0,0)となる場合に画面の中心となるように算出される。また、画面座標は、画面の中心から画面座標への方向が、原点から第1の座標への方向に対応する方向となり、画面の中心から画面座標までの長さが、原点から第1の座標までの長さに対応する長さとなるように算出される。したがって、入力装置8のZ軸を画面の中心に向けた状態では、画面座標は画面の中心を表し(画面座標と指示位置とが一致し)、当該状態から入力装置8のZ軸の向きを変化させた方向に応じた方向へ画面座標が移動することになる。以上のようにして算出された画面座標を示すデータは、画面座標データ90としてメインメモリに記憶される。ステップS83の次にステップS84の処理が実行される。
【0297】
ステップS84において、CPU10は、ステップS83で算出された画面座標を用いたゲーム処理を行う。ステップS84におけるゲーム処理は、上記画面座標に基づく処理であればどのような処理であってもよい。例えば、画面座標の位置にカーソルやゲームのオブジェクトを表示させる処理でもよいし、オブジェクトの位置と画面座標との位置関係に応じてオブジェクトを移動させる処理でもよい。また、ステップS84におけるゲーム処理は、上記ステップS8の表示制御処理であってもよい。このとき、表示制御処理においては、上記ステップS82で補正された第1の座標(仮想面座標)に基づいて表示範囲が制御されてもよい。つまり、ステップS41およびS42の処理においては、上記ステップS82で補正された第1の座標に基づいて仮想カメラの向きおよび位置が制御されてもよい。また、ステップS43においては、上記ステップS83で算出された画面座標の位置がカーソル位置として設定される。なお、画面座標に何らかの画像が表示される場合には、ユーザが画面座標の位置を視認することができるので、第1の方法では上述したような違和感を抱く可能性が高い。したがって、このような場合には第2の方法が特に有効である。ステップS84の次に、上記実施形態と同様のステップS9の処理が実行される。以上で、第2の方法の説明を終了する。
【0298】
以上のように、第2の方法においては、ゲーム装置3は、設定画面を表示する際に、入力装置8が画面の上下方向に関して中央を指し示している状態を検知し(ステップ54)、その状態における第1の座標を用いてオフセット量を決定する(ステップS97)。そして、その後のゲーム処理においては、第1の方法で算出された第1の座標を上記オフセット量に従って補正する(ステップS82)。したがって、入力装置8が画面の上下方向に関して中央を指し示している状態では、第1の座標のY’成分は0となり、その結果、画面座標は、上下方向に関して画面の中央の位置を表すことになる。したがって、第2の方法によれば、ユーザが入力装置8で画面の中心を指している場合には画面座標は画面の中心を表すことになるので、ユーザに違和感を与えることなく、画面座標を適切に算出することができる。
【0299】
なお、上記実施形態においては、指示位置が画面の中心となる場合には、画面座標の位置と指示位置とが一致する。一方、指示位置がその他の位置となる場合には、上記長さL等によっては、必ずしも画面座標の位置と指示位置とは一致しない。これは、画面の中心において画面座標の位置と指示位置とが一致していれば、ユーザはほとんど違和感を抱かないと考えられ、上記その他の位置で画面座標の位置と指示位置とが異なることによるデメリットはほとんどないからである。また、入力装置8の姿勢に応じて画面座標を決定するメリット(姿勢の変化に対する画面座標の変化の度合を適宜設定できるメリット)が上記デメリットよりも大きいと考えられるからである。
【0300】
なお、入力装置8が画面の中央を指し示す時点における姿勢を基準姿勢とした場合、当該時点における原点を決定する処理、換言すれば、第1の座標が原点を取るときの入力装置8の姿勢を決定する処理であるステップS97の処理は、「基準姿勢を決定する処理」であると言える。また、原点から補正後の第1の座標への方向は、上記基準姿勢から現在の姿勢までの変化の向き(回転方向)に対応し、原点から補正後の第1の座標までの距離は、上記基準姿勢から現在の姿勢までの変化量(回転量)に対応する。したがって、補正後の第1の座標を算出する処理(ステップS7およびステップS742)は、「上記基準姿勢から現在の姿勢までの変化の向きおよび変化量に応じた値となるように第1の座標を算出する処理」であると言える。以上より、第2の方法は、(a)入力装置8が画面の中央を指し示す時点における基準姿勢を決定する処理、および、(b)基準姿勢から現在の姿勢までの変化の向きおよび変化量に応じた第1の座標(ひいては画面座標)を算出する処理を実行するものである。したがって、第2の方法は、上記(a)および(b)の処理によって、基準姿勢においては常に特定の値(本実施形態では、画面中央の値)となるように画面座標を算出することを可能とし、これによってユーザが違和感を抱くことを防止するものである。
【0301】
[変形例]
(第2の方法に関する変形例)
上記実施形態では、ゲームの開始前の処理(ステップS2およびS3)では、入力装置8の姿勢に応じたカーソル(第1カーソル)ではなく、マーカ座標に基づく第2の座標の位置に表示されるカーソル(第2カーソル)が用いられる。このように、ゲーム装置3は、算出方法が異なる2種類のカーソルを用いてもよい。なお、仮に2種類のカーソルが画面上のいずれの位置でも一致しない(2種類のカーソルの位置が一致する場合における入力装置8の状態が一致しない)とすれば、一方のカーソルから他方のカーソルへ切り替わる際、ユーザは、カーソルの操作方法が全く変わってしまう感覚を受けるために、違和感を抱き、操作性が悪いと感じるおそれがある。これに対して、上記実施形態においては、2種類のカーソルは画面の中心において一致する(カーソルが画面の中心に位置する場合の入力装置8の状態が一致する)。そのため、2種類のカーソルを切り替える際に生じる違和感が少なく、カーソル操作に対してユーザが困惑することを防止することができる。
【0302】
また、上記実施形態においては、上記第2カーソルを用いてユーザが操作を行う際に第1カーソルに関するオフセット量を決定するので、表示されている第2カーソルの挙動はオフセット量の決定に応じて変化することがない。そのため、ゲーム装置3は、カーソルの挙動が急に変化することによる違和感をユーザに抱かせることなく、オフセット量を決定することができる。
【0303】
なお、他の実施形態においては、ゲーム装置3は、オフセット量を決定する際、上記第2カーソルを必ずしも用いる必要はない。例えば、ゲーム装置3は、「画面中央にコントローラを向けてAボタンを押して下さい」というメッセージを表示し(カーソルは表示しない)、Aボタンが押下された時点で上記ステップS96およびS97の処理を実行するようにしてもよい。この場合であっても、ユーザが「入力装置8が画面中央を指している」と感じる状態で、画面座標は画面の中心に位置することになるので、上記実施形態と同様、ユーザが抱く違和感を低減することができる。また、ゲーム装置3は、オフセット量を決定することを示唆する画面を表示する必要はなく、例えばゲーム画像が表示されている場合にオフセット量を決定してもよい。
【0304】
また、上記実施形態では、ゲーム装置3は、オフセット量を決定する処理(ステップS97)を、画面座標を入力として用いる処理(ステップS84)を実行前にのみ実行した。ここで、他の実施形態においては、画面座標を入力として用いる処理を繰り返し実行する場合、当該処理が繰り返し実行される合間に、オフセット量を(再度)決定する処理を実行してもよい。例えば上記実施形態に即して言えば、ゲーム中においてステップS3〜S9の処理ループが繰り返し実行される間に、オフセット量を決定する処理が実行されてもよい。例えば、ゲーム装置3は、ゲーム中において上記設定画面が表示されるタイミングでオフセット量を決定する処理を実行してもよいし、当該処理を所定時間間隔で実行してもよいし、ユーザが指示したタイミングで当該処理を実行してもよい。このように、ゲーム中においてオフセット量を決定し直すことによって、ゲーム中に入力装置を把持するユーザの状態が変化した場合(例えば、ゲームを立ってプレイしていたが、ゲーム途中で座った場合)でも、適切なオフセット量を決定し直すことができる。なお、オフセット量を決定し直す処理が実行されると、オフセット量が変化することによって、ユーザの意図しない画面座標の変化が生じ、ユーザがゲーム操作をうまく行えない可能性がある。そのため、ゲーム装置3は、画面座標を入力とする処理が実行されている期間(例えば、カーソルを用いてゲーム操作を行っている期間)には、オフセット量を決定し直す処理をできるだけ実行しないことが好ましい。また、当該処理を実行する場合には、画面座標の変化による影響が小さい場面(例えば、ゲームのポーズ中や、メニュー画面の表示中)で実行することが好ましい。
【0305】
上記実施形態では、ゲーム装置3は、仮想空間に設定される平面Qを用いて入力装置8の姿勢から第1の座標を算出し、第1の座標から画面座標を算出した。ここで、入力装置8の姿勢から画面座標を算出する方法は、姿勢に応じて画面座標の位置が変化する方法であればどのような方法であってもよい。例えば、ゲーム装置3は、第1の座標を算出せずに、入力装置8の姿勢から画面座標を直接算出してもよい(換言すれば、第1の座標は画面上の位置を表す座標であってもよい。)。具体的には、ゲーム装置3は、入力装置8が所定の基準姿勢となる場合に画面座標が画面の中心の位置となるように設定し、かつ、当該基準姿勢からの回転角度に比例した大きさだけ、当該基準姿勢からの回転方向に(中心位置にある画面座標を)移動させた位置を表すように、画面座標を算出してもよい。また、例えば、ゲーム装置3は、上記X’Y’座標を画面座標の座標系と一致するように設定することで、入力装置8の姿勢から画面座標を直接算出してもよい。
【0306】
また、上記実施形態においては、ゲーム装置3は、オフセット量を用いて第1の座標を補正することによって画面座標を間接的に補正するようにしたが、他の実施形態においては、画面座標を直接補正するようにしてもよい。具体的には、ゲーム装置3は、上記ステップS96において、第1の座標からさらに画面座標を算出し、ステップS97において、画面座標に関するオフセット量を算出してもよい。このとき、ステップS82およびS83においては、ゲーム装置3は、第1の方法で算出された第1の座標から画面座標を算出し、算出された画面座標をオフセット量に従って補正することによって、最終的な画面座標を得ればよい。
【0307】
また、上記実施形態においては、ゲーム装置3は、第1の座標に関してオフセット量を設定する、すなわち、X’Y’座標系を平面Q上で移動することによって、第1の座標の補正を行った(図32、図37)。ここで、他の実施形態においては、仮想空間における入力装置8の位置を中心にX’Y’座標系を回転させることによって、第1の座標を補正してもよい。図38は、第2の方法における補正方法の変形例を示す図である。図38は、仮想空間における平面Qを側方から見た図であって、点線で示す平面Qは、第1の方法で用いる平面Qと同じ平面であり、実線で示す平面Q’は、補正後の平面Qである。図38に示す変形例では、CPU10は、図35に示す上記ステップS96およびS97の処理に代えて、次の処理を実行する。すなわち、CPU10は、入力装置8の姿勢(第1姿勢M1)に基づいて、補正後のX’Y’座標系を設定する。X’Y’座標系は、入力装置8のZ軸ベクトルVZの方向に長さLだけ離れた位置が原点となり、かつ、Z軸ベクトルVZと垂直な平面Q’上に設定される。また、ゲーム中においては、CPU10は、図34に示すステップS7およびS82の処理に代えて、上記平面Q’上のX’Y’座標系によって表現される第1の座標を算出する。上記変形例によれば、仮想空間における入力装置8の位置からの距離が一定になるので、第1の座標(画面座標)をより正確に算出することができる。例えば、実際にテレビ2の画面が鉛直方向から傾いて設置される場合(例えば、画面が水平よりも下方を向いてテレビ2が天井に設置される場合)には、より正確に画面座標を算出することができる。一方、上記実施形態における補正方法では、入力装置8の位置に対して固定される平面内においてX’Y’座標系が設定されるので、補正の計算が簡単になる。したがって、テレビ2の画面が鉛直方向から大きく傾いて設置される状況が想定されない場合や、CPU10の処理負荷の低減を優先する場合には、上記実施形態における補正方法を採用することが好ましい。
【0308】
(撮像手段に関する変形例)
上記実施形態では、ゲーム装置3は、入力装置8が画面の中心を向く方向となったことを検知するために、入力装置8が備える撮像手段による撮像画像(マーカ座標)を用いた。ここで、ゲーム装置3は、空間内の所定位置から見たときの入力装置8の方向を知ることができれば、上記撮像画像に代えて、他の情報を用いて上記の検知を行ってもよい。例えば、テレビ2の周辺にカメラが設置される場合、ゲーム装置3は、当該カメラによって入力装置8が撮像された撮像画像を用いて上記検知を行ってもよい。また、上記検知を行うための方法はどのようなものであってもよく、例えば入力装置8の周囲に電波あるいは超音波等の信号を発生する装置を設置し、ゲーム装置3は、入力装置8において当該信号を検知することによって、空間内の所定位置から見たときの入力装置8の方向を検知するようにしてもよい。
【0309】
(入力装置8の姿勢算出に関する変形例)
なお、上記実施形態においては、ゲーム装置3は、ジャイロセンサ55および56、加速度センサ37、ならびに撮像素子40による検出結果を用いて、入力装置8の姿勢を算出した(ステップS3〜S6)。ここで、入力装置8の姿勢を算出する方法はどのような方法であってもよい。例えば、入力装置8の姿勢は、ジャイロセンサの検出結果のみを用いて算出されてもよいし、加速度センサの検出結果のみを用いて算出されてもよい。
【0310】
なお、上記実施形態においては、3軸回りの角速度を検出するジャイロセンサを用いて、3次元の姿勢を算出する場合を例として説明したが、2次元の姿勢を算出する場合においても本発明を適用することが可能である。例えば、ロール方向の回転を行わない等の前提であれば、ピッチ方向およびヨー方向の回転に関する2次元の姿勢を、2軸回りの角速度を2軸ジャイロセンサで検出することによって算出してもよい。そして、当該2次元の姿勢から画面座標を算出してもよい。
【0311】
また、他の実施形態においては、第2補正処理は、入力装置8がマーカ部6を撮像していると推測される場合にのみ、実行されるようにしてもよい。具体的には、CPU10は、第2補正処理を実行する前に、入力装置8(撮像手段)がマーカ部6を撮像可能な向きを向いているか否かを判定する。この判定は、第1の姿勢あるいは第2の姿勢を用いて行うことができる。例えば、第1の姿勢(または第2の姿勢)が、入力装置8の撮像方向が入力装置8からマーカ部6への向きに対して同じ向きかそれとも逆向きかを判定するようにしてもよい。また、上記の判定に用いられる第1の姿勢は、前回の処理ループにおいて第1および第2補正処理が行われた第1の姿勢であってもよいし、今回の処理ループにおいて算出されて第1補正処理が行われた第1の姿勢であってもよい。
【0312】
上記の判定の結果、CPU10は、入力装置8がマーカ部6を撮像可能な向きを向いていると判定される場合、第2補正処理を実行し、マーカ部6を撮像可能な向きを向いていないと判定される場合、第2補正処理をスキップする。なお、マーカ部6でない物(例えば、部屋の電灯や窓の外の太陽光等)がマーカ部6と誤検出されることがあり、誤検出によって得られたマーカ座標を用いて第3の姿勢が算出される場合、かかる第3の姿勢を用いて第2補正処理を行っても正確に補正を行うことができない。これに対して、上記の判定処理を行うことにより、誤検出によって得られたマーカ座標から算出される第3の姿勢を用いて第2補正処理が行われることを防止することができる。これによって、第2補正処理をより正確に行うことができる。
【産業上の利用可能性】
【0313】
以上のように、本発明は、ジャイロセンサの出力を用いて表示装置に表示される表示範囲を制御すること等を目的として、Webページや電子番組表を表示装置に表示するための情報処理装置や、ゲーム画像を表示装置に表示するためのゲーム装置等として利用することができる。
【符号の説明】
【0314】
1 ゲームシステム
2 テレビ
3 ゲーム装置
4 光ディスク
5 コントローラ
6 マーカ部
7 ジャイロセンサユニット
8 入力装置
10 CPU
11c GPU
11e 内部メインメモリ
12 外部メインメモリ
63 角速度データ
64 加速度データ
65 マーカ座標データ
68 第1姿勢データ
77 仮想面座標データ
78 はみ出しベクトルデータ
79 カメラ向きデータ
80 カメラ位置データ
81 カーソル位置データ
91 仮想カメラ
92 表示対象

【特許請求の範囲】
【請求項1】
入力装置が備えるジャイロセンサによって検出される角速度を入力し、表示装置に画像を表示させる情報処理装置であって、
前記角速度に基づいて前記入力装置の姿勢を算出する姿勢算出部と、
所定空間の所定位置から前記姿勢を表すベクトルの方向へ延ばした線分と、当該所定空間における所定平面との交点の座標を算出する座標算出部と、
表示対象のうちで前記表示装置に表示すべき表示範囲を前記座標に基づいて制御する表示制御部とを備える、情報処理装置。
【請求項2】
前記表示制御部は、前記表示対象が配置される仮想空間内において仮想カメラの向きおよび/または位置を前記座標に基づいて変化させることで前記表示範囲を制御する、請求項1記載の情報処理装置。
【請求項3】
前記情報処理装置は、前記入力装置に設けられた操作手段に対する方向指示操作を示す操作情報をさらに入力し、
前記表示制御部は、前記座標に基づいて前記仮想カメラの向きを変化させ、前記操作情報に基づいて前記仮想カメラの位置を変化させることで前記表示範囲を制御する、請求項2記載の情報処理装置。
【請求項4】
前記表示制御部は、前記座標が前記所定平面における所定領域の外側の位置を示す場合、前記表示範囲を変化させる、請求項1から請求項3のいずれか1項に記載の情報処理装置。
【請求項5】
前記所定領域と前記表示装置の画面の領域とが対応するように、当該画面上の位置を前記座標に基づいて算出する画面位置算出部をさらに備える、請求項4に記載の情報処理装置。
【請求項6】
前記画面位置算出部が算出した前記画面上の位置に所定の指示画像を表示させる指示画像表示部と、
前記指示画像の位置に基づいて所定の情報処理を実行する処理実行部とをさらに備える、請求項5に記載の情報処理装置。
【請求項7】
前記表示制御部は、前記表示範囲を変化させる方向を、前記所定領域から前記座標が示す位置までの方向に応じて決定する、請求項4から請求項6のいずれか1項に記載の情報処理装置。
【請求項8】
前記表示制御部は、前記表示範囲を変化させる度合を、前記座標が示す位置が前記所定領域から離れている度合に基づいて決定する、請求項4から請求項7のいずれか1項に記載の情報処理装置。
【請求項9】
前記表示制御部は、前記表示範囲を変化させる度合を、前記座標が前記所定領域の外側に位置する場合における当該座標の速度に基づいて決定する、請求項4から請求項7のいずれか1項に記載の情報処理装置。
【請求項10】
前記表示制御部は、前記座標が前記所定領域の外側に出てからの所定期間における当該座標の速度の最大値を少なくとも用いて、前記表示範囲を変化させる速度を決定する、請求項9に記載の情報処理装置。
【請求項11】
前記表示制御部は、ユーザが前記入力装置を用いて指定した期間において、前記座標に基づき前記表示範囲を変化させる、請求項1から請求項10のいずれか1項に記載の情報処理装置。
【請求項12】
前記表示制御部は、前記座標の移動方向に応じた方向へ、前記座標の移動量に応じた量だけ前記表示範囲を移動させる、請求項11に記載の情報処理装置。
【請求項13】
前記表示制御部は、前記所定平面における所定の基準位置から前記座標が示す位置までの方向に応じた方向へ、当該所定の基準位置から前記座標が示す位置までの距離に応じた速度で前記表示範囲を移動させる、請求項11に記載の情報処理装置。
【請求項14】
入力装置が備えるジャイロセンサによって検出される角速度を入力し、表示装置に画像を表示させる情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、
前記角速度に基づいて前記入力装置の姿勢を算出する姿勢算出手段と、
所定空間の所定位置から前記姿勢を表すベクトルの方向へ延ばした線分と、当該所定空間における所定平面との交点の座標を算出する座標算出手段と、
表示対象のうちで前記表示装置に表示すべき表示範囲を前記座標に基づいて制御する表示制御手段として前記コンピュータを機能させる、情報処理プログラム。
【請求項15】
前記表示制御手段は、前記表示対象が配置される仮想空間内において仮想カメラの向きおよび/または位置を前記座標に基づいて変化させることで前記表示範囲を制御する、請求項14記載の情報処理プログラム。
【請求項16】
前記情報処理装置は、前記入力装置に設けられた操作手段に対する方向指示操作を示す操作情報をさらに入力し、
前記表示制御手段は、前記座標に基づいて前記仮想カメラの向きを変化させ、前記操作情報に基づいて前記仮想カメラの位置を変化させることで前記表示範囲を制御する、請求項15記載の情報処理プログラム。
【請求項17】
前記表示制御手段は、前記座標が前記所定平面における所定領域の外側の位置を示す場合、前記表示範囲を変化させる、請求項14から請求項16のいずれか1項に記載の情報処理プログラム。
【請求項18】
前記所定領域と前記表示装置の画面の領域とが対応するように、当該画面上の位置を前記座標に基づいて算出する画面位置算出手段として前記コンピュータをさらに機能させる、請求項17に記載の情報処理プログラム。
【請求項19】
前記画面位置算出手段が算出した前記画面上の位置に所定の指示画像を表示させる指示画像表示手段と、
前記指示画像の位置に基づいて所定の情報処理を実行する処理実行手段として前記コンピュータをさらに機能させる、請求項18に記載の情報処理プログラム。
【請求項20】
前記表示制御手段は、前記表示範囲を変化させる方向を、前記所定領域から前記座標が示す位置までの方向に応じて決定する、請求項17から請求項19のいずれか1項に記載の情報処理プログラム。
【請求項21】
前記表示制御手段は、前記表示範囲を変化させる度合を、前記座標が示す位置が前記所定領域から離れている度合に基づいて決定する、請求項17から請求項20のいずれか1項に記載の情報処理プログラム。
【請求項22】
前記表示制御手段は、前記表示範囲を変化させる度合を、前記座標が前記所定領域の外側に位置する場合における当該座標の速度に基づいて決定する、請求項17から請求項20のいずれか1項に記載の情報処理プログラム。
【請求項23】
前記表示制御手段は、前記座標が前記所定領域の外側に出てからの所定期間における当該座標の速度の最大値を少なくとも用いて、前記表示範囲を変化させる速度を決定する、請求項22に記載の情報処理プログラム。
【請求項24】
前記表示制御手段は、ユーザが前記入力装置を用いて指定した期間において、前記座標に基づき前記表示範囲を変化させる、請求項14から請求項23のいずれか1項に記載の情報処理プログラム。
【請求項25】
前記表示制御手段は、前記座標の移動方向に応じた方向へ、前記座標の移動量に応じた量だけ前記表示範囲を移動させる、請求項24に記載の情報処理プログラム。
【請求項26】
前記表示制御手段は、前記所定平面における所定の基準位置から前記座標が示す位置までの方向に応じた方向へ、当該所定の基準位置から前記座標が示す位置までの距離に応じた速度で前記表示範囲を移動させる、請求項24に記載の情報処理プログラム。
【請求項27】
入力装置が備えるジャイロセンサによって検出される角速度を入力し、表示装置に画像を表示させる情報処理システムであって、
前記角速度に基づいて前記入力装置の姿勢を算出する姿勢算出部と、
所定空間の所定位置から前記姿勢を表すベクトルの方向へ延ばした線分と、当該所定空間における所定平面との交点の座標を算出する座標算出部と、
表示対象のうちで前記表示装置に表示すべき表示範囲を前記座標に基づいて制御する表示制御部とを備える、情報処理システム。
【請求項28】
入力装置が備えるジャイロセンサによって検出される角速度を入力し、表示装置に画像を表示させる表示範囲制御方法であって、
前記角速度に基づいて前記入力装置の姿勢を算出する姿勢算出ステップと、
所定空間の所定位置から前記姿勢を表すベクトルの方向へ延ばした線分と、当該所定空間における所定平面との交点の座標を算出する座標算出ステップと、
表示対象のうちで前記表示装置に表示すべき表示範囲を前記座標に基づいて制御する表示制御ステップとを備える、表示範囲制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate