(57)【要約】      （修正有）【課題】３次元空間における所定の軸方向を検出する軸方向検出手段の検出値に基づいて、デバイスの向きを決定する際のフリップの発生を減らすこと。【解決手段】本プログラムは、所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める単純回転演算部と、前記回転情報に基づき、所与の時点のデバイスの向き情報を求める向き情報演算部と、としてコンピュータを機能させるプログラムである。【選択図】図１３
2011050561.tif 000002
【特許請求の範囲】
【請求項１】
３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定するプログラムであって、
所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、
ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める単純回転演算部と、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求める向き情報演算部と、としてコンピュータを機能させるプログラム。
【請求項２】
請求項１において、
前記単純回転演算部は、
ワールド座標系においてガイド軸方向を示す軸ベクトルを第１のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２ベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求め、
前記向き情報演算部は、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求めるプログラム。
【請求項３】
請求項１において、
前記単純回転演算部は、
ワールド座標系においてガイド軸方向を示す軸ベクトルを第３のベクトルとし、前記第３のベクトルと方向の異なる目標ベクトルを第１のベクトルとし、前記第１ベクトルと前記第２のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第２のベクトルを含む平面上で、前記第２のベクトルと前記第１のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第１の単純回転と、前記第１のベクトルと前記第３のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第３のベクトルを含む平面上で、前記第１のベクトルと前記第３のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第２の単純回転に関する回転情報を求め、
前記向き情報演算部は、  
前記回転情報に基づき、所与の時点のデバイスの向き情報を求めるプログラム。
【請求項４】
請求項３において、
前記単純回転演算部は、
前記第２の単純回転に関する回転情報の値を予め記憶させておき、前記第２の単純回転については予め記憶されている前記回転情報の値を用いて前記回転情報を演算するプログラム。
【請求項５】
請求項１において、
前記単純回転演算部は、
所与の時点でガイド方向検出手段が検出したデバイス座標系におけるガイド軸方向を示すガイドベクトルと、前記所与の時点より過去の時点のデバイスの向き情報と当該向き情報に対応するガイドベクトルを受け取り、
前記所与の時点におけるガイドベクトルを第２のベクトルとし、前記過去の時点のガイドベクトルを第１のベクトルとし、
前記第１のベクトルと前記第２のベクトルとを始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転を前記デバイスに作用させた場合の回転情報を求め、
前記向き情報演算部は、
前記回転情報と前記過去の時点の前記デバイスの向き情報に基づき、前記所与の時点の前記デバイスの向き情報を求めるプログラム。
【請求項６】
請求項１乃至５のいずれかにおいて、 
前記デバイスの向き情報に基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行うゲーム演算処理と、
オブジェクト空間を仮想カメラからみた画像を生成する画像生成部と、としてコンピュータを機能させるプログラム
【請求項７】
請求項１乃至６のいずれかにおいて、
前記ガイド方向検出手段は重力方向を検出する加速度センサであって、
前記ガイド軸方向は重力方向であるプログラム。
【請求項８】
コンピュータが読み取り可能な情報記憶媒体であって、請求項１乃至７のいずれかに記載のプログラムが記憶されている情報記憶媒体。
【請求項９】
３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定する向き決定装置であって、
所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、
ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める単純回転演算部と、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求める向き情報演算部と、を含む向き決定装置。
【請求項１０】
３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定するゲームシステムであって、
所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、
ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める単純回転演算部と、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求める向き情報演算部と、
前記デバイスの向き情報に基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行うゲーム演算処理と、
オブジェクト空間を仮想カメラからみた画像を生成する画像生成部と、を含むゲームシステム。
【請求項１１】
３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定する向き決定方法であって、
所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、
ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める単純回転演算ステップと、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求める向き情報演算ステップと、を含む向き決定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報記憶媒体、向き決定装置、ゲームシステム及び向き決定方法に関する。
【背景技術】
【０００２】
最近では、ゲーム用のコントローラに加速度センサを設けてコントローラの向きや回転を検出して、ゲーム入力とすることが可能なゲーム装置が存在する。このようなゲーム装置では、検出された向きや回転に応じてゲーム空間のオブジェクトの向きや回転を制御して、当該オブジェクトを含むゲーム画像を生成するゲームが実現されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２６７５８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
加速度センサが検出する加速度は、重力加速度と運動加速度動きによる加速度との和である。そのため、加速運動をしていない状態であれば、加速度センサを使って重力の方向を知ることができる。これを利用して、３次元空間内でのコントローラの向きを取得し、ゲーム等の入力として使用することが考えられる。このようなゲームにおいてはコントローラの向きや回転に応じて矛盾なく動作するゲーム画像を生成することが重要なポイントとなる。
【０００５】
しかし、重力方向から分かるのは上下の向きだけなので、コントローラの向きを決めるには情報が足りない。上記引用文献には、何らかの計算条件を追加することにより、向きを決定できるようにする手法の具体例が開示されている。 
【０００６】
しかし開示されている手法では、コントローラの向きが不連続に変化する現象フリップ現象が２方向で発生し、コントローラの回転に伴うゲーム画像の変化が不自然または不連続になりやすいという問題があった。
【０００７】
本発明は、以上のような課題に鑑みてなされたものであり、本発明のいくつかの態様によれば、３次元空間における所定の軸方向を検出する軸方向検出手段の検出値に基づいてコントローラの向きを決定する際にフリップの発生を減らすことが可能なプログラム、情報記憶媒体、向き決定装置、ゲームシステム及び向き決定方法を提供することができる。
【課題を解決するための手段】
【０００８】
（１）本発明は、
３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定するプログラムであって、
所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、
ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める単純回転演算部と、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求める向き情報演算部と、としてコンピュータを機能させるプログラムに関する。
【０００９】
また本発明は上記各部を含む向き決定装置、ゲームシステムに関する。また本発明はコンピュータ読み取り可能な情報記憶媒体であって、上記各部としてコンピュータを機能させるプログラムを記憶した情報記憶媒体に関する。また上記各部に対応するステップを含む向き決定方法に関する。
【００１０】
ここにおいてガイド軸方向とは、３次元空間内にある軸であればよい。またガイド方向検出手段とは、前記ガイド軸方向を検出するものであればよい。例えば重力方向をガイド軸方向とし、重力方向を検出する加速度センサをガイド方向検出手段としてもよい。   また地磁気の方向をガイド軸方向とし、地磁気の方向を検出する地磁気センサをガイド方向検出手段としてもよい。また点状のマーカ（ポイントマーカ）とこれを撮影するカメラを使用し、カメラとマーカを結ぶ直線をガイド軸とし、カメラをガイド方向検出手段としてもよい。
【００１１】
デバイスは、向き情報入力デバイスとして機能するデバイスであり、ガイド方向検出手段によって向き情報が取得可能なデバイスであればよい。例えばコントローラ等でもよい。
【００１２】
デバイスの向きは、ワールド座標系におけるデバイスの向きでもよいし、ワールド座標系に対するデバイス座標系の向きでもよい。
【００１３】
回転情報とは、デバイス座標系の向きを表すマトリクスや四元数や角度でもよい。例えばデバイス座標系からワールド座標系への変換マトリクスでもよいし、ワールド座標系からデバイス座標系への変換マトリクスでもよい。また各軸周りの回転角である回転パラメータ（θｘ、θｙ、θｚ）でもよい。
【００１４】
デバイスの向き情報は、回転情報をそのまま用いてもよいし、回転情報と初期状態や前回の状態に基づいて演算を施した値を用いてもよい。
【００１５】
第１のベクトルと第２のベクトルが同じ向きの場合には無回転（回転マトリクスで表すと単位行列）とし、第１のベクトルと第２のベクトルが反対向きの場合には予め用意した回転情報を用いてもよい。
【００１６】
例えば本プログラムが画像生成装置に適用される場合には、フレーム毎にガイドベクトルを受け取り、デバイスの向きを決定するようにしてもよい。
【００１７】
本発明によれば、例えばフレーム毎に初期状態または過去の状態のデバイスに対する回転情報に基づきデバイスの向きを決定することができる。
【００１８】
（２）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
ワールド座標系においてガイド軸方向を示す軸ベクトルを第１のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２ベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求め、
前記向き情報演算部は、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求めてもよい。
【００１９】
ワールド座標系（Xw,Yw,Zw）のいずれかの軸を、ガイド軸と合わせてもよい。例えばガイド軸方向が上下方向である場合にはワールド座標系のＹ軸をガイド軸としてもよい。
【００２０】
この様にすると、ガイドベクトルに基づき、システムが定めた基準状態に対する所与の時点のデバイスの向き情報を一意に定めることができる。
【００２１】
またデバイスの向きが不連続に変化する現象であるフリップが生じる方向を１方向にすることができる。
【００２２】
（３）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
ワールド座標系においてガイド軸方向を示す軸ベクトルを第３のベクトルとし、前記第３のベクトルと方向の異なる目標ベクトルを第１のベクトルとし、前記第１ベクトルと前記第２のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第２のベクトルを含む平面上で、前記第２のベクトルと前記第１のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第１の単純回転と、前記第１のベクトルと前記第３のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第３のベクトルを含む平面上で、前記第１のベクトルと前記第３のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第２の単純回転に関する回転情報を求め、
前記向き情報演算部は、
前記回転情報に基づき、所与の時点のデバイス向き情報を求めてもよい。
【００２３】
この様にすると目標ベクトルの逆方向が特異点（フリップが発生する点）となる。従ってガイドベクトルが、目標ベクトルの逆方向を向く場合のみフリップが発生し、それ以外はフリップが発生しない。目標ベクトルは任意に設定することができるので、どの方向をフリップ方向とするかを自由に設定することができる。またガイドベクトルが向く方向として頻度が小さい方向と逆方向になるように目標ベクトルを設定することで、フリップ現象を起こりにくくすることができる。
【００２４】
（４）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
前記第２の単純回転に関する回転情報の値を予め記憶させておき、前記第２の単純回転については予め記憶されている前記回転情報の値を用いて前記回転情報を演算してもよい。
【００２５】
この様にするとリアルタイムに演算する場合に比べて演算負荷を軽くすることができる。
【００２６】
（５）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
所与の時点でガイド方向検出手段が検出したデバイス座標系におけるガイド軸方向を示すガイドベクトルと、前記所与の時点より過去の時点のデバイスの向き情報と当該向き情報に対応するガイドベクトルを受け取り、
前記所与の時点におけるガイドベクトルを第２のベクトルとし、前記過去の時点のガイドベクトルを第１のベクトルとし、
前記第１のベクトルと前記第２のベクトルとを始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転を前記デバイスに作用させた場合の回転情報を求めてもよい。
【００２７】
ここで、所与の時点より過去の時点とは、例えば前回または直近の時点（例えば１つ前のフレーム）でもよい。ここで直近とは、現時点からあらかじめ設定された短い期間だけさかのぼることを意味し、例えば前前回等でもよい。短い期間の長さをどのように設定するかは設計事項である。
【００２８】
この様にすると、過去の履歴を反映させてデバイスの向きを決定することができるので、デバイスの向きや回転の変化の連続性を保証することができる。
【００２９】
しかも単純回転を用いているので、デバイスに自然な挙動をとらせることができる。例えば、ガイドベクトルがある経路でv1から v2へと動き、その後全く同じ経路を逆に辿り v1に戻った場合、特開２００７−２６７５８１号公報に記載されている「外積を2回使い前回の履歴に依存させる方法」では、元に戻ったり戻らなかったりするが、単純回転を使う方法ならば必ず元の状態に戻ることができる。
【００３０】
（６）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記デバイスの向き情報に基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行うゲーム演算処理と、
オブジェクト空間を仮想カメラからみた画像を生成する画像生成部と、としてコンピュータを機能させてもよい。
【００３１】
この様にするとデバイスの傾きや回転にリアルタイムに連動してオブジェクトや視線方向がリアルタイムに変化するゲーム画像を生成することができる。
【００３２】
（７）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記ガイド方向検出手段は重力方向を検出する加速度センサであって、
前記ガイド軸方向は重力方向でもよい。
【００３３】
加速度センサが検出する加速度は、重力加速度と運動加速度動きによる加速度との和である。そのため、加速運動をしていない状態であれば、加速度センサを使って重力の方向を知ることができるので、これを利用して、３次元空間内でのデバイスの向きを取得することができる。
【図面の簡単な説明】
【００３４】
【図１】本実施形態の向き決定装置の機能ブロック図。
【図２】図２（Ａ）〜図２（Ｄ）は、向き情報入力デバイスの概略外観図。
【図３】コントローラ座標系を示す図。
【図４】アップベクトルvuとXw、Yw、Zwの関係を示した図。
【図５】アップベクトルvuの向きを変化させる様子を示す図。
【図６】球面S 上にXw、Zwの向きを表すグリッドを構成した図。
【図７】図７（Ａ）〜（Ｄ）は、従来手法の第１例の特性グリッドを示す図。
【図８】図８（Ａ）〜（Ｄ）は、従来手法の第２例の特性グリッドを示す図。
【図９】図９は、本実施の形態の単純回転について説明するための概念図。
【図１０】図１０（Ａ）〜（Ｄ）は、単純回転（単回転）の手法の特性グリッドを示す図。
【図１１】目標ベクトルについて説明するための図。
【図１２】図１２（Ａ）〜（Ｄ）は、単純回転（複回転）の手法の特性グリッドを示す図。
【図１３】本実施の形態の単純回転方式（単回転）の手法でコントローラの向きを決定する処理の流れを示すフローチャート。
【図１４】本実施の形態の単純回転方式（複回転）の手法でコントローラの向きを決定する処理の流れを示すフローチャート。
【図１５】本実施の形態の履歴依存型の手法でコントローラの向きを決定する処理の流れを示すフローチャート。
【図１６】本実施形態のゲームシステムの機能ブロック図の一例。
【図１７】図１７（Ａ）〜（Ｄ）は、実施例（その１）において球面S上の各点に対して設定された旋回範囲の例。
【図１８】図１８（Ａ）〜（Ｄ）は、実施例（その２）において球面S上の各点に対して設定された旋回範囲の例。
【図１９】本実施の形態のハイブリット型の手法（実施例２）でコントローラの向きを決定する処理の流れを示すフローチャート。
【図２０】+Zwの旋回範囲について説明するための図。
【図２１】旋回範囲外から旋回範囲内への修正について説明するための図。
【発明を実施するための形態】
【００３５】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成の全てが本発明の必須構成要件であるとは限らない。
【００３６】
１  構成
図１は、向き決定装置の機能ブロック図の一例である。なお本実施形態の向き決定装置では、図１の各部を全て含む必要はなく、その一部を省略した構成としてもよい。
【００３７】
本実施形態の向き決定装置１は、向き情報入力デバイス（例えばコントローラ）２に含まれるガイド方向検出部２０の出力値であるガイドベクトルに基づいて、コントローラの向き（回転マトリクスや各軸の回転角や四元数）を決定する処理を行う。
【００３８】
ガイド方向検出部２０は、重力の向きを検出可能な加速度センサで構成してもよいし、３次元空間のある軸方向を検出可能な他の装置（例えば地磁気センサやポイントマーカとカメラ）で構成してもよいが、ここではガイド方向検出部２０が加速度センサで構成されている場合を例にとり説明する。
【００３９】
本実施形態では、向き情報入力デバイス２は、ガイド方向検出部２０、マイコン２２、通信部２４を含んで構成されている。例えば、向き情報入力デバイス２として、図２（Ａ）〜図２（Ｃ）に示すようなゲームコントローラや図２（Ｄ）に示すような携帯電話機などが考えられる。
【００４０】
ガイド方向検出部２０は、互いに直交する３軸方向（ｘ軸方向、ｙ軸方向、ｚ軸方向）の加速度を検出する。向き情報入力デバイス２の向きが変わると、ガイド方向検出部２０の向きも変わる。また、向き情報入力デバイスによって、ガイド方向検出部の向きは   それぞれ異なる。例えば、図２（Ａ）〜図２（Ｄ）に示す向き情報入力デバイス２では、    それぞれのガイド方向検出部２０の３つの検出軸方向が図２（Ａ）〜図２（Ｄ）に示す方向になっている。
【００４１】
例えばガイド方向検出部２０として加速度センサを用いる場合には、一定時間（例えば、５ｍｓｅｃ）毎に３軸分の加速度を検出し、加速度センサによって検出された加速度ベクトル（ガイドベクトル）は、通信部２４によって向き決定装置１に送信される。
【００４２】
マイコン（マイクロコンピュータ）２２は、加速度センサが検出した加速度ベクトル（ガイドベクトル）を通信部２４を介して向き決定装置１に送信させる処理を行う。
【００４３】
通信部２４は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、向き決定装置１にデータを無線で送信する。通信部２４は、加速度センサによって検出された加速度ベクトル（ガイドベクトル）を、所定時間間隔で順次向き決定装置１に送信している。なお、通信部２４は、向き決定装置１と通信ケーブルで接続し、当該通信ケーブルを介して検出情報の送信を行うようにしてもよい。
【００４４】
本実施形態の向き決定装置１は、処理部１０、記憶部３０、操作部３２、表示部３４、情報記憶媒体３６、通信部３８、音出力部４０を含んで構成される。
【００４５】
記憶部３０は、処理部１０や通信部３８などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などのハードウェアにより実現できる。
【００４６】
操作部３２は、操作ボタン、タッチパネル型ディスプレイ、キーボード、マウスなどにより実現できる。
【００４７】
表示部３４は、処理部１０により指示された情報を出力するものであり、その機能は、ＣＲＴディスプレイ、ＬＣＤ（液晶ディスプレイ）、ＯＥＬＤ有機ＥＬディスプレイ、ＰＤＰ（プラズマディスプレイパネル）、タッチパネル型ディスプレイ、或いはＨＭＤ（ヘッドマウントディスプレイ）などのハードウェアにより実現できる。
【００４８】
音出力部４０は、処理部１０により指示された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどのハードウェアにより実現できる。
【００４９】
通信部３８は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、向き情報入力デバイス２の通信部２４を介して、向き情報入力デバイス２からデータを受信する。例えば、通信部３８は、向き情報入力デバイス２においてガイド方向検出部２０により検出された情報を、所定時間間隔で順次受信する。
【００５０】
また、通信部３８は、ネットワーク（インターネット）を介してサーバと通信することができるようにしてもよい。その機能は、各種プロセッサ又は通信用ＡＳＩＣ、ネットワーク・インタフェース・カードなどのハードウェアや、プログラムなどにより実現できる。また、通信部３８は、有線、無線いずれの通信も行うことができる。
【００５１】
処理部１０（プロセッサ）は、向き情報入力デバイス２から受信した加速度センサ２０の検出情報や情報記憶媒体３６から記憶部３０に展開されたプログラム等に基づいて処理を行う。
【００５２】
本実施形態の処理部１０は、単純回転演算部１１、向き情報演算部１２を含む。また、処理部１０は、表示制御部１５や音出力制御部１６を含んでもよい。
【００５３】
単純回転演算部１１は、３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定するプログラムであって、所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める処理を行う。
【００５４】
向き情報演算部１２は、前記回転情報に基づき、所与の時点のデバイスの向き情報を求める処理を行う。
【００５５】
また単純回転演算部１１は、ワールド座標系においてガイド軸方向を示す軸ベクトルを第１のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２ベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求め、向き情報演算部１２は、前記回転情報に基づき、所与の時点のデバイスの向き情報を求めてもよい。
【００５６】
また単純回転演算部１１は、ワールド座標系においてガイド軸方向を示す軸ベクトルを第３のベクトルとし、前記第３のベクトルと方向の異なる目標ベクトルを第１のベクトルとし、前記第１ベクトルと前記第２のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第２のベクトルを含む平面上で、前記第２のベクトルと前記第１のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第１の単純回転と、前記第１のベクトルと前記第３のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第３のベクトルを含む平面上で、前記第１のベクトルと前記第３のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第２の単純回転に関する回転情報を求め、向き情報演算部１２は、前記回転情報に基づき、所与の時点のデバイスの向き情報を求めてもよい。
【００５７】
また単純回転演算部１１は、前記第２の単純回転に関する回転情報の値を予め記憶させておき、前記第２の単純回転については予め記憶されている前記回転情報の値を用いて前記回転情報を演算してもよい。
【００５８】
また向き情報演算部１２は、ワールド座標系とデバイス座標系の第１の軸に対応する軸が一致し、前記第１の軸に直交するとともに互いに直交する第２の軸と第３の軸に対応する各軸が所定の配置にある状態を初期状態として定義し、初期状態のデバイスの向き情報と前記回転情報に基づき所与の時点のデバイスの向き情報を求めてもよい。
【００５９】
この様にするとデバイス座標系がワールド座標系に対して第１軸の周りに所定の角度だけ回転して配置されている状態を初期状態として、ガイドベクトルに対応するデバイスの向きを一意に設定することができる。
【００６０】
また向き情報演算手段１２は、ワールド座標系とデバイス座標系の第１の軸と前記第１の軸に直交するとともに互いに直交する第２の軸と第３の軸に対応する各軸の方向が一致する状態を初期状態として定義し、初期状態のデバイスの向き情報と前記回転情報に基づき所与の時点のデバイスの向き情報を求めてもよい。
【００６１】
この様にするとワールド座標系とデバイス座標系の対応する各軸の方向が一致した状態を初期状態として、ガイドベクトルに対応するデバイスの向きを一意に設定することができる。
【００６２】
また単純回転演算部１１は、所与の時点でガイド方向検出手段が検出したデバイス座標系におけるガイド軸方向を示すガイドベクトルと、前記所与の時点より過去の時点のデバイスの向き情報と当該向き情報に対応するガイドベクトルを受け取り、前記所与の時点におけるガイドベクトルを第２のベクトルとし、前記過去の時点のガイドベクトルを第１のベクトルとし、前記第１のベクトルと前記第２のベクトルとを始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転を前記デバイスに作用させた場合の回転情報を求め、前記向き情報演算部は、前記回転情報と前記過去の時点の前記デバイスの向き情報に基づき、前記所与の時点の前記デバイスの向き情報を求めてもよい。
【００６３】
表示制御部１５は、表示部３４に所定の情報を表示させる処理を行う。
【００６４】
音出力制御部１６は、音出力部４０から所定の音を出力させる処理を行う。
【００６５】
情報記憶媒体３６（コンピュータにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク（ＭＯ）、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ（ＲＯＭ）などにより実現できる。処理部１０は、情報記憶媒体３６に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体３６には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。
【００６６】
なお、本実施形態の各部としてコンピュータを機能させるためのプログラム（データ）は、サーバが有する、記憶部、情報記憶媒体からネットワークを介して情報記憶媒体３６（または、記憶部３０）に配信するようにしてもよい。このようなサーバの情報記憶媒体の使用も本発明の範囲に含まれる。
【００６７】
２  座標系とコントローラの向き
ここでは向き情報入力デバイスとしてコントローラを例にとり説明する。
【００６８】
ワールド座標系をXw、Yw、Zwとし、各座標軸の向きを+Xw=右方向、+Yw=上方向、+Zw=手前方向と定める。一方、コントローラ座標系（デバイス座標系の一例）を図３のようにXc、Yc、Zcとし、Xc、Yc、Zcと、Xw、Yw、Zwの各軸が一致した状態を基準状態と呼ぶことにする。
【００６９】
「ワールド座標系に対するコントローラ座標系の向き」を表すマトリクスをＭとする。マトリクスの要素の並びは、列ベクトルに対して左からマトリクスを掛ける方式とする。Ｍの要素を次のように定める。 
【数１】
2011050561.tif 000003
また、ベクトルv0、v1、v2を次のように定義する。 
【数２】
2011050561.tif 000004
Ｍの要素を、３つの行ベクトル（列ベクトルの転置として表す）の並びと見なして、便宜上次のように書き表すことにする。 
【数３】
2011050561.tif 000005
Ｍは向きを表すマトリクス回転マトリクスなので、Ｍ-1 =ＭＴ  となる。Ｍ-1 は、「コントローラ座標系に対するワールド座標系の向き」を表すマトリクスである。Ｍ-1 の要素を、３つの列ベクトルの並びと見なして、便宜上次のように書き表すことにする。
【数４】
2011050561.tif 000006
また、各軸方向の単位ベクトルe0, e1, e2を次のように定義する。
【数５】
2011050561.tif 000007
すると次式が成り立つ。
【数６】
2011050561.tif 000008
【数７】
2011050561.tif 000009
従って、コントローラ座標系におけるベクトルv0,v1,v2は、それぞれワールド座標系におけるベクトルe0,e1,e2即ち+Xw、+Yw、+Zw方向の単位ベクトルに一致することが分かる。
【００７０】
３  問題の定義
３．１  アップベクトル
加速度センサ（ガイド方向検出部の一例）によって検出された上方向ベクトル（ガイドベクトルの一例）を「アップベクトル」と呼ぶことにし、アップベクトルvuとする。vuの要素は次のとおりとする。
【数８】
2011050561.tif 000010
加速度センサが検出した加速度ベクトル重力加速度をa = [ax ay az]T とする。このaはコントローラ座標系における値である。アップベクトルはvu = a/|a|によって得られる。
【００７１】
３．２  問題の定義  
コントローラの向き決めにおいて、解くべき問題は次のように表せる。与えられたアップベクトルvuから、コントローラの向きＭを決める。
【００７２】
コントローラ座標系のアップベクトルvuは、ワールド座標系では上向きの単位ベクトルになるので、次式が成り立つ。
【数９】
2011050561.tif 000011
従って、
【数１０】
2011050561.tif 000012
となり、マトリクスＭの要素の１行に相当するv1は、必ずvuに等しくなる。
【００７３】
マトリクスＭの残り要素v0及びv2については、何らかの計算条件を追加して、決定しなければならない。追加する計算条件は種々考えられるが、この計算条件次第で、コントローラの向き決めの挙動が変わる。
【００７４】
３．３  フリップ現象
コントローラの向き決めにおいて、「アップベクトルvuの連続的な変化に対して、コントローラの向きＭが不連続に変化する現象」を「フリップ現象」と呼ぶことにする。フリップ現象は好ましくない現象であって、可能な限り抑制すべきである。
【００７５】
４  比較手法と問題点
比較例として、特開2007-267851に開示されている２つの例について説明する。これらの手法では、フリップ現象が２方向で発生する。
【００７６】
４．１  比較手法左右方向を維持
コントローラの向きを決める際に、+Xc半直線(Xc軸のXc0の領域がXwYw平面内のXw0 の領域内に入るようにする。Ｍの要素は次式により得られる。                    
【数１１】
2011050561.tif 000013
【数１２】
2011050561.tif 000014
【数１３】
2011050561.tif 000015
この向き決め手法は、「XcはZwに垂直であり、Ywに垂直な平面とYcZc平面との交線をZwとする」と表すこともできる。
この手法でフリップが起こるのは、vuが±Xc方向を向く場合、即ちプレイヤがコントローラの+Xcを真上または真下に向けて保持した場合である。
【００７７】
４．２  比較手法前後方向を維持
コントローラの向きを決める際に、+Zc半直線がYwZw平面内のZw0の領域内に入るようにする。
【数１４】
2011050561.tif 000016
【数１５】
2011050561.tif 000017
【数１６】
2011050561.tif 000018
この向き決め手法は、「ZcはXwに垂直であり、Ywに垂直な平面とXcYc平面との交線をXwとする」と表すこともできる。
この手法でフリップが起こるのは、vuが±Zc方向を向く場合、即ちプレイヤがコントローラの+Zcを真上または真下に向けて保持した場合である。
【００７８】
５．向き決め手法の分類
コントローラの向き決め手法は、次の２タイプに分類できる。
（１）履歴非依存型
コントローラの向きＭは、過去のアップベクトルには依存せず、現在のアップベクトルだけで決まる。
（２）履歴依存型
コントローラの向きＭは、現在のアップベクトルだけでは決まらず、過去のアップベクトルに依存する。
この分類に基づいて、それぞれの特徴を以下の節で述べる。
【００７９】
６  履歴非依存型と特性グリッド
前述の比較手法は、履歴非依存型である。まず、履歴非依存型の挙動について考える。
図４は、コントローラ座標系を基準として、あるアップベクトルvuを表示し、さらにvuの終点を起点として、これに対応するXw,Yw,Zwの向きを示したものである。Ywはワールドの上方向なので、Ywとvuの向きは一致する。従ってXw,Zwはvuに垂直になる。
【００８０】
vuの向きを変化させると図５のようになる。|vu|= 1なので、vuの終点は、原点を中心とする半径１の球面上に位置する。この球面を「球面S」とする。Xw ,Zwは、vuに垂直なので、球面Sに接する。履歴に依存しないので、各vuに対してXw,Yw,Zwの向きは一意に定まる。従って、球面S上の各点に対して接ベクトルXw,Zwが一意に定まることになる。
【００８１】
vuの変化に対してXw,Zw が連続的に変化するならば、図６のように、球面S上にXw,Zwの向きを表すグリッドを構成できる。このグリッドは、コントローラの向き決め方式の挙動特性を表す。そこで、これを「特性グリッド」と呼ぶことにする。さらに、この特性グリッドはコントローラ座標系に固定されているので、そのことを明確にする際には、「コントローラ固定特性グリッドと称する。このように、履歴非依存型の挙動特性は、コントローラ固定特性グリッドで表すことができる。
【００８２】
前述の比較手法の第１例左右方向を維持では、特性グリッドは図７（Ａ）〜（Ｄ）に示すように、Xc軸を地軸とする地球儀の緯線・経線の形状になる。+Xcを地軸の北とすると、球面S上の各点において、+Xwは経線の北方向、+Zwは緯線の東方向である。
この特性グリッドから、北極・南極に相当する２点３１０−１、３１０−２が特異点であることが分かる。アップベクトルがこの特異点方向(+Xc方向、-Xc方向を向いた場合、コントローラの向きが不定となる。また、アップベクトルが特異点を通過すると、コントローラの向きは不連続に変化し、フリップ現象が起こる。実用上は、特異点において向き不定とする替わりに、何らかの向きをコントローラに与えることが多いが、その場合でも向きの変化の不連続性は残るためフリップ現象が起こる。
【００８３】
このように、特性グリッドの特異点に着目することにより、コントローラの向き決めにおけるフリップ現象の発生およびフリップ方向を、明確に知ることができる。
【００８４】
同様に、従来手法の第２例前後方向を維持では、特性グリッドは図８（Ａ）〜（Ｄ）のようになる。この特性グリッドから、+Zcと-Zcの２方向がフリップ方向となることが分かる。
【００８５】
７  単純回転
今後の手法説明で使用するために、以下のように「単純回転」を定義する。
【００８６】
図９に示すように、始点を共有する任意の単位ベクトルva,vbに対して、次の条件（ａ）（ｂ）を満たす回転を、vaからvbへの単純回転と定める。
【００８７】
（ａ） va, vbのなす平面に垂直な軸の回りの回転。
【００８８】
（ｂ） 回転によりva,はvbに重なる。
【００８９】
なお、vaとvbが同じ向き即ちva =  vb ) の場合は無回転とする回転マトリクスで表すと単位行列。vaとvbが反対向き即ちva = -vb ) の場合は定義不能とする。
【００９０】
「va からvbへの単純回転マトリクス」をＭSR va, vbと表すことにする。このマトリクスは次式で得られる。                                            
【数１７】
2011050561.tif 000019
ただし、[nx ny nz]T は回転軸を表わす単位ベクトル、φは回転角で、以下の式により得られる。                                                                  
【数１８】
2011050561.tif 000020
【数１９】
2011050561.tif 000021
【数２０】
2011050561.tif 000022
【数２１】
2011050561.tif 000023
「 vaから vbへの単純回転」の逆変換は、「 vbから vaへの単純回転」となる。      
【数２２】
2011050561.tif 000024
以上の説明では、va, vb は単位ベクトルとしたが、一般のベクトルを扱えるように定義を拡張する。大きさが1でないベクトルの場合は、それぞれのベクトルを正規化してから上記の方法で求めた回転を、単純回転と定義する。従って、k,l を任意の正の実数とするとき、次式が成り立つ。
【数２３】
2011050561.tif 000025
【００９１】
８  履歴非依存型
８．１  フリップ現象と不動点原理
履歴非依存型では、フリップ現象を回避できない。このことは、以下のようにして不動点定理から導かれる。不動点定理には種々のバリエーションがあるが、ここで扱う不動点定理(Fixed point theorem, Hairy ball theorem) の内容は次のとおりである。
【００９２】
連続関数f : S２ → S２には、f(P)=PとなるPが必ず存在する。
ただし、S２は「球面」の意味で、Pは球面上の点である。
【００９３】
この定理から得られる結果の一例として、「地球上には無風地点が存在する」という例え話がある。この例では、球の表面に沿った連続的な不連続箇所がない) 流れを想定している。球面上の各点Pに対して、その点から流れに乗って移動した先をf(P)とする。不動点定理を適用すると、f(P)= P即ち流速が0の点が必ず存在する。
【００９４】
この結果の対偶をとれば、「流速が0でない流れを作れば、必ず不連続箇所が存在する」ことになる。さらに、両者を合わせると、「球面上の流れには、不連続箇所または流速0の箇所が必ず存在する」ことが言える。
【００９５】
履歴非依存型では、図５のように、球面S上の各点に対してXw,Zwの向きを一意に定める。ここで、Xwを球面S上の各点における流れの方向と見なす。すると、Xwが不連続またはXwが不定となる特異点が、球面S上に必ず存在することになる。
【００９６】
以上のように、履歴非依存型には特異点が必ず存在するため、フリップ現象を回避できない。そこで改良策として、以下に述べる手法を使って、フリップが生じる方向を２方向から１方向に減らす。
【００９７】
８．２  単純回転方式（単回転）
前述の単純回転を用いて、ワールド座標系において、次の手順によりコントローラの向きＭを決めることができる。ここではコントローラの向き情報としてマトリクスＭを求める場合を例にとり説明する。
【００９８】
第１のステップとして、コントローラの向きをワールド座標系に合わせる基準状態にする。コントローラの向きをワールド座標系に合わせるとは、例えば図３において、Xc、Yc、ZcとXw、Yw、Zwの各軸が一致した状態基準状態にすることであり、処理としてはコントローラ座標系に対するワールド座標系の向きを示すパラメータやワールド座標系におけるコントローラの向きを示すパラメータを基準状態にする処理を行うことでもよい。
【００９９】
第２のステップとして、アップベクトルvuから+Ywベクトルへの単純回転を、コントローラに作用させる。処理としては単純回転のマトリクスＭを求める処理でもよいし、求めたマトリクスをパラメータに作用させる処理を含んでもよい。
【０１００】
ワールド座標系における+Yw方向単位ベクトルはe1なので、Ｍは次式で表される（要素の詳細は１０．２．４参照）。
【数２４】
2011050561.tif 000026
前述のように、履歴非依存型の挙動特性は、コントローラ固定特性グリッドで表せる。そこで、特性グリッドの形状を把握するために、コントローラ座標系から見たワールドの向きＭ-1 を求める。
【数２５】
2011050561.tif 000027
【数２６】
2011050561.tif 000028
これはe1からvuへの単純回転である。特性グリッドは図１０（Ａ）〜（Ｄ）のようになる。同図に示すように、特異点は-Yc向の極１つのみである。従って、この手法でフリップが起こるのは、vuが-Yc方向を向く場合、即ちプレイヤがコントローラの-Ycを真上に向けて保持した場合のみである。
【０１０１】
８．３  単純回転方式（複回転）
前節８．２で述べた単純回転方式単回転は、フリップ方向が1方向なので、比較例の方式よりも使い易くなっている。しかし、コントローラを振りかぶるような向きに持つと、アップベクトルが-Yc方向となるためフリップが起こる。そこで、フリップ方向をずらして、フリップを起こり難くする。
【０１０２】
アップベクトルが向く頻度が小さい方向をフリップ方向とするのが良い。このような方向の単位ベクトルを一つ決めて、これをvrとする。vt =−vrを目標ベクトル(target vector) とする。ワールド座標系において、次の手順によりコントローラの向きＭを決める。
【０１０３】
第１のステップとして、コントローラの向きをワールド座標系に合わせる基準状態にする。第２のステップとして、アップベクトルvuから目標ベクトルvt への単純回転を、コントローラに作用させる。第３のステップとして、目標ベクトルvtから+Ywベクトルへの単純回転を、コントローラに作用させる。
Ｍは次式で表される。
【数２７】
2011050561.tif 000029
コントローラ座標系から見たワールドの向きは次式のようになる。
【数２８】
2011050561.tif 000030
【数２９】
2011050561.tif 000031
この方式の特性グリッドは、「単純回転方式単回転」の特性グリッドをＭSRe1, vt で回転させたものになる。例えばvrを、図１１のように、目標ベクトルを-Yc方向から+Zc方向にθ= 50ー 回転させた方向に設定した場合、特性グリッドは図１２（Ａ）〜（Ｄ）のようになる。vr方向が特異点６００となることが分かる。この手法でフリップが起こるのはvuがvr方向を向く場合、即ちプレイヤがコントローラのvrを真上に向けて保持した場合のみである。
【０１０４】
９  履歴依存型
履歴依存型のうち最も単純なモデルでは、問題を次のように捉えることができる。ある時点において、アップベクトルがvpで、これに対応するコントローラの向きＭpが既に得られているとする。プレイヤがコントローラを動かすのに伴って、新たなアップベクトルvuが得られる。このvuに対するコントローラの向きＭを決める。
【０１０５】
履歴依存型の最大の長所は、フリップ現象を回避できることである。履歴非依存型では、図５のように、球面S上の各点に対してXw,Zwの向きを一意に定めたが、履歴依存型では、Xw,Zwの向きは履歴に依存し一意に定まらない。そのため、不動点定理の縛りを受けないので、フリップを起こさない向き決めが可能となる。
【０１０６】
一方その半面、向き決めの挙動が履歴に依存するため、得られるコントローラの向きが意図した方向になりにくいという短所がある。
【０１０７】
履歴依存型の一手法として、単純回転を用いる方法がある。この手法では、コントローラ座標系を基準として、ワールドに対してvpからvuへの単純回転を掛ける。コントローラの向きは、以下のようにして求められる。
【数３０】
2011050561.tif 000032
【数３１】
2011050561.tif 000033
【数３２】
2011050561.tif 000034
【０１０８】
１０  ハイブリット型
これまで述べてきたように、履歴非依存型ではフリップ現象を回避できない。一方、履歴依存型は、フリップ現象は回避できるものの、得られるコントローラの向きを意図した方向に向け難い。そこで、両者を融合させて、以下のようなハイブリッド型を作る。
【０１０９】
球面S上の各点において、特性グリッドを基準として、Xw(またはZw) が向くことのできる方向の範囲以下「旋回範囲」という、許容範囲の一例) を設定する。この旋回範囲の制約のもとで、履歴依存型の手法を用いてXw(またはZw)の向きを決める。処理手順は次のようになる。
【０１１０】
第１のステップとして、履歴依存型の手法を使ってXw,Zwの向きを求める。
【０１１１】
第２のステップとして、求めた結果が旋回範囲内かどうかを調べる。
(a) 旋回範囲内であればXw,Zwをそのまま使う。
(b) 旋回範囲外であれば、旋回範囲内に収まるようにXw,Zwを修正する。
【０１１２】
旋回範囲を設定する際には、次の２点に留意する。
（１）特異点の解消
特性グリッドの特異点付近では、向き制限なし旋回範囲が全方位) に設定する。この設定により、特異点付近では、履歴依存型の向き決めのみによってXw,Zwが決まるので、フリップ問題が解消される。
（２）連続性の確保
球面S上の位置に対して、旋回範囲が連続的に変化するように設定する。この設定により、向き制限なしの領域から向き制限された領域へとアップベクトルが移動した際に、Xw,Zwの向きが連続的に変化する。
【０１１３】
１０．１  ハイブリット型の実施例（その１）
従来手法前後方向を維持) の特性グリッドを用いる。この特性グリッドは、図８（Ａ）〜（Ｄ）のように、地球儀の緯線・経線に相当する形状をしており、北極・南極に相当する+Zc、-Zc方向が特異点となっている。この特性グリッドをベースとし、図１７（Ａ）〜（Ｄ）のように、球面S上の各点に対して旋回範囲を設定する。図２０の扇型の斜線部分が+Zwの向くことのできる範囲（許容範囲）である。赤道上では、+Zw方向を特性グリッドの向き(+Zcの向きと同じ) に拘束する。緯度に比例して旋回範囲を広げ、緯度λ以上の領域では向き制限なし旋回範囲が全方位) とする。図１７（Ａ）〜（Ｄ）ではλ = π/3 とした。
【０１１４】
この設定により、コントローラの向き決めは次のような挙動となる。vuがXcYc平面内にある場合には、即ちプレイヤがコントローラのZc軸を水平に保持した場合には、履歴に依存せず、+Zwは+Zcと一致する。またvuが±Zc方向を向く場合には、即ちプレイヤがコントローラのZc軸を垂直に保持した場合には、Zwの向きは履歴によって決まり、フリップは起こらない。
【０１１５】
アップベクトルvuに対して、コントローラの向きＭ求める処理は、以下のようになる。
【０１１６】
１０．１．１  履歴依存型による向き決め
まず、９節の履歴依存型-単純回転単回転) の手法でコントローラの向きを求め、これをＭdとする。Ｍdの要素は次式のとおりとする。コントローラの向きがＭdのとき、コントローラ座標系における+Xw,+Zwの向きは、それぞれvd, veとなる。
【数３３】
2011050561.tif 000035
ここで、もし|uz| ≧ sin λ であれば、アップベクトルは球面S上で向き制限なしの領域にあるので、Ｍ =Ｍd として終了となる。そうでない場合は、処理は以下に続く。
１０．１．２
３   履歴非依存型による向き決め
４．２節の履歴非依存型前後方向を維持) の手法でコントローラの向きを求め、これをＭとする。Ｍgの要素は次式のとおりとする。vg, vhは、それぞれ特性グリッドから決まる+Xw,+Zw方向に相当する。
【数３４】
2011050561.tif 000036
旋回範囲の大きさρ 単位はラジアン) を、次式により設定する。
【数３５】
2011050561.tif 000037
図２０のように、+Zwが向くことのできる範囲(+Zwの旋回範囲は、vhから±ρの範囲となる。
このρを使って、Ｍdの向きが旋回範囲内にあるかどうかを調べる。もしvｅ・ vｈ ≧ cos ρであれば、旋回範囲内にあるので、Ｍ =Ｍdとして終了となる。そうでない場合は、処理は以下に続く。
【０１１７】
１０．１．３   旋回範囲内への修正
旋回範囲外にあるveを修正し、旋回範囲内に収まるようにする。このとき、図２１のように、ρ,-ρ のうちいずれか近い方に修正する。もしve ・ vg  ≧  0 であればρ’= ρ とし、そうでなければρ’= -ρ とする。veの修正結果は、vhをvu軸回りにρ’だけ回転させたものになる。次式のように回転マトリクスＭrを作る。
【数３６】
2011050561.tif 000038
【０１１８】
コントローラの向きＭは、以下のようにして得られる。
【数３７】
2011050561.tif 000039
【数３８】
2011050561.tif 000040
【０１１９】
１０．２  ハイブリッド型の実施例（その２）
単純回転方式単回転の特性グリッドを用いる。この特性グリッドは、図１０（Ａ）〜（Ｄ）のように、-Yc方向のみが特異点となる。この特性グリッドをベースとし、図１８（Ａ）〜（Ｄ）のように、球面S上の各点に対して旋回範囲を設定する。図中の扇型の斜線部分が+Zwの向くことのできる範囲である。球面Sと+Ycとの交点をP1とする。点P1では、+Zw方向を特性グリッドの向き(+Zcの向きと同じに拘束する。点P1からの距離球面S上での距離とする )に比例して旋回範囲を広げ、距離λ以上の領域では向き制限なし旋回範囲が全方位とする。（図１８（Ａ）〜（Ｄ）ではλ= π/2とした。）  
この設定により、コントローラの向き決めは次のような挙動となる。 
【０１２０】
vuが+Yc方向を向く場合、即ちプレイヤがコントローラの+Ycを真上に向けた場合には、履歴に依存せず、+Zwは+Zcと一致する。 
【０１２１】
またvuが-Yc方向を向く場合、即ちプレイヤがコントローラの+Ycを真下に向けた場合には、Zwの向きは履歴によって決まり、フリップは起こらない。
アップベクトルvuに対して、コントローラの向きＭを求める処理は、以下のようになる。      
【０１２２】
１０．２．１  履歴依存型による向き決め
まず、９節の履歴依存型-単純回転 (単回転の手法でコントローラの向きを求め、これをＭdとする。Ｍdの要素は式(33)と同様とする。ここで、もしuy ≦ cosλであれば、アップベクトルは球面S上で向き制限なしの領域にあるので、Ｍ =Ｍd として終了となる。そうでない場合は、処理は以下に続く。 
【０１２３】
１０．２．２  履歴非依存型による向き決め 
８．２節の履歴非依存型-単純回転方式 (単回転の手法でコントローラの向きを求め、これをＭｇとする。Ｍｇの要素は式 (34)と同様とする。旋回範囲の大きさρ単位はラジアンを、次式により設定する。 
【数３９】
2011050561.tif 000041
+Zwの旋回範囲は、１０．１節の実施例その1)と同様に、図２０のようになる。もしvｅ・ vｈ ≧ cos ρであれば、旋回範囲内にあるので、Ｍ =Ｍd として終了となる。そうでない場合は、処理は以下に続く。 
【０１２４】
１０．２．３  旋回範囲内への修正
旋回範囲外にあるveを修正し、旋回範囲内に収まるようにする。処理内容は、実装例その1)の １０．１．３節と同様である。
【０１２５】
１０．２．４  単純回転マトリクスの詳細
単純回転マトリクスの要素の詳細を以下に記す。 
（１）ＭSRvu, e1の詳細 
８．２節のＭSRvu, e1の要素は次のようになる。 
【数４０】
2011050561.tif 000042
ただしＫ１は以下のとおりである。 
【数４１】
2011050561.tif 000043
次式を利用すると計算式を簡略化できるが、uy ≒-1のときに桁落ちによる計算精度の劣化を招くので、このような簡略化は使うべきではない。 
【数４２】
2011050561.tif 000044
（２）ＭSRvt,e1 ＭSRvu,vtの詳細 
８．３節において、vrを図１１のように設定した場合、即ち vt=[0 cosθ -sinθ]Tの場合、ＭSRvt,e1) ＭSRvu,vtの要素は次のようになる。 
【数４３】
2011050561.tif 000045
ただし、u0,u1,uc,us,K2は以下のとおりである。
【数４４】
2011050561.tif 000046
【数４５】
2011050561.tif 000047
【数４６】
2011050561.tif 000048
【数４７】
2011050561.tif 000049
【数４８】
2011050561.tif 000050
次式を利用すると計算式を簡略化できるが、u0≒1のときに桁落ちによる計算精度の劣化を招くので、このような簡略化は使うべきではない。
【数４９】
2011050561.tif 000051
１１  向き決定処理
図１３は、本実施の形態の単純回転方式（その１）の手法でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１２６】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ１０）。
【０１２７】
次に数式（２４）によりＭを求める（ステップＳ２０）。
【０１２８】
そして求めたＭを、コントローラの向き情報とする（ステップＳ３０）。
【０１２９】
図１４は、本実施の形態の単純回転方式（その２）の手法でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１３０】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ１１０）。
【０１３１】
次に、コントローラ座標系における目標ベクトルvtと数式（２７）により、Ｍを求める（ステップＳ１２０）。
【０１３２】
そして求めたＭを、コントローラの向き情報とする（ステップＳ１３０）。
【０１３３】
図１５は、本実施の形態の履歴依存型の手法でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１３４】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ２１０）。
【０１３５】
次に、前回のガイドベクトル及び前回のコントローラの向き情報Ｍpを受け取り、前回のガイドベクトルをアップベクトルvpとして設定する（ステップＳ２２０）。
【０１３６】
次に、数式（３１）、（３２）によりＭを求める（ステップＳ２３０）。
【０１３７】
そして求めたＭを、コントローラの向き情報とする（ステップＳ２４０）。
【０１３８】
図１９は、本実施の形態のハイブリット型の手法（実施例２）でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１３９】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ３１０）。
【０１４０】
次に、前回のガイドベクトル及び前回のコントローラの向き情報Ｍpを受け取り、前回のガイドベクトルをアップベクトルvpとして設定する（ステップＳ３２０）。
【０１４１】
次に、数式（３１）、（３２）によりＭを求め、これをＭdとする（ステップＳ３３０）。
【０１４２】
uy ≦ cosλであれば（ステップＳ３４０でＹ）、アップベクトルは球面S上で向き制限なしの領域にあるので、Ｍ =Ｍdとする（ステップＳ３５０）。
【０１４３】
uy ≦ cosλでなければ（ステップＳ３４０でＮ）、数式（２４）によりＭを求め、これをＭｇとする（ステップＳ３６０）。
【０１４４】
次に、数式（３９）によりρを求める（ステップＳ３７０）。
【０１４５】
vｅ・ vｈ ≧ cos ρであれば（ステップＳ３８０でＹ）、旋回範囲内にあるので、Ｍ =Ｍd とする（ステップＳ３５０）。
【０１４６】
vｅ・ vｈ ≧ cos ρでなければ（ステップＳ３８０でＮ）以下の処理を行う。vｅ・ vｇ ≧  0 であれば（ステップＳ３９０でＹ）、ρ’= ρ とし（ステップＳ４００）、そうでなければ（ステップＳ３９０でＮ）、ρ’= -ρ とする（ステップＳ４１０）。
【０１４７】
次に、数式（３６）によりＭｒを求める（ステップＳ４２０）。
【０１４８】
次に、数式（３８）によりＭを求める（ステップＳ４３０）。
【０１４９】
そして求めたＭを、コントローラの向き情報とする（ステップＳ４４０）。
【０１５０】
１２  ゲームシステム
図１６は、本実施形態のゲームシステムの機能ブロック図の一例である。なお本実施形態のゲームシステムでは、図１６の各部を全て含む必要はなく、その一部を省略した構成としてもよい。
【０１５１】
本実施形態のゲームシステムは、本体装置１００、入力装置２００、情報記憶媒体１８０、表示部（表示装置）１９０、スピーカ１９２、光源１９８を含んで構成されている。
【０１５２】
入力装置２００は、加速度センサ（ガイド方向検出部の一例）２１０、撮像部２２０、スピーカ２３０、振動部２４０、マイコン２５０、通信部２６０によって構成されている。
【０１５３】
加速度センサ２１０は、３軸（ｘ軸、ｙ軸、ｚ軸）の加速度を検出する。すなわち、加速度センサ２１０は、上下方向、左右方向、及び、前後方向の加速度を検出することができる。なお、加速度センサ２１０は、一定時間（例えば、５ｍｓｅｃ）毎に加速度を検出している。加速度センサ２１０によって検出された加速度ベクトル（ガイドベクトル）は、通信部２６０によって本体装置１００に送信される。
【０１５４】
撮像部２２０は、赤外線フィルタ２２２、レンズ２２４、撮像素子（イメージセンサ）２２６、画像処理回路２２８を含む。赤外線フィルタ２２２は、入力装置２００の前方に配置され、表示部１９０に関連付けられて配置されている光源１９８から入射する光から赤外線のみを通過させる。レンズ２２４は、赤外線フィルタ２２２を透過した赤外線を集光して撮像素子２２６へ出射する。撮像素子２２６は、例えば、ＣＭＯＳセンサやＣＣＤのような固体撮像素子であり、レンズ２２４が集光した赤外線を撮像して撮像画像を生成する。撮像素子２２６で生成された撮像画像は、画像処理回路２２８で処理される。例えば、撮像素子２２６から得られた撮像画像を処理して高輝度部分を検知し、撮像画像における光源の位置情報（特定位置）を検出する。なお、光源が複数存在する場合には、撮像画像上の位置情報を検出する。また、検出した位置情報は、通信部２６０によって、本体装置１００に送信される。
【０１５５】
スピーカ２３０は、本体装置１００から通信部２６０を介して取得した音を出力する。
【０１５６】
振動部（バイブレータ）２４０は、本体装置１００から送信された振動信号を受信して、振動信号に基づいて作動する。
【０１５７】
マイコン（マイクロコンピュータ）２５０は、受信した本体装置１００からのデータに応じて、音を出力する制御や、バイブレータを作動させる制御を行う。また、加速度センサ２１０が検出した加速度ベクトル（ガイドベクトル）を通信部２６０を介して本体装置１００に送信させる処理を行ったり、撮像部２２０によって検出された位置情報を、通信部２６０を介して本体装置１００に送信させる処理を行う。
【０１５８】
通信部２６０は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、本体装置１００とデータを無線で送受信する。通信部２６０は、加速度センサ２１０によって検出された加速度ベクトル（ガイドベクトル）や撮像部２２０において検出した位置情報等を、所定の時間間隔で順次本体装置１００に送信している。なお、通信部２６０は、本体装置１００と通信ケーブルで接続し、当該通信ケーブルを介して情報の送受信を行うようにしてもよい。
【０１５９】
なお、入力装置２００は、ボタン、レバー（アナログパッド）、マウス、十字キー、タッチパネル型ディスプレイなどの操作子を更に設けてもよい。また、入力装置２００はプレイヤの入力動作によって変化する角速度を検出するジャイロセンサを備えていてもよい。
【０１６０】
また入力装置２００は、プレイヤが把持して動かすものであってもよいし、プレイヤが身につけて動かすものであってもよい。また、入力装置２００には、プレイヤが把持する刀型コントローラや銃型コントローラ、あるいはプレイヤが身につける（プレイヤが手に装着する）グローブ型コントローラなど実際の道具を模して作られたコントローラも含まれる。また入力装置２００には、入力装置２００と一体化されている本体装置１００（ゲーム装置、携帯型ゲーム装置）、携帯電話機なども含まれる。
【０１６１】
次に、本実施形態の本体装置１００について説明する。本実施形態の本体装置１００は、記憶部１７０、処理部１１０、通信部１９６によって構成される。
【０１６２】
記憶部１７０は、処理部１１０や通信部１９４などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などのハードウェアにより実現できる。
【０１６３】
特に、本実施形態の記憶部１７０は、主記憶部１７２、描画バッファ１７４、音データ記憶部１７６を含む。主記憶部１７２は、処理部１１０や通信部１９４などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などのハードウェアにより実現できる。また、描画バッファ１７４は、描画部１４０において生成された画像を記憶する。
【０１６４】
また、音データ記憶部１７６は、プレイヤの入力動作に対する入力装置２００の反応を示す確認音や、ゲーム演算処理に伴い出力される効果音を記憶する。なお、確認音は、検出情報に応じて複数種類記憶する。また、効果音は、モーションや、所与のイベントに応じて複数種類記憶する。また、加速度センサ２１０によって検出される加速度の方向（上方向、下方向、左方向、右方向、前方向、後方向）に応じて複数種類の確認音を記憶してもよい。
【０１６５】
情報記憶媒体１８０（コンピュータにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク（ＭＯ）、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ（ＲＯＭ）などにより実現できる。処理部１１０は、情報記憶媒体１８０に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体１８０には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。なお情報記憶媒体１８０は、メモリカードに、プレイヤの個人データやゲームのセーブデータなどを記憶するものも含む。
【０１６６】
表示部１９０は、処理部１１０により生成された画像等を出力するものであり、その機能は、ＣＲＴディスプレイ、ＬＣＤ（液晶ディスプレイ）、ＯＥＬＤ有機ＥＬディスプレイ、ＰＤＰ（プラズマディスプレイパネル）、タッチパネル型ディスプレイ、或いはＨＭＤ（ヘッドマウントディスプレイ）などのハードウェアにより実現できる。
【０１６７】
スピーカ１９２は、音制御部１５０により再生する音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどのハードウェアにより実現できる。なお、スピーカ１９２は、表示部に備えられたスピーカとしてもよい。例えば、テレビ（家庭用テレビジョン受像機）を表示部１９０としている場合には、テレビのスピーカとすることができる。
【０１６８】
光源１９８は、例えばＬＥＤであり、表示部１９０に関連付けられて配置される。
【０１６９】
通信部１９６は、ネットワーク（インターネット）を介して他の本体装置（ゲーム装置）と通信することができる。その機能は、各種プロセッサ又は通信用ＡＳＩＣ、ネットワーク・インタフェース・カードなどのハードウェアや、プログラムなどにより実現できる。また、通信部１９６は、有線、無線いずれの通信も行うことができる。
【０１７０】
また、通信部１９６は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、入力装置２００の通信部２６０を介して、入力装置２００とデータを送受信する。例えば、通信部１９６は、確認音、効果音等の音データ、及び、振動信号を、入力装置２００に送信し、入力装置２００において、加速度センサ２１０や撮像素子２２６によって検出された情報を所定の間隔で受信する。
【０１７１】
なお、本実施形態の各部としてコンピュータを機能させるためのプログラム（データ）は、サーバが有する、記憶部、情報記憶媒体からネットワークを介して情報記憶媒体１８０（または、記憶部１７０）に配信するようにしてもよい。このようなサーバの情報記憶媒体の使用も本発明の範囲に含まれる。
【０１７２】
処理部１１０（プロセッサ）は、入力装置２００から受信した検出情報や情報記憶媒体１８０から記憶部１７０に展開されたプログラム等に基づいて、ゲーム演算処理、画像生成処理、或いは音制御の処理などを行う。
【０１７３】
特に本実施形態の処理部１１０は、向き決定部１２０、ゲーム演算部１３０、描画部１４０、音制御部１５０、振動制御部１６０を含む。
【０１７４】
向き決定部１２０は、単純回転演算部１２１、向き情報演算部１２２を含む。単純回転演算部１２１、向き情報演算部１２２の機能に関しては、図１と同様であるので説明を省略する。
【０１７５】
ゲーム演算部１３０は、キャラクタ（プレイヤキャラクタ、敵キャラクタ）、移動体（車、飛行機など）、建物、樹木、柱、壁、マップ（地形）などの表示物を表す各種オブジェクト（ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト）をオブジェクト空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクトの位置や回転角度（向き、方向と同義）を決定し、その位置（Ｘ、Ｙ、Ｚ）にその回転角度（Ｘ、Ｙ、Ｚ軸回りでの回転角度）でオブジェクトを配置する。
【０１７６】
また、ゲーム演算部１３０は、オブジェクト空間内の所与（任意）の視点から見える画像を生成するための仮想カメラ（視点）の制御処理を行う。具体的には、仮想カメラの位置（Ｘ、Ｙ、Ｚ）又は回転角度（Ｘ、Ｙ、Ｚ軸回りでの回転角度）を制御する処理（視点位置、視線方向あるいは画角を制御する処理）を行う。
【０１７７】
例えば、仮想カメラによりオブジェクト（例えば、キャラクタ等）を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度（仮想カメラの向き）を制御する。この場合には、オブジェクトの位置、回転角度又は速度などの情報に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させたり、予め決められた移動経路で移動させる制御を行ってもよい。この場合には、仮想カメラの位置（移動経路）又は回転角度を特定するための仮想カメラデータに基づいて仮想カメラを制御する。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラについて上記の制御処理が行われる。
【０１７８】
また、ゲーム演算部１３０は、モデル（キャラクタ、車、飛行機等）の移動・動作演算（移動・動作シミュレーション）を行う。すなわち、プログラム（移動・動作アルゴリズム）や、モーションデータなどに基づいて、モデルをオブジェクト空間内で移動させたり、オブジェクトを動作（モーション、アニメーション）させたりする処理を行う。具体的には、オブジェクトの移動情報（位置、回転角度、速度、或いは加速度）や動作情報（オブジェクトを構成する各パーツの位置、或いは回転角度）を、１フレーム（１／６０秒）毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理（シミュレーション処理）や画像生成処理を行う時間の単位である。
【０１７９】
またゲーム演算部は、コントローラの向き情報に基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行う。
【０１８０】
描画部１４０は、処理部１１０で行われる種々の処理（ゲーム演算処理）の結果に基づいて描画処理を行い、これにより画像を生成し、表示部１９０に出力する。いわゆる３次元ゲーム画像を生成する場合には、まず表示物（オブジェクト、モデル）を定義する各頂点の頂点データ（頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等）を含む表示物データ（オブジェクトデータ、モデルデータ）が入力され、入力された表示物データに含まれる頂点データに基づいて、頂点処理が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理（テッセレーション、曲面分割、ポリゴン分割）を行うようにしてもよい。頂点処理では、頂点の移動処理や、座標変換（ワールド座標変換、カメラ座標変換）、クリッピング処理、透視変換、あるいは光源処理等のジオメトリ処理が行われ、その処理結果に基づいて、表示物を構成する頂点群について与えられた頂点データを変更（更新、調整）する。そして、頂点処理後の頂点データに基づいてラスタライズ（走査変換）が行われ、ポリゴン（プリミティブ）の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル（表示画面を構成するフラグメント）を描画するピクセル処理（フラグメント処理）が行われる。ピクセル処理では、テクスチャの読出し（テクスチャマッピング）、色データの設定／変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を描画バッファ１７６（ピクセル単位で画像情報を記憶できるバッファ。ＶＲＡＭ、レンダリングターゲット）に出力（描画）する。すなわち、ピクセル処理では、画像情報（色、法線、輝度、α値等）をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内に設定された仮想カメラ（所与の視点）から見える画像が生成される。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として１画面に表示できるように画像を生成することができる。
【０１８１】
なお描画部１４０が行う頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン（プリミティブ）の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ（頂点シェーダやピクセルシェーダ）により実現されてもよい。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、ハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
【０１８２】
そして描画部１４０は、表示物を描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
【０１８３】
ジオメトリ処理では、表示物に関して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後（透視投影変換後）の表示物データ（表示物の頂点の位置座標、テクスチャ座標、色データ（輝度データ）、法線ベクトル、或いはα値等）は、主記憶部１７２に保存される。
【０１８４】
テクスチャマッピングは、記憶部１７０に記憶されるテクスチャ（テクセル値）を表示物にマッピングするための処理である。具体的には、表示物の頂点に設定（付与）されるテクスチャ座標等を用いて記憶部１７０からテクスチャ（色（ＲＧＢ）、α値などの表面プロパティ）を読み出す。そして、２次元の画像であるテクスチャを表示物にマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
【０１８５】
隠面消去処理としては、描画ピクセルのＺ値（奥行き情報）が格納されるＺバッファ（奥行きバッファ）を用いたＺバッファ法（奥行き比較法、Ｚテスト）による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Ｚバッファに格納されるＺ値を参照する。そして参照されたＺバッファのＺ値と、プリミティブの描画ピクセルでのＺ値とを比較し、描画ピクセルでのＺ値が、仮想カメラから見て手前側となるＺ値（例えば小さなＺ値）である場合には、その描画ピクセルの描画処理を行うとともにＺバッファのＺ値を新たなＺ値に更新する。
【０１８６】
αブレンディング（α合成）は、α値（Ａ値）に基づく半透明合成処理（通常αブレンディング、加算αブレンディング又は減算αブレンディング等）のことである。例えば、通常αブレンディングでは、α値を合成の強さとして線形補間を行うことにより２つの色を合成した色を求める処理を行う。
【０１８７】
なお、α値は、各ピクセル（テクセル、ドット）に関連づけて記憶できる情報であり、例えばＲＧＢの各色成分の輝度を表す色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度（透明度、不透明度と等価）、バンプ情報などとして使用できる。
【０１８８】
音制御部１５０は、処理部１１０で行われる種々の処理（ゲーム演算処理等）の結果に基づいて音データ記憶部１７６に記憶されている音（確認音、効果音を含む）を、入力装置のスピーカ２３０及びスピーカ１９２の少なくとも一方から出力させる処理を行う。
【０１８９】
振動制御部１６０は、入力装置に設けられた振動部２４０に振動させる処理を行う。
【０１９０】
なお、本実施形態のゲームシステムは、１人のプレイヤのみがプレイできるシングルプレイヤモード専用のシステムにしてもよいし、複数のプレイヤがプレイできるマルチプレイヤモードも備えるシステムにしてもよい。また複数のプレイヤがプレイする場合に、これらの複数のプレイヤに提供するゲーム画像やゲーム音を、１つの本体装置、表示部を用いて生成してもよい。また、ネットワーク（伝送ライン、通信回線）などで接続された複数のゲーム装置を用いて分散処理により生成してもよい。また、本実施形態は、複数のプレイヤでゲームを行う場合には、複数のプレイヤの入力装置毎に、検出情報に基づいて所定条件を満たすか否かの判定や、判定結果に基づく音制御や、振動制御を行う。
【０１９１】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１９２】
本発明は、実施の形態で説明した構成と実質的に同一の構成（例えば、機能、方法及び結果が同一の構成、あるいは目的及び効果が同一の構成）を含む。また、本発明は、実施の形態で説明した構成の本質的でない部分を置き換えた構成を含む。また、本発明は、実施の形態で説明した構成と同一の作用効果を奏する構成又は同一の目的を達成することができる構成を含む。また、本発明は、実施の形態で説明した構成に公知技術を付加した構成を含む。
【符号の説明】
【０１９３】
１  向き決定装置、２  向き情報入力デバイス、１０  処理部、１１  単純回転演算部、１２  向き情報演算部、１５  表示制御部、１６  音出力制御部、２０  ガイド方向検出部、２２  マイコン、２４  通信部、３０  記憶部、３２  操作部、３４  表示部、３６  情報記憶媒体、３８  通信部、４０  音出力部、１００  本体装置、１１０  処理部、１２０  向き決定部、１２１  単純回転演算部、１２２  向き情報演算部、１３０  ゲーム演算部、１４０  描画部、１５０  音制御部、１６０  振動制御部、１７０  記憶部、１７２  主記憶部、１７４  描画バッファ、１７６  音データ記憶部、１８０  情報記憶媒体、１９０  表示部、１９２  スピーカ、１９６  通信部、１９８  光源、２００  入力装置、２１０  加速度センサ、２２０  撮像部、２２２  赤外線フィルタ、２２４  レンズ、２２６  撮像素子、２２８  画像処理回路、２３０  スピーカ、２４０  振動部、２５０  マイコン、２６０  通信部
【図１】
2011050561.tif 000052
【図２】
2011050561.tif 000053
【図３】
2011050561.tif 000054
【図４】
2011050561.tif 000055
【図５】
2011050561.tif 000056
【図６】
2011050561.tif 000057
【図９】
2011050561.tif 000058
【図１１】
2011050561.tif 000059
【図１３】
2011050561.tif 000060
【図１４】
2011050561.tif 000061
【図１５】
2011050561.tif 000062
【図１６】
2011050561.tif 000063
【図１７】
2011050561.tif 000064
【図１８】
2011050561.tif 000065
【図１９】
2011050561.tif 000066
【図２０】
2011050561.tif 000067
【図２１】
2011050561.tif 000068
【図７】
2011050561.tif 000069
【図８】
2011050561.tif 000070
【図１０】
2011050561.tif 000071
【図１２】
2011050561.tif 000072
【手続補正書】
【提出日】平成21年9月4日(2009.9.4)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報記憶媒体、向き決定装置、ゲームシステム及び向き決定方法に関する。
【背景技術】
【０００２】
最近では、ゲーム用のコントローラに加速度センサを設けてコントローラの向きや回転を検出して、ゲーム入力とすることが可能なゲーム装置が存在する。このようなゲーム装置では、検出された向きや回転に応じてゲーム空間のオブジェクトの向きや回転を制御して、当該オブジェクトを含むゲーム画像を生成するゲームが実現されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２６７５８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
加速度センサが検出する加速度は、重力加速度と運動加速度動きによる加速度との和である。そのため、加速運動をしていない状態であれば、加速度センサを使って重力の方向を知ることができる。これを利用して、３次元空間内でのコントローラの向きを取得し、ゲーム等の入力として使用することが考えられる。このようなゲームにおいてはコントローラの向きや回転に応じて矛盾なく動作するゲーム画像を生成することが重要なポイントとなる。
【０００５】
しかし、重力方向から分かるのは上下の向きだけなので、コントローラの向きを決めるには情報が足りない。上記引用文献には、何らかの計算条件を追加することにより、向きを決定できるようにする手法の具体例が開示されている。 
【０００６】
しかし開示されている手法では、コントローラの向きが不連続に変化する現象フリップ現象が２方向で発生し、コントローラの回転に伴うゲーム画像の変化が不自然または不連続になりやすいという問題があった。
【０００７】
本発明は、以上のような課題に鑑みてなされたものであり、本発明のいくつかの態様によれば、３次元空間における所定の軸方向を検出する軸方向検出手段の検出値に基づいてコントローラの向きを決定する際にフリップの発生を減らすことが可能なプログラム、情報記憶媒体、向き決定装置、ゲームシステム及び向き決定方法を提供することができる。
【課題を解決するための手段】
【０００８】
（１）本発明は、
３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定するプログラムであって、
所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、
ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める単純回転演算部と、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求める向き情報演算部と、としてコンピュータを機能させるプログラムに関する。
【０００９】
また本発明は上記各部を含む向き決定装置、ゲームシステムに関する。また本発明はコンピュータ読み取り可能な情報記憶媒体であって、上記各部としてコンピュータを機能させるプログラムを記憶した情報記憶媒体に関する。また上記各部に対応するステップを含む向き決定方法に関する。
【００１０】
ここにおいてガイド軸方向とは、３次元空間内にある軸であればよい。またガイド方向検出手段とは、前記ガイド軸方向を検出するものであればよい。例えば重力方向をガイド軸方向とし、重力方向を検出する加速度センサをガイド方向検出手段としてもよい。   また地磁気の方向をガイド軸方向とし、地磁気の方向を検出する地磁気センサをガイド方向検出手段としてもよい。また点状のマーカ（ポイントマーカ）とこれを撮影するカメラを使用し、カメラとマーカを結ぶ直線をガイド軸とし、カメラをガイド方向検出手段としてもよい。
【００１１】
デバイスは、向き情報入力デバイスとして機能するデバイスであり、ガイド方向検出手段によって向き情報が取得可能なデバイスであればよい。例えばコントローラ等でもよい。
【００１２】
デバイスの向きは、ワールド座標系におけるデバイスの向きでもよいし、ワールド座標系に対するデバイス座標系の向きでもよい。
【００１３】
回転情報とは、デバイス座標系の向きを表すマトリクスや四元数や角度でもよい。例えばデバイス座標系からワールド座標系への変換マトリクスでもよいし、ワールド座標系からデバイス座標系への変換マトリクスでもよい。また各軸周りの回転角である回転パラメータ（θｘ、θｙ、θｚ）でもよい。
【００１４】
デバイスの向き情報は、回転情報をそのまま用いてもよいし、回転情報と初期状態や前回の状態に基づいて演算を施した値を用いてもよい。
【００１５】
第１のベクトルと第２のベクトルが同じ向きの場合には無回転（回転マトリクスで表すと単位行列）とし、第１のベクトルと第２のベクトルが反対向きの場合には予め用意した回転情報を用いてもよい。
【００１６】
例えば本プログラムが画像生成装置に適用される場合には、フレーム毎にガイドベクトルを受け取り、デバイスの向きを決定するようにしてもよい。
【００１７】
本発明によれば、例えばフレーム毎に初期状態または過去の状態のデバイスに対する回転情報に基づきデバイスの向きを決定することができる。
【００１８】
（２）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
ワールド座標系においてガイド軸方向を示す軸ベクトルを第１のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２ベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求め、
前記向き情報演算部は、
前記回転情報に基づき、所与の時点のデバイスの向き情報を求めてもよい。
【００１９】
ワールド座標系（Xw,Yw,Zw）のいずれかの軸を、ガイド軸と合わせてもよい。例えばガイド軸方向が上下方向である場合にはワールド座標系のＹ軸をガイド軸としてもよい。
【００２０】
この様にすると、ガイドベクトルに基づき、システムが定めた基準状態に対する所与の時点のデバイスの向き情報を一意に定めることができる。
【００２１】
またデバイスの向きが不連続に変化する現象であるフリップが生じる方向を１方向にすることができる。
【００２２】
（３）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
ワールド座標系においてガイド軸方向を示す軸ベクトルを第３のベクトルとし、前記第３のベクトルと方向の異なる目標ベクトルを第１のベクトルとし、前記第１ベクトルと前記第２のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第２のベクトルを含む平面上で、前記第２のベクトルと前記第１のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第１の単純回転と、前記第１のベクトルと前記第３のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第３のベクトルを含む平面上で、前記第１のベクトルと前記第３のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第２の単純回転に関する回転情報を求め、
前記向き情報演算部は、
前記回転情報に基づき、所与の時点のデバイス向き情報を求めてもよい。
【００２３】
この様にすると目標ベクトルの逆方向が特異点（フリップが発生する点）となる。従ってガイドベクトルが、目標ベクトルの逆方向を向く場合のみフリップが発生し、それ以外はフリップが発生しない。目標ベクトルは任意に設定することができるので、どの方向をフリップ方向とするかを自由に設定することができる。またガイドベクトルが向く方向として頻度が小さい方向と逆方向になるように目標ベクトルを設定することで、フリップ現象を起こりにくくすることができる。
【００２４】
（４）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
前記第２の単純回転に関する回転情報の値を予め記憶させておき、前記第２の単純回転については予め記憶されている前記回転情報の値を用いて前記回転情報を演算してもよい。
【００２５】
この様にするとリアルタイムに演算する場合に比べて演算負荷を軽くすることができる。
【００２６】
（５）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記単純回転演算部は、
所与の時点でガイド方向検出手段が検出したデバイス座標系におけるガイド軸方向を示すガイドベクトルと、前記所与の時点より過去の時点のデバイスの向き情報と当該向き情報に対応するガイドベクトルを受け取り、
前記所与の時点におけるガイドベクトルを第２のベクトルとし、前記過去の時点のガイドベクトルを第１のベクトルとし、
前記第１のベクトルと前記第２のベクトルとを始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転を前記デバイスに作用させた場合の回転情報を求めてもよい。
【００２７】
ここで、所与の時点より過去の時点とは、例えば前回または直近の時点（例えば１つ前のフレーム）でもよい。ここで直近とは、現時点からあらかじめ設定された短い期間だけさかのぼることを意味し、例えば前前回等でもよい。短い期間の長さをどのように設定するかは設計事項である。
【００２８】
この様にすると、過去の履歴を反映させてデバイスの向きを決定することができるので、デバイスの向きや回転の変化の連続性を保証することができる。
【００２９】
しかも単純回転を用いているので、デバイスに自然な挙動をとらせることができる。例えば、ガイドベクトルがある経路で v1から v2へと動き、その後全く同じ経路を逆に辿り v1に戻った場合、特開２００７−２６７５８１号公報に記載されている「外積を2回使い前回の履歴に依存させる方法」では、元に戻ったり戻らなかったりするが、単純回転を使う方法ならば必ず元の状態に戻ることができる。
【００３０】
（６）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記デバイスの向き情報に基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行うゲーム演算処理と、
オブジェクト空間を仮想カメラからみた画像を生成する画像生成部と、としてコンピュータを機能させてもよい。
【００３１】
この様にするとデバイスの傾きや回転にリアルタイムに連動してオブジェクトや視線方向がリアルタイムに変化するゲーム画像を生成することができる。
【００３２】
（７）このプログラム、情報記憶媒体、向き決定装置、ゲームシステム、向き決定方法は、
前記ガイド方向検出手段は重力方向を検出する加速度センサであって、
前記ガイド軸方向は重力方向でもよい。
【００３３】
加速度センサが検出する加速度は、重力加速度と運動加速度動きによる加速度との和である。そのため、加速運動をしていない状態であれば、加速度センサを使って重力の方向を知ることができるので、これを利用して、３次元空間内でのデバイスの向きを取得することができる。
【図面の簡単な説明】
【００３４】
【図１】本実施形態の向き決定装置の機能ブロック図。
【図２】図２（Ａ）〜図２（Ｄ）は、向き情報入力デバイスの概略外観図。
【図３】コントローラ座標系を示す図。
【図４】アップベクトルvuとXw、Yw、Zwの関係を示した図。
【図５】アップベクトルvuの向きを変化させる様子を示す図。
【図６】球面S 上にXw、Zwの向きを表すグリッドを構成した図。
【図７】図７（Ａ）〜（Ｄ）は、従来手法の第１例の特性グリッドを示す図。
【図８】図８（Ａ）〜（Ｄ）は、従来手法の第２例の特性グリッドを示す図。
【図９】図９は、本実施の形態の単純回転について説明するための概念図。
【図１０】図１０（Ａ）〜（Ｄ）は、単純回転（単回転）の手法の特性グリッドを示す図。
【図１１】目標ベクトルについて説明するための図。
【図１２】図１２（Ａ）〜（Ｄ）は、単純回転（複回転）の手法の特性グリッドを示す図。
【図１３】本実施の形態の単純回転方式（単回転）の手法でコントローラの向きを決定する処理の流れを示すフローチャート。
【図１４】本実施の形態の単純回転方式（複回転）の手法でコントローラの向きを決定する処理の流れを示すフローチャート。
【図１５】本実施の形態の履歴依存型の手法でコントローラの向きを決定する処理の流れを示すフローチャート。
【図１６】本実施形態のゲームシステムの機能ブロック図の一例。
【図１７】図１７（Ａ）〜（Ｄ）は、実施例（その１）において球面S上の各点に対して設定された旋回範囲の例。
【図１８】図１８（Ａ）〜（Ｄ）は、実施例（その２）において球面S上の各点に対して設定された旋回範囲の例。
【図１９】本実施の形態のハイブリット型の手法（実施例２）でコントローラの向きを決定する処理の流れを示すフローチャート。
【図２０】+Zwの旋回範囲について説明するための図。
【図２１】旋回範囲外から旋回範囲内への修正について説明するための図。
【発明を実施するための形態】
【００３５】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成の全てが本発明の必須構成要件であるとは限らない。
【００３６】
１  構成
図１は、向き決定装置の機能ブロック図の一例である。なお本実施形態の向き決定装置では、図１の各部を全て含む必要はなく、その一部を省略した構成としてもよい。
【００３７】
本実施形態の向き決定装置１は、向き情報入力デバイス（例えばコントローラ）２に含まれるガイド方向検出部２０の出力値であるガイドベクトルに基づいて、コントローラの向き（回転マトリクスや各軸の回転角や四元数）を決定する処理を行う。
【００３８】
ガイド方向検出部２０は、重力の向きを検出可能な加速度センサで構成してもよいし、３次元空間のある軸方向を検出可能な他の装置（例えば地磁気センサやポイントマーカとカメラ）で構成してもよいが、ここではガイド方向検出部２０が加速度センサで構成されている場合を例にとり説明する。
【００３９】
本実施形態では、向き情報入力デバイス２は、ガイド方向検出部２０、マイコン２２、通信部２４を含んで構成されている。例えば、向き情報入力デバイス２として、図２（Ａ）〜図２（Ｃ）に示すようなゲームコントローラや図２（Ｄ）に示すような携帯電話機などが考えられる。
【００４０】
ガイド方向検出部２０は、互いに直交する３軸方向（ｘ軸方向、ｙ軸方向、ｚ軸方向）の加速度を検出する。向き情報入力デバイス２の向きが変わると、ガイド方向検出部２０の向きも変わる。また、向き情報入力デバイスによって、ガイド方向検出部の向きはそれぞれ異なる。例えば、図２（Ａ）〜図２（Ｄ）に示す向き情報入力デバイス２では、それぞれのガイド方向検出部２０の３つの検出軸方向が図２（Ａ）〜図２（Ｄ）に示す方向になっている。
【００４１】
例えばガイド方向検出部２０として加速度センサを用いる場合には、一定時間（例えば、５ｍｓｅｃ）毎に３軸分の加速度を検出し、加速度センサによって検出された加速度ベクトル（ガイドベクトル）は、通信部２４によって向き決定装置１に送信される。
【００４２】
マイコン（マイクロコンピュータ）２２は、加速度センサが検出した加速度ベクトル（ガイドベクトル）を通信部２４を介して向き決定装置１に送信させる処理を行う。
【００４３】
通信部２４は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、向き決定装置１にデータを無線で送信する。通信部２４は、加速度センサによって検出された加速度ベクトル（ガイドベクトル）を、所定時間間隔で順次向き決定装置１に送信している。なお、通信部２４は、向き決定装置１と通信ケーブルで接続し、当該通信ケーブルを介して検出情報の送信を行うようにしてもよい。
【００４４】
本実施形態の向き決定装置１は、処理部１０、記憶部３０、操作部３２、表示部３４、情報記憶媒体３６、通信部３８、音出力部４０を含んで構成される。
【００４５】
記憶部３０は、処理部１０や通信部３８などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などのハードウェアにより実現できる。
【００４６】
操作部３２は、操作ボタン、タッチパネル型ディスプレイ、キーボード、マウスなどにより実現できる。
【００４７】
表示部３４は、処理部１０により指示された情報を出力するものであり、その機能は、ＣＲＴディスプレイ、ＬＣＤ（液晶ディスプレイ）、ＯＥＬＤ有機ＥＬディスプレイ、ＰＤＰ（プラズマディスプレイパネル）、タッチパネル型ディスプレイ、或いはＨＭＤ（ヘッドマウントディスプレイ）などのハードウェアにより実現できる。
【００４８】
音出力部４０は、処理部１０により指示された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどのハードウェアにより実現できる。
【００４９】
通信部３８は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、向き情報入力デバイス２の通信部２４を介して、向き情報入力デバイス２からデータを受信する。例えば、通信部３８は、向き情報入力デバイス２においてガイド方向検出部２０により検出された情報を、所定時間間隔で順次受信する。
【００５０】
また、通信部３８は、ネットワーク（インターネット）を介してサーバと通信することができるようにしてもよい。その機能は、各種プロセッサ又は通信用ＡＳＩＣ、ネットワーク・インタフェース・カードなどのハードウェアや、プログラムなどにより実現できる。また、通信部３８は、有線、無線いずれの通信も行うことができる。
【００５１】
処理部１０（プロセッサ）は、向き情報入力デバイス２から受信した加速度センサ２０の検出情報や情報記憶媒体３６から記憶部３０に展開されたプログラム等に基づいて処理を行う。
【００５２】
本実施形態の処理部１０は、単純回転演算部１１、向き情報演算部１２を含む。また、処理部１０は、表示制御部１５や音出力制御部１６を含んでもよい。
【００５３】
単純回転演算部１１は、３次元空間における所定の軸方向をガイド軸とし、ガイド軸方向を検出するガイド方向検出手段の検出値に基づいて、デバイスの向きを決定するプログラムであって、所与の時点でガイド方向検出手段が検出したデバイス座標系における前記ガイド軸方向を示すガイドベクトルを受け取り、ワールド座標系における所定の向きを示す軸ベクトルを第１のベクトルとし、前記ガイドベクトルを第２のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求める処理を行う。
【００５４】
向き情報演算部１２は、前記回転情報に基づき、所与の時点のデバイスの向き情報を求める処理を行う。
【００５５】
また単純回転演算部１１は、ワールド座標系においてガイド軸方向を示す軸ベクトルを第１のベクトルとし、前記第１のベクトルと前記第２のベクトルとを、始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２ベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転をデバイスに作用させた場合の回転情報を求め、向き情報演算部１２は、前記回転情報に基づき、所与の時点のデバイスの向き情報を求めてもよい。
【００５６】
また単純回転演算部１１は、ワールド座標系においてガイド軸方向を示す軸ベクトルを第３のベクトルとし、前記第３のベクトルと方向の異なる目標ベクトルを第１のベクトルとし、前記第１ベクトルと前記第２のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第２のベクトルを含む平面上で、前記第２のベクトルと前記第１のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第１の単純回転と、前記第１のベクトルと前記第３のベクトルとを始点を共有する状態で配置し、前記第１のベクトルと前記第３のベクトルを含む平面上で、前記第１のベクトルと前記第３のベクトルのいずれか一方をいずれか他方と重なるまで回転させる第２の単純回転に関する回転情報を求め、向き情報演算部１２は、前記回転情報に基づき、所与の時点のデバイスの向き情報を求めてもよい。
【００５７】
また単純回転演算部１１は、前記第２の単純回転に関する回転情報の値を予め記憶させておき、前記第２の単純回転については予め記憶されている前記回転情報の値を用いて前記回転情報を演算してもよい。
【００５８】
また向き情報演算部１２は、ワールド座標系とデバイス座標系の第１の軸に対応する軸が一致し、前記第１の軸に直交するとともに互いに直交する第２の軸と第３の軸に対応する各軸が所定の配置にある状態を初期状態として定義し、初期状態のデバイスの向き情報と前記回転情報に基づき所与の時点のデバイスの向き情報を求めてもよい。
【００５９】
この様にするとデバイス座標系がワールド座標系に対して第１軸の周りに所定の角度だけ回転して配置されている状態を初期状態として、ガイドベクトルに対応するデバイスの向きを一意に設定することができる。
【００６０】
また向き情報演算手段１２は、ワールド座標系とデバイス座標系の第１の軸と前記第１の軸に直交するとともに互いに直交する第２の軸と第３の軸に対応する各軸の方向が一致する状態を初期状態として定義し、初期状態のデバイスの向き情報と前記回転情報に基づき所与の時点のデバイスの向き情報を求めてもよい。
【００６１】
この様にするとワールド座標系とデバイス座標系の対応する各軸の方向が一致した状態を初期状態として、ガイドベクトルに対応するデバイスの向きを一意に設定することができる。
【００６２】
また単純回転演算部１１は、所与の時点でガイド方向検出手段が検出したデバイス座標系におけるガイド軸方向を示すガイドベクトルと、前記所与の時点より過去の時点のデバイスの向き情報と当該向き情報に対応するガイドベクトルを受け取り、前記所与の時点におけるガイドベクトルを第２のベクトルとし、前記過去の時点のガイドベクトルを第１のベクトルとし、前記第１のベクトルと前記第２のベクトルとを始点を共有する状態で配置し、両ベクトルを含む平面上で、前記第１のベクトルと前記第２のベクトルのいずれか一方をいずれか他方と重なるまで回転させる単純回転を前記デバイスに作用させた場合の回転情報を求め、前記向き情報演算部は、前記回転情報と前記過去の時点の前記デバイスの向き情報に基づき、前記所与の時点の前記デバイスの向き情報を求めてもよい。
【００６３】
表示制御部１５は、表示部３４に所定の情報を表示させる処理を行う。
【００６４】
音出力制御部１６は、音出力部４０から所定の音を出力させる処理を行う。
【００６５】
情報記憶媒体３６（コンピュータにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク（ＭＯ）、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ（ＲＯＭ）などにより実現できる。処理部１０は、情報記憶媒体３６に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体３６には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。
【００６６】
なお、本実施形態の各部としてコンピュータを機能させるためのプログラム（データ）は、サーバが有する、記憶部、情報記憶媒体からネットワークを介して情報記憶媒体３６（または、記憶部３０）に配信するようにしてもよい。このようなサーバの情報記憶媒体の使用も本発明の範囲に含まれる。
【００６７】
２  座標系とコントローラの向き
ここでは向き情報入力デバイスとしてコントローラを例にとり説明する。
【００６８】
ワールド座標系をXw、Yw、Zwとし、各座標軸の向きを+Xw=右方向、+Yw=上方向、+Zw=手前方向と定める。一方、コントローラ座標系（デバイス座標系の一例）を図３のようにXc、Yc、Zcとし、Xc、Yc、Zcと、Xw、Yw、Zwの各軸が一致した状態を基準状態と呼ぶことにする。
【００６９】
「ワールド座標系に対するコントローラ座標系の向き」を表すマトリクスをＭとする。マトリクスの要素の並びは、列ベクトルに対して左からマトリクスを掛ける方式とする。Ｍの要素を次のように定める。
【数１】
2011050561.tif 000073
また、ベクトルv0、v1、v2を次のように定義する。
【数２】
2011050561.tif 000074
Ｍの要素を、３つの行ベクトル（列ベクトルの転置として表す）の並びと見なして、便宜上次のように書き表すことにする。
【数３】
2011050561.tif 000075
Ｍは向きを表すマトリクス（回転マトリクス）なので、Ｍ-1 = ＭＴ  となる。Ｍ-1 は、「コントローラ座標系に対するワールド座標系の向き」を表すマトリクスである。Ｍ-1 の要素を、３つの列ベクトルの並びと見なして、便宜上次のように書き表すことにする。
【数４】
2011050561.tif 000076
また、各軸方向の単位ベクトルe0, e1, e2を次のように定義する。
【数５】
2011050561.tif 000077
すると次式が成り立つ。
【数６】
2011050561.tif 000078
【数７】
2011050561.tif 000079
従って、コントローラ座標系におけるベクトルv0,v1,v2は、それぞれワールド座標系におけるベクトルe0, e1, e2（即ち+Xw、+Yw、+Zw方向の単位ベクトル）に一致することが分かる。
【００７０】
３  問題の定義
３．１  アップベクトル
加速度センサ（ガイド方向検出部の一例）によって検出された上方向ベクトル（ガイドベクトルの一例）を「アップベクトル」と呼ぶことにし、アップベクトルvuとする。vuの要素は次のとおりとする。                                                        
【数８】
2011050561.tif 000080
加速度センサが検出した加速度ベクトル重力加速度) をa = [ax ay az]T とする。このaはコントローラ座標系における値である。アップベクトルはvu = a/|a|によって得られる。
【００７１】
３．２  問題の定義  
コントローラの向き決めにおいて、解くべき問題は次のように表せる。与えられたアップベクトルvuから、コントローラの向きＭを決める。
【００７２】
コントローラ座標系のアップベクトルvuは、ワールド座標系では上向きの単位ベクトルになるので、次式が成り立つ。
【数９】
2011050561.tif 000081
従って、
【数１０】
2011050561.tif 000082
となり、マトリクスＭの要素の１行に相当するv1は、必ずvuに等しくなる。
【００７３】
マトリクスＭの残り要素（v0及びv2）については、何らかの計算条件を追加して、決定しなければならない。追加する計算条件は種々考えられるが、この計算条件次第で、コントローラの向き決めの挙動が変わる。
【００７４】
３．３  フリップ現象
コントローラの向き決めにおいて、「アップベクトルvuの連続的な変化に対して、コントローラの向きＭが不連続に変化する現象」を「フリップ現象」と呼ぶことにする。フリップ現象は好ましくない現象であって、可能な限り抑制すべきである。
【００７５】
４  比較手法と問題点
比較例として、特開2007-267851に開示されている２つの例について説明する。これらの手法では、フリップ現象が２方向で発生する。
【００７６】
４．１  比較手法（左右方向を維持）
コントローラの向きを決める際に、+Xc半直線（Xc軸のXc≧0の領域）がXwYw平面内のXw≧0の領域内に入るようにする。Ｍの要素は次式により得られる。
【数１１】
2011050561.tif 000083
【数１２】
2011050561.tif 000084
【数１３】
2011050561.tif 000085
この向き決め手法は、「XcはZwに垂直であり、Ywに垂直な平面とYcZc平面との交線をZwとする」と表すこともできる。この手法でフリップが起こるのは、vuが±Xc方向を向く場合、即ちプレイヤがコントローラの+Xcを真上または真下に向けて保持した場合である。
【００７７】
４．２  比較手法前後方向を維持
コントローラの向きを決める際に、+Zc半直線がYwZw平面内のZw≧0の領域内に入るようにする。                                                                
【数１４】
2011050561.tif 000086
【数１５】
2011050561.tif 000087
【数１６】
2011050561.tif 000088
この向き決め手法は、「ZcはXwに垂直であり、Ywに垂直な平面とXcYc平面との交線をXwとする」と表すこともできる。この手法でフリップが起こるのは、vuが±Zc方向を向く場合、即ちプレイヤがコントローラの+Zcを真上または真下に向けて保持した場合である。
【００７８】
５  向き決め手法の分類
コントローラの向き決め手法は、履歴非依存型と履歴依存型の２タイプに分類できる。履歴非依存型では、コントローラの向きＭは、過去のアップベクトルには依存せず、現在のアップベクトルだけで決まる。履歴依存型では、コントローラの向きＭは、現在のアップベクトルだけでは決まらず、過去のアップベクトルに依存する。この分類に基づいて、それぞれの特徴を以下の節で述べる。
【００７９】
６  履歴非依存型と特性グリッド
前述の比較手法は、履歴非依存型である。まず、履歴非依存型の挙動について考える。
図４は、コントローラ座標系を基準として、あるアップベクトルvuを表示し、さらにvuの終点を起点として、これに対応するXw,Yw,Zwの向きを示したものである。Ywはワールドの上方向なので、Ywとvuの向きは一致する。従ってXw,Zwはvuに垂直になる。
【００８０】
vuの向きを変化させると図５のようになる。|vu|= 1なので、vuの終点は、原点を中心とする半径１の球面上に位置する。この球面を「球面S」とする。Xw,Zwは、vuに垂直なので、球面Sに接する。履歴に依存しないので、各vuに対してXw,Yw,Zwの向きは一意に定まる。従って、球面S上の各点に対して接ベクトルXw,Zwが一意に定まることになる。
【００８１】
vuの変化に対してXw,Zw が連続的に変化するならば、図６のように、球面S上にXw,Zwの向きを表すグリッドを構成できる。このグリッドは、コントローラの向き決め方式の挙動特性を表す。そこで、これを「特性グリッド」と呼ぶことにする。さらに、この特性グリッドはコントローラ座標系に固定されているので、そのことを明確にする際には、「コントローラ固定特性グリッドと称する。このように、履歴非依存型の挙動特性は、コントローラ固定特性グリッドで表すことができる。
【００８２】
前述の比較手法の第１例左右方向を維持では、特性グリッドは図７（Ａ）〜（Ｄ）に示すように、Xc軸を地軸とする地球儀の緯線・経線の形状になる。+Xcを地軸の北とすると、球面S上の各点において、+Xwは経線の北方向、+Zwは緯線の東方向である。
【００８３】
この特性グリッドから、北極・南極に相当する２点３１０−１、３１０−２が特異点であることが分かる。アップベクトルがこの特異点方向（+Xc方向、-Xc方向）を向いた場合、コントローラの向きが不定となる。また、アップベクトルが特異点を通過すると、コントローラの向きは不連続に変化し、フリップ現象が起こる。実用上は、特異点において向き不定とする替わりに、何らかの向きをコントローラに与えることが多いが、その場合でも向きの変化の不連続性は残るためフリップ現象が起こる。
【００８４】
このように、特性グリッドの特異点に着目することにより、コントローラの向き決めにおけるフリップ現象の発生およびフリップ方向を、明確に知ることができる。
【００８５】
同様に、従来手法の第２例（前後方向を維持）では、特性グリッドは図８（Ａ）〜（Ｄ）のようになる。この特性グリッドから、+Zcと-Zcの２方向がフリップ方向となることが分かる。
【００８６】
７  単純回転
今後の手法説明で使用するために、以下のように「単純回転」を定義する。
【００８７】
図９に示すように、始点を共有する任意の単位ベクトル va, vbに対して、次の条件（ａ）（ｂ）を満たす回転を、vaから vbへの単純回転と定める。                  
（ａ） va, vbのなす平面に垂直な軸の回りの回転。  
（ｂ） 回転によりva,はvbに重なる。
【００８８】
なお、vaとvbが同じ向き（即ちva =  vb）の場合は無回転とする（回転マトリクスで表すと単位行列）。vaとvbが反対向き（即ちva = -vb）の場合は定義不能とする。
【００８９】
「vaからvbへの単純回転マトリクス」をＭSR（va,vb）と表すことにする。このマトリクスは次式で得られる。                                            
【数１７】
2011050561.tif 000089
ただし、[nx ny nz]T は回転軸を表わす単位ベクトル、φは回転角で、以下の式により得られる。                                                                  
【数１８】
2011050561.tif 000090
【数１９】
2011050561.tif 000091
【数２０】
2011050561.tif 000092
【数２１】
2011050561.tif 000093
「vaからvbへの単純回転」の逆変換は、「vbからvaへの単純回転」となる。      
【数２２】
2011050561.tif 000094
以上の説明では、va,vb は単位ベクトルとしたが、一般のベクトルを扱えるように定義を拡張する。大きさが1でないベクトルの場合は、それぞれのベクトルを正規化してから上記の方法で求めた回転を、単純回転と定義する。従って、k,l を任意の正の実数とするとき、次式が成り立つ。                                            
【数２３】
2011050561.tif 000095
【００９０】
８  履歴非依存型
８．１  フリップ現象と不動点原理
履歴非依存型では、フリップ現象を回避できない。このことは、以下のようにして不動点定理から導かれる。不動点定理には種々のバリエーションがあるが、ここで扱う不動点定理(Fixed point theorem, Hairy ball theorem) の内容は次のとおりである。
【００９１】
連続関数f : S２ → S２には、f(P)=PとなるPが必ず存在する。
ただし、S２は「球面」の意味で、Pは球面上の点である。
【００９２】
この定理から得られる結果の一例として、「地球上には無風地点が存在する」という例え話がある。この例では、球の表面に沿った連続的な（不連続箇所がない) 流れを想定している。球面上の各点Pに対して、その点から流れに乗って移動した先をf(P)とする。不動点定理を適用すると、f(P)= P即ち流速が0の点が必ず存在する。
【００９３】
この結果の対偶をとれば、「流速が0でない流れを作れば、必ず不連続箇所が存在する」ことになる。さらに、両者を合わせると、「球面上の流れには、不連続箇所または流速0の箇所が必ず存在する」ことが言える。
【００９４】
履歴非依存型では、図５のように、球面S上の各点に対してXw,Zwの向きを一意に定める。ここで、Xwを球面S上の各点における流れの方向と見なす。すると、Xwが不連続またはXwが不定となる特異点が、球面S上に必ず存在することになる。
【００９５】
以上のように、履歴非依存型には特異点が必ず存在するため、フリップ現象を回避できない。そこで改良策として、以下に述べる手法を使って、フリップが生じる方向を２方向から１方向に減らす。
【００９６】
８．２  単純回転方式（単回転）
前述の単純回転を用いて、ワールド座標系において、次の手順によりコントローラの向きＭを決めることができる。ここではコントローラの向き情報としてマトリクスＭを求める場合を例にとり説明する。
【００９７】
第１のステップとして、コントローラの向きをワールド座標系に合わせる（基準状態にする）。コントローラの向きをワールド座標系に合わせるとは、例えば図３において、Xc、Yc、ZcとXw、Yw、Zwの各軸が一致した状態（基準状態）にすることであり、処理としてはコントローラ座標系に対するワールド座標系の向きを示すパラメータやワールド座標系におけるコントローラの向きを示すパラメータを基準状態にする処理を行うことでもよい。
【００９８】
第２のステップとして、アップベクトルvuから+Ywベクトルへの単純回転を、コントローラに作用させる。処理としては単純回転のマトリクスＭを求める処理でもよいし、求めたマトリクスをパラメータに作用させる処理を含んでもよい。
【００９９】
ワールド座標系における+Yw方向単位ベクトルはe1なので、Ｍは次式で表される（要素の詳細は１０．２．４参照）。                    
【数２４】
2011050561.tif 000096
前述のように、履歴非依存型の挙動特性は、コントローラ固定特性グリッドで表せる。そこで、特性グリッドの形状を把握するために、コントローラ座標系から見たワールドの向きＭ-1 を求める。                    
【数２５】
2011050561.tif 000097
【数２６】
2011050561.tif 000098
これはe1からvuへの単純回転である。特性グリッドは図１０（Ａ）〜（Ｄ）のようになる。同図に示すように、特異点は-Yc方向の極１つのみである。従って、この手法でフリップが起こるのは、vuが-Yc方向を向く場合、即ちプレイヤがコントローラの-Ycを真上に向けて保持した場合のみである。
【０１００】
８．３  単純回転方式（複回転）
前節８．２で述べた単純回転方式単回転は、フリップ方向が１方向なので、比較例の方式よりも使い易くなっている。しかし、コントローラを振りかぶるような向きに持つと、アップベクトルが-Yc方向となるためフリップが起こる。そこで、フリップ方向をずらして、フリップを起こり難くする。
【０１０１】
アップベクトルが向く頻度が小さい方向をフリップ方向とするのが良い。このような方向の単位ベクトルを一つ決めて、これをvrとする。vt = -vrを目標ベクトル（target vector)とする。ワールド座標系において、次の手順によりコントローラの向きＭを決める。
【０１０２】
第１のステップとして、コントローラの向きをワールド座標系に合わせる（基準状態にする）。第２のステップとして、アップベクトルvuから目標ベクトルvt への単純回転を、コントローラに作用させる。第３のステップとして、目標ベクトルvt から+Ywベクトルへの単純回転を、コントローラに作用させる。
Ｍは次式で表される。                                                
【数２７】
2011050561.tif 000099
コントローラ座標系から見たワールドの向きは次式のようになる。                  
【数２８】
2011050561.tif 000100
【数２９】
2011050561.tif 000101
この方式の特性グリッドは、「単純回転方式単回転」の特性グリッドをＭSR（e1, vt） で回転させたものになる。例えばvrを、図１１のように、目標ベクトルを-Yc方向から+Zc方向にθ= 50°回転させた方向に設定した場合、特性グリッドは図１２（Ａ）〜（Ｄ）のようになる。vr方向が特異点６００となることが分かる。この手法でフリップが起こるのはvuがvr方向を向く場合、即ちプレイヤがコントローラのvrを真上に向けて保持した場合のみである。
【０１０３】
９  履歴依存型
履歴依存型のうち最も単純なモデルでは、問題を次のように捉えることができる。ある時点において、アップベクトルがvpで、これに対応するコントローラの向きＭpが既に得られているとする。プレイヤがコントローラを動かすのに伴って、新たなアップベクトルvuが得られる。このvuに対するコントローラの向きＭを決める。
【０１０４】
履歴依存型の最大の長所は、フリップ現象を回避できることである。履歴非依存型では、図５のように、球面S上の各点に対してXw,Zwの向きを一意に定めたが、履歴依存型では、Xw,Zwの向きは履歴に依存し一意に定まらない。そのため、不動点定理の縛りを受けないので、フリップを起こさない向き決めが可能となる。
【０１０５】
一方その半面、向き決めの挙動が履歴に依存するため、得られるコントローラの向きが意図した方向になりにくいという短所がある。
【０１０６】
履歴依存型の一手法として、単純回転を用いる方法がある。この手法では、コントローラ座標系を基準として、ワールドに対してvpからvuへの単純回転を掛ける。コントローラの向きは、以下のようにして求められる。                                    
【数３０】
2011050561.tif 000102
【数３１】
2011050561.tif 000103
【数３２】
2011050561.tif 000104
【０１０７】
１０  ハイブリット型
これまで述べてきたように、履歴非依存型ではフリップ現象を回避できない。一方、履歴依存型は、フリップ現象は回避できるものの、得られるコントローラの向きを意図した方向に向け難い。そこで、両者を融合させて、以下のようなハイブリッド型を作る。
【０１０８】
球面S上の各点において、特性グリッドを基準として、Xw（またはZw）が向くことのできる方向の範囲（以下「旋回範囲」という、許容範囲の一例） を設定する。この旋回範囲の制約のもとで、履歴依存型の手法を用いてXw（またはZw）の向きを決める。処理手順は次のようになる。
【０１０９】
第１のステップとして、履歴依存型の手法を使ってXw,Zwの向きを求める。
【０１１０】
第２のステップとして、求めた結果が旋回範囲内かどうかを調べる。                
(a) 旋回範囲内であればXw,Zwをそのまま使う。
(b) 旋回範囲外であれば、旋回範囲内に収まるようにXw,Zwを修正する。
旋回範囲を設定する際には、次の２点に留意する。
（１）特異点の解消                                                              
特性グリッドの特異点付近では、向き制限なし（旋回範囲が全方位）に設定する。この設定により、特異点付近では、履歴依存型の向き決めのみによってXw,Zwが決まるので、フリップ問題が解消される。                                                      
（２）連続性の確保                                                              
球面S上の位置に対して、旋回範囲が連続的に変化するように設定する。この設定により、向き制限なしの領域から向き制限された領域へとアップベクトルが移動した際に、Xw,Zwの向きが連続的に変化する。
【０１１１】
１０．１  ハイブリット型の実施例（その１）
従来手法（前後方向を維持）の特性グリッドを用いる。この特性グリッドは、図８（Ａ）〜（Ｄ）のように、地球儀の緯線・経線に相当する形状をしており、北極・南極に相当する+Zc、-Zc方向が特異点となっている。この特性グリッドをベースとし、図１７（Ａ）〜（Ｄ）のように、球面S上の各点に対して旋回範囲を設定する。図２０の扇型の斜線部分が+Zwの向くことのできる範囲（許容範囲）である。赤道上では、+Zw方向を特性グリッドの向き（+Zcの向きと同じ）に拘束する。緯度に比例して旋回範囲を広げ、緯度λ以上の領域では向き制限なし（旋回範囲が全方位）とする。図１７（Ａ）〜（Ｄ）ではλ = π/3 とした。
【０１１２】
この設定により、コントローラの向き決めは次のような挙動となる。vuがXcYc平面内にある場合には、即ちプレイヤがコントローラのZc軸を水平に保持した場合には、履歴に依存せず、+Zwは+Zcと一致する。またvuが±Zc方向を向く場合には、即ちプレイヤがコントローラのZc軸を垂直に保持した場合には、Zwの向きは履歴によって決まり、フリップは起こらない。
【０１１３】
アップベクトルvuに対して、コントローラの向きＭ求める処理は、以下のようになる。
【０１１４】
１０．１．１  履歴依存型による向き決め
まず、９節の履歴依存型-単純回転（単回転）の手法でコントローラの向きを求め、これをＭdとする。Ｍdの要素は次式のとおりとする。コントローラの向きがＭdのとき、コントローラ座標系における+Xw,+Zwの向きは、それぞれvd,veとなる。                  
【数３３】
2011050561.tif 000105
ここで、もし|uz| ≧ sin λ であれば、アップベクトルは球面S上で向き制限なしの領域にあるので、Ｍ＝Ｍd として終了となる。そうでない場合は、処理は以下に続く。
【０１１５】
１０．１．２  履歴非依存型による向き決め
４．２節の履歴非依存型（前後方向を維持）の手法でコントローラの向きを求め、これをＭとする。Ｍgの要素は次式のとおりとする。vg,vhは、それぞれ特性グリッドから決まる+Xw,+Zw方向に相当する。
【数３４】
2011050561.tif 000106
旋回範囲の大きさρ（単位はラジアン）を、次式により設定する。
【数３５】
2011050561.tif 000107
図２０のように、+Zwが向くことのできる範囲（+Zwの旋回範囲）は、vhから±ρの範囲となる。このρを使って、Ｍdの向きが旋回範囲内にあるかどうかを調べる。もしvｅ・ vｈ ≧ cos ρであれば、旋回範囲内にあるので、Ｍ = Ｍdとして終了となる。そうでない場合は、処理は以下に続く。
【０１１６】
１０．１．３   旋回範囲内への修正
旋回範囲外にあるveを修正し、旋回範囲内に収まるようにする。このとき、図２１のように、ρ,-ρ のうちいずれか近い方に修正する。もしve ・ vg  ≧  0 であればρ’= ρ とし、そうでなければρ’= -ρ とする。veの修正結果は、vhをvu軸回りにρ’だけ回転させたものになる。次式のように回転マトリクスＭrを作る。
【数３６】
2011050561.tif 000108
【０１１７】
コントローラの向きＭは、以下のようにして得られる。
【数３７】
2011050561.tif 000109
【数３８】
2011050561.tif 000110
【０１１８】
１０．２  ハイブリッド型の実施例（その２）
単純回転方式単回転の特性グリッドを用いる。この特性グリッドは、図１０（Ａ）〜（Ｄ）のように、-Yc方向のみが特異点となる。この特性グリッドをベースとし、図１８（Ａ）〜（Ｄ）のように、球面S上の各点に対して旋回範囲を設定する。図中の扇型の斜線部分が+Zwの向くことのできる範囲である。球面Sと+Ycとの交点をP1とする。点P1では、+Zw方向を特性グリッドの向き（+Zcの向きと同じ）に拘束する。点P1からの距離（球面S上での距離とする）に比例して旋回範囲を広げ、距離λ以上の領域では向き制限なし（旋回範囲が全方位）とする。図１８（Ａ）〜（Ｄ）ではλ= π/2とした。  
【０１１９】
この設定により、コントローラの向き決めは次のような挙動となる。
【０１２０】
vuが+Yc方向を向く場合、即ちプレイヤがコントローラの+Ycを真上に向けた場合には、履歴に依存せず、+Zwは+Zcと一致する。
【０１２１】
またvuが-Yc方向を向く場合、即ちプレイヤがコントローラの+Ycを真下に向けた場合には、Zwの向きは履歴によって決まり、フリップは起こらない。
【０１２２】
アップベクトルvuに対して、コントローラの向きＭを求める処理は、以下のようになる。
【０１２３】
１０．２．１  履歴依存型による向き決め
まず、９節の履歴依存型-単純回転 (単回転の手法でコントローラの向きを求め、これをＭdとする。Ｍdの要素は式（３３）と同様とする。ここで、もしuy ≦ cosλであれば、アップベクトルは球面S上で向き制限なしの領域にあるので、Ｍ = Ｍd として終了となる。そうでない場合は、処理は以下に続く。
【０１２４】
１０．２．２  履歴非依存型による向き決め
８．２節の履歴非依存型-単純回転方式 (単回転の手法でコントローラの向きを求め、これをＭｇとする。Ｍｇの要素は式 (３４）と同様とする。旋回範囲の大きさρ単位はラジアンを、次式により設定する。
【数３９】
2011050561.tif 000111
+Zwの旋回範囲は、１０．１節の実施例（その１）と同様に、図２０のようになる。もしvｅ・ vｈ ≧ cos ρであれば、旋回範囲内にあるので、Ｍ = Ｍdとして終了となる。そうでない場合は、処理は以下に続く。
【０１２５】
１０．２．３  旋回範囲内への修正
旋回範囲外にあるveを修正し、旋回範囲内に収まるようにする。処理内容は、実施例（その１）の１０．１．３節と同様である。
【０１２６】
１０．２．４  単純回転マトリクスの詳細
単純回転マトリクスの要素の詳細を以下に記す。 
（１）ＭSR（vu, e1）の詳細 
８．２節のＭSR（vu, e1）の要素は次のようになる。 
【数４０】
2011050561.tif 000112
ただしＫ１は以下のとおりである。 
【数４１】
2011050561.tif 000113
次式を利用すると計算式を簡略化できるが、uy ≒-1のときに桁落ちによる計算精度の劣化を招くので、このような簡略化は使うべきではない。 
【数４２】
2011050561.tif 000114
【０１２７】
（２）ＭSR（vt,e1）ＭSR（vu,vt）の詳細 
８．３節において、vrを図１１のように設定した場合、即ち vt=[0 cosθ -sinθ]Tの場合、ＭSR（vt,e1）ＭSR（vu,vt）の要素は次のようになる。 
【数４３】
2011050561.tif 000115
ただし、u0,u1,uc,us,K2は以下のとおりである。                          
【数４４】
2011050561.tif 000116
【数４５】
2011050561.tif 000117
【数４６】
2011050561.tif 000118
【数４７】
2011050561.tif 000119
【数４８】
2011050561.tif 000120
次式を利用すると計算式を簡略化できるが、u0≒-1のときに桁落ちによる計算精度の劣化を招くので、このような簡略化は使うべきではない。
【数４９】
2011050561.tif 000121
【０１２８】
１１  向き決定処理
図１３は、本実施の形態の単純回転方式（その１）の手法でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１２９】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ１０）。
【０１３０】
次に数式（２４）によりＭを求める（ステップＳ２０）。
【０１３１】
そして求めたＭを、コントローラの向き情報とする（ステップＳ３０）。
【０１３２】
図１４は、本実施の形態の単純回転方式（その２）の手法でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１３３】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ１１０）。
【０１３４】
次に、コントローラ座標系における目標ベクトルvtと数式（２７）により、Ｍを求める（ステップＳ１２０）。
【０１３５】
そして求めたＭを、コントローラの向き情報とする（ステップＳ１３０）。
【０１３６】
図１５は、本実施の形態の履歴依存型の手法でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１３７】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ２１０）。
【０１３８】
次に、前回のガイドベクトル及び前回のコントローラの向き情報Ｍpを受け取り、前回のガイドベクトルをアップベクトルvpとして設定する（ステップＳ２２０）。
【０１３９】
次に、数式（３１）、（３２）によりＭを求める（ステップＳ２３０）。
【０１４０】
そして求めたＭを、コントローラの向き情報とする（ステップＳ２４０）。
【０１４１】
図１９は、本実施の形態のハイブリット型の手法（実施例２）でコントローラの向きを決定する処理の流れを示すフローチャートである。例えば画像生成システムやゲームシステムのコントローラに適用する場合には、下記の処理をフレーム毎に行ってもよい。
【０１４２】
まずガイド方向検出部が検出した上方向をコントローラ座標系で表すガイドベクトルを受け取り、ガイドベクトルをアップベクトルvuとして設定する（ステップＳ３１０）。
【０１４３】
次に、前回のガイドベクトル及び前回のコントローラの向き情報Ｍpを受け取り、前回のガイドベクトルをアップベクトルvpとして設定する（ステップＳ３２０）。
【０１４４】
次に、数式（３１）、（３２）によりＭを求め、これをＭdとする（ステップＳ３３０）。
【０１４５】
uy ≦ cosλであれば（ステップＳ３４０でＹ）、アップベクトルは球面S上で向き制限なしの領域にあるので、Ｍ = Ｍdとする（ステップＳ３５０）。
【０１４６】
uy ≦ cosλでなければ（ステップＳ３４０でＮ）、数式（２４）によりＭを求め、これをＭｇとする（ステップＳ３６０）。
【０１４７】
次に、数式（３９）によりρを求める（ステップＳ３７０）。
【０１４８】
vｅ・ vｈ ≧ cos ρであれば（ステップＳ３８０でＹ）、旋回範囲内にあるので、Ｍ = Ｍd とする（ステップＳ３５０）。
【０１４９】
vｅ・ vｈ ≧ cos ρでなければ（ステップＳ３８０でＮ）以下の処理を行う。vｅ・ vｇ ≧  0 であれば（ステップＳ３９０でＹ）、ρ’= ρ とし（ステップＳ４００）、そうでなければ（ステップＳ３９０でＮ）、ρ’= -ρ とする（ステップＳ４１０）。
【０１５０】
次に、数式（３６）によりＭｒを求める（ステップＳ４２０）。
【０１５１】
次に、数式（３８）によりＭを求める（ステップＳ４３０）。
【０１５２】
そして求めたＭを、コントローラの向き情報とする（ステップＳ４４０）。
【０１５３】
１２  ゲームシステム
図１６は、本実施形態のゲームシステムの機能ブロック図の一例である。なお本実施形態のゲームシステムでは、図１６の各部を全て含む必要はなく、その一部を省略した構成としてもよい。
【０１５４】
本実施形態のゲームシステムは、本体装置１００、入力装置２００、情報記憶媒体１８０、表示部（表示装置）１９０、スピーカ１９２、光源１９８を含んで構成されている。
【０１５５】
入力装置２００は、加速度センサ（ガイド方向検出部の一例）２１０、撮像部２２０、スピーカ２３０、振動部２４０、マイコン２５０、通信部２６０によって構成されている。
【０１５６】
加速度センサ２１０は、３軸（ｘ軸、ｙ軸、ｚ軸）の加速度を検出する。すなわち、加速度センサ２１０は、上下方向、左右方向、及び、前後方向の加速度を検出することができる。なお、加速度センサ２１０は、一定時間（例えば、５ｍｓｅｃ）毎に加速度を検出している。加速度センサ２１０によって検出された加速度ベクトル（ガイドベクトル）は、通信部２６０によって本体装置１００に送信される。
【０１５７】
撮像部２２０は、赤外線フィルタ２２２、レンズ２２４、撮像素子（イメージセンサ）２２６、画像処理回路２２８を含む。赤外線フィルタ２２２は、入力装置２００の前方に配置され、表示部１９０に関連付けられて配置されている光源１９８から入射する光から赤外線のみを通過させる。レンズ２２４は、赤外線フィルタ２２２を透過した赤外線を集光して撮像素子２２６へ出射する。撮像素子２２６は、例えば、ＣＭＯＳセンサやＣＣＤのような固体撮像素子であり、レンズ２２４が集光した赤外線を撮像して撮像画像を生成する。撮像素子２２６で生成された撮像画像は、画像処理回路２２８で処理される。例えば、撮像素子２２６から得られた撮像画像を処理して高輝度部分を検知し、撮像画像における光源の位置情報（特定位置）を検出する。なお、光源が複数存在する場合には、撮像画像上の位置情報を検出する。また、検出した位置情報は、通信部２６０によって、本体装置１００に送信される。
【０１５８】
スピーカ２３０は、本体装置１００から通信部２６０を介して取得した音を出力する。
【０１５９】
振動部（バイブレータ）２４０は、本体装置１００から送信された振動信号を受信して、振動信号に基づいて作動する。
【０１６０】
マイコン（マイクロコンピュータ）２５０は、受信した本体装置１００からのデータに応じて、音を出力する制御や、バイブレータを作動させる制御を行う。また、加速度センサ２１０が検出した加速度ベクトル（ガイドベクトル）を通信部２６０を介して本体装置１００に送信させる処理を行ったり、撮像部２２０によって検出された位置情報を、通信部２６０を介して本体装置１００に送信させる処理を行う。
【０１６１】
通信部２６０は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、本体装置１００とデータを無線で送受信する。通信部２６０は、加速度センサ２１０によって検出された加速度ベクトル（ガイドベクトル）や撮像部２２０において検出した位置情報等を、所定の時間間隔で順次本体装置１００に送信している。なお、通信部２６０は、本体装置１００と通信ケーブルで接続し、当該通信ケーブルを介して情報の送受信を行うようにしてもよい。
【０１６２】
なお、入力装置２００は、ボタン、レバー（アナログパッド）、マウス、十字キー、タッチパネル型ディスプレイなどの操作子を更に設けてもよい。また、入力装置２００はプレイヤの入力動作によって変化する角速度を検出するジャイロセンサを備えていてもよい。
【０１６３】
また入力装置２００は、プレイヤが把持して動かすものであってもよいし、プレイヤが身につけて動かすものであってもよい。また、入力装置２００には、プレイヤが把持する刀型コントローラや銃型コントローラ、あるいはプレイヤが身につける（プレイヤが手に装着する）グローブ型コントローラなど実際の道具を模して作られたコントローラも含まれる。また入力装置２００には、入力装置２００と一体化されている本体装置１００（ゲーム装置、携帯型ゲーム装置）、携帯電話機なども含まれる。
【０１６４】
次に、本実施形態の本体装置１００について説明する。本実施形態の本体装置１００は、記憶部１７０、処理部１１０、通信部１９６によって構成される。
【０１６５】
記憶部１７０は、処理部１１０や通信部１９４などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などのハードウェアにより実現できる。
【０１６６】
特に、本実施形態の記憶部１７０は、主記憶部１７２、描画バッファ１７４、音データ記憶部１７６を含む。主記憶部１７２は、処理部１１０や通信部１９４などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などのハードウェアにより実現できる。また、描画バッファ１７４は、描画部１４０において生成された画像を記憶する。
【０１６７】
また、音データ記憶部１７６は、プレイヤの入力動作に対する入力装置２００の反応を示す確認音や、ゲーム演算処理に伴い出力される効果音を記憶する。なお、確認音は、検出情報に応じて複数種類記憶する。また、効果音は、モーションや、所与のイベントに応じて複数種類記憶する。また、加速度センサ２１０によって検出される加速度の方向（上方向、下方向、左方向、右方向、前方向、後方向）に応じて複数種類の確認音を記憶してもよい。
【０１６８】
情報記憶媒体１８０（コンピュータにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク（ＭＯ）、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ（ＲＯＭ）などにより実現できる。処理部１１０は、情報記憶媒体１８０に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体１８０には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。なお情報記憶媒体１８０は、メモリカードに、プレイヤの個人データやゲームのセーブデータなどを記憶するものも含む。
【０１６９】
表示部１９０は、処理部１１０により生成された画像等を出力するものであり、その機能は、ＣＲＴディスプレイ、ＬＣＤ（液晶ディスプレイ）、ＯＥＬＤ有機ＥＬディスプレイ、ＰＤＰ（プラズマディスプレイパネル）、タッチパネル型ディスプレイ、或いはＨＭＤ（ヘッドマウントディスプレイ）などのハードウェアにより実現できる。
【０１７０】
スピーカ１９２は、音制御部１５０により再生する音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどのハードウェアにより実現できる。なお、スピーカ１９２は、表示部に備えられたスピーカとしてもよい。例えば、テレビ（家庭用テレビジョン受像機）を表示部１９０としている場合には、テレビのスピーカとすることができる。
【０１７１】
光源１９８は、例えばＬＥＤであり、表示部１９０に関連付けられて配置される。
【０１７２】
通信部１９６は、ネットワーク（インターネット）を介して他の本体装置（ゲーム装置）と通信することができる。その機能は、各種プロセッサ又は通信用ＡＳＩＣ、ネットワーク・インタフェース・カードなどのハードウェアや、プログラムなどにより実現できる。また、通信部１９６は、有線、無線いずれの通信も行うことができる。
【０１７３】
また、通信部１９６は、アンテナ、無線モジュールを含み、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）などの通信方式により、入力装置２００の通信部２６０を介して、入力装置２００とデータを送受信する。例えば、通信部１９６は、確認音、効果音等の音データ、及び、振動信号を、入力装置２００に送信し、入力装置２００において、加速度センサ２１０や撮像素子２２６によって検出された情報を所定の間隔で受信する。
【０１７４】
なお、本実施形態の各部としてコンピュータを機能させるためのプログラム（データ）は、サーバが有する、記憶部、情報記憶媒体からネットワークを介して情報記憶媒体１８０（または、記憶部１７０）に配信するようにしてもよい。このようなサーバの情報記憶媒体の使用も本発明の範囲に含まれる。
【０１７５】
処理部１１０（プロセッサ）は、入力装置２００から受信した検出情報や情報記憶媒体１８０から記憶部１７０に展開されたプログラム等に基づいて、ゲーム演算処理、画像生成処理、或いは音制御の処理などを行う。
【０１７６】
特に本実施形態の処理部１１０は、向き決定部１２０、ゲーム演算部１３０、描画部１４０、音制御部１５０、振動制御部１６０を含む。
【０１７７】
向き決定部１２０は、単純回転演算部１２１、向き情報演算部１２２を含む。単純回転演算部１２１、向き情報演算部１２２の機能に関しては、図１と同様であるので説明を省略する。
【０１７８】
ゲーム演算部１３０は、キャラクタ（プレイヤキャラクタ、敵キャラクタ）、移動体（車、飛行機など）、建物、樹木、柱、壁、マップ（地形）などの表示物を表す各種オブジェクト（ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト）をオブジェクト空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクトの位置や回転角度（向き、方向と同義）を決定し、その位置（Ｘ、Ｙ、Ｚ）にその回転角度（Ｘ、Ｙ、Ｚ軸回りでの回転角度）でオブジェクトを配置する。
【０１７９】
また、ゲーム演算部１３０は、オブジェクト空間内の所与（任意）の視点から見える画像を生成するための仮想カメラ（視点）の制御処理を行う。具体的には、仮想カメラの位置（Ｘ、Ｙ、Ｚ）又は回転角度（Ｘ、Ｙ、Ｚ軸回りでの回転角度）を制御する処理（視点位置、視線方向あるいは画角を制御する処理）を行う。
【０１８０】
例えば、仮想カメラによりオブジェクト（例えば、キャラクタ等）を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度（仮想カメラの向き）を制御する。この場合には、オブジェクトの位置、回転角度又は速度などの情報に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させたり、予め決められた移動経路で移動させる制御を行ってもよい。この場合には、仮想カメラの位置（移動経路）又は回転角度を特定するための仮想カメラデータに基づいて仮想カメラを制御する。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラについて上記の制御処理が行われる。
【０１８１】
また、ゲーム演算部１３０は、モデル（キャラクタ、車、飛行機等）の移動・動作演算（移動・動作シミュレーション）を行う。すなわち、プログラム（移動・動作アルゴリズム）や、モーションデータなどに基づいて、モデルをオブジェクト空間内で移動させたり、オブジェクトを動作（モーション、アニメーション）させたりする処理を行う。具体的には、オブジェクトの移動情報（位置、回転角度、速度、或いは加速度）や動作情報（オブジェクトを構成する各パーツの位置、或いは回転角度）を、１フレーム（１／６０秒）毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理（シミュレーション処理）や画像生成処理を行う時間の単位である。
【０１８２】
またゲーム演算部は、コントローラの向き情報に基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行う。
【０１８３】
描画部１４０は、処理部１１０で行われる種々の処理（ゲーム演算処理）の結果に基づいて描画処理を行い、これにより画像を生成し、表示部１９０に出力する。いわゆる３次元ゲーム画像を生成する場合には、まず表示物（オブジェクト、モデル）を定義する各頂点の頂点データ（頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等）を含む表示物データ（オブジェクトデータ、モデルデータ）が入力され、入力された表示物データに含まれる頂点データに基づいて、頂点処理が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理（テッセレーション、曲面分割、ポリゴン分割）を行うようにしてもよい。頂点処理では、頂点の移動処理や、座標変換（ワールド座標変換、カメラ座標変換）、クリッピング処理、透視変換、あるいは光源処理等のジオメトリ処理が行われ、その処理結果に基づいて、表示物を構成する頂点群について与えられた頂点データを変更（更新、調整）する。そして、頂点処理後の頂点データに基づいてラスタライズ（走査変換）が行われ、ポリゴン（プリミティブ）の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル（表示画面を構成するフラグメント）を描画するピクセル処理（フラグメント処理）が行われる。ピクセル処理では、テクスチャの読出し（テクスチャマッピング）、色データの設定／変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を描画バッファ１７６（ピクセル単位で画像情報を記憶できるバッファ。ＶＲＡＭ、レンダリングターゲット）に出力（描画）する。すなわち、ピクセル処理では、画像情報（色、法線、輝度、α値等）をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内に設定された仮想カメラ（所与の視点）から見える画像が生成される。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として１画面に表示できるように画像を生成することができる。
【０１８４】
なお描画部１４０が行う頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン（プリミティブ）の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ（頂点シェーダやピクセルシェーダ）により実現されてもよい。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、ハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
【０１８５】
そして描画部１４０は、表示物を描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
【０１８６】
ジオメトリ処理では、表示物に関して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後（透視投影変換後）の表示物データ（表示物の頂点の位置座標、テクスチャ座標、色データ（輝度データ）、法線ベクトル、或いはα値等）は、主記憶部１７２に保存される。
【０１８７】
テクスチャマッピングは、記憶部１７０に記憶されるテクスチャ（テクセル値）を表示物にマッピングするための処理である。具体的には、表示物の頂点に設定（付与）されるテクスチャ座標等を用いて記憶部１７０からテクスチャ（色（ＲＧＢ）、α値などの表面プロパティ）を読み出す。そして、２次元の画像であるテクスチャを表示物にマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
【０１８８】
隠面消去処理としては、描画ピクセルのＺ値（奥行き情報）が格納されるＺバッファ（奥行きバッファ）を用いたＺバッファ法（奥行き比較法、Ｚテスト）による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Ｚバッファに格納されるＺ値を参照する。そして参照されたＺバッファのＺ値と、プリミティブの描画ピクセルでのＺ値とを比較し、描画ピクセルでのＺ値が、仮想カメラから見て手前側となるＺ値（例えば小さなＺ値）である場合には、その描画ピクセルの描画処理を行うとともにＺバッファのＺ値を新たなＺ値に更新する。
【０１８９】
αブレンディング（α合成）は、α値（Ａ値）に基づく半透明合成処理（通常αブレンディング、加算αブレンディング又は減算αブレンディング等）のことである。例えば、通常αブレンディングでは、α値を合成の強さとして線形補間を行うことにより２つの色を合成した色を求める処理を行う。
【０１９０】
なお、α値は、各ピクセル（テクセル、ドット）に関連づけて記憶できる情報であり、例えばＲＧＢの各色成分の輝度を表す色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度（透明度、不透明度と等価）、バンプ情報などとして使用できる。
【０１９１】
音制御部１５０は、処理部１１０で行われる種々の処理（ゲーム演算処理等）の結果に基づいて音データ記憶部１７６に記憶されている音（確認音、効果音を含む）を、入力装置のスピーカ２３０及びスピーカ１９２の少なくとも一方から出力させる処理を行う。
【０１９２】
振動制御部１６０は、入力装置に設けられた振動部２４０に振動させる処理を行う。
【０１９３】
なお、本実施形態のゲームシステムは、１人のプレイヤのみがプレイできるシングルプレイヤモード専用のシステムにしてもよいし、複数のプレイヤがプレイできるマルチプレイヤモードも備えるシステムにしてもよい。また複数のプレイヤがプレイする場合に、これらの複数のプレイヤに提供するゲーム画像やゲーム音を、１つの本体装置、表示部を用いて生成してもよい。また、ネットワーク（伝送ライン、通信回線）などで接続された複数のゲーム装置を用いて分散処理により生成してもよい。また、本実施形態は、複数のプレイヤでゲームを行う場合には、複数のプレイヤの入力装置毎に、検出情報に基づいて所定条件を満たすか否かの判定や、判定結果に基づく音制御や、振動制御を行う。
【０１９４】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１９５】
本発明は、実施の形態で説明した構成と実質的に同一の構成（例えば、機能、方法及び結果が同一の構成、あるいは目的及び効果が同一の構成）を含む。また、本発明は、実施の形態で説明した構成の本質的でない部分を置き換えた構成を含む。また、本発明は、実施の形態で説明した構成と同一の作用効果を奏する構成又は同一の目的を達成することができる構成を含む。また、本発明は、実施の形態で説明した構成に公知技術を付加した構成を含む。
【符号の説明】
【０１９６】
１  向き決定装置、２  向き情報入力デバイス、１０  処理部、１１  単純回転演算部、１２  向き情報演算部、１５  表示制御部、１６  音出力制御部、２０  ガイド方向検出部、２２  マイコン、２４  通信部、３０  記憶部、３２  操作部、３４  表示部、３６  情報記憶媒体、３８  通信部、４０  音出力部、１００  本体装置、１１０  処理部、１２０  向き決定部、１２１  単純回転演算部、１２２  向き情報演算部、１３０  ゲーム演算部、１４０  描画部、１５０  音制御部、１６０  振動制御部、１７０  記憶部、１７２  主記憶部、１７４  描画バッファ、１７６  音データ記憶部、１８０  情報記憶媒体、１９０  表示部、１９２  スピーカ、１９６  通信部、１９８  光源、２００  入力装置、２１０  加速度センサ、２２０  撮像部、２２２  赤外線フィルタ、２２４  レンズ、２２６  撮像素子、２２８  画像処理回路、２３０  スピーカ、２４０  振動部、２５０  マイコン、２６０  通信部
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図１６
【補正方法】変更
【補正の内容】
【図１６】
2011050561.tif 000122