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