(57)【要約】【課題】コントローラに設けられた加速度センサの検出値に基づき精度よくまたは矛盾なくコントローラの向きや回転に関する情報を取得すること。【解決手段】画像生成システムは、操作部に設けられた加速度センサの出力値に基づいて向き／回転パラメータを演算し、向き／回転パラメータに基づき操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御して画像生成を行う。ワールド座標系における上ＷｙベクトルまたはＷｙベクトルをコントローラのローカル座標系に座標変換したＣｙベクトルを、センサの出力値に基づき特定し、当該ＷｙベクトルまたはＣｙベクトルに基づき、ワールド座標系における他の２軸の軸ベクトルであるＷｘベクトル、Ｗｙベクトルをコントローラのローカル座標系に座標変換したＣｘベクトル、Ｃｚベクトルを求め、求めたＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを決定する。【選択図】図７
2007267851.tif 000002
【特許請求の範囲】
【請求項１】
操作部に設けられた加速度センサの出力値である加速度ベクトルに基づいて、操作部の向き又は回転を特定するための向き／回転パラメータを演算する向き／回転パラメータ演算部と、
演算された向き／回転パラメータに基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行うゲーム処理と、
オブジェクト空間を仮想カメラからみた画像を生成する画像生成部と、
としてコンピュータを機能させ、
向き／回転パラメータ演算部は、
ワールド座標系における上下方向の軸ベクトルであるＷｙベクトルまたはＷｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｙベクトルを、センサの出力値に基づき特定し、
当該ＷｙベクトルまたはＣｙベクトルに基づき、ワールド座標系における他の２軸の軸ベクトルであるＷｘベクトル、Ｗｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｘベクトル、Ｃｚベクトルを求め、求めたＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを決定することを特徴とするプログラム。
【請求項２】
操作部に設けられた加速度センサの出力値である加速度ベクトルに基づいて、操作部の向き又は回転を特定するための向き／回転パラメータをリアルタイムに演算する向き／回転パラメータ演算部と、としてコンピュータを機能させるプログラムであって、
前記向き／回転パラメータ演算部は、
ワールド座標系における上下方向の軸ベクトルであるＷｙベクトルまたはＷｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｙベクトルを、センサの出力値に基づき特定し、
当該ＷｙベクトルまたはＣｙベクトルに基づき、ワールド座標系における他の２軸の軸ベクトルであるＷｘベクトル、Ｗｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｘベクトル、Ｃｚベクトルを求め、求めたＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを決定することを特徴とするプログラム。
【請求項３】
請求項１又は２のいずれかにおいて、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルに垂直な平面と、コントローラのローカル座標系におけるＹＺ平面またはＸＹ平面との交線の方向に基づきＣｚベクトルまたはＣｘベクトルの方向を決定することを特徴とするプログラム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記向き／回転パラメータ演算部は、
前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｘベクトルまたはＣｙベクトルの方向を決定することを特徴とするプログラム。
【請求項５】
請求項４において、
前記向き／回転パラメータ演算部は、
前回または直近のＣｚベクトルまたはＣｘベクトルのいずれか一方のベクトルと今回のＣｙベクトルの外積をとって今回のＣｚベクトルまたはＣｘベクトルのいずれか他方のベクトルをもとめ、当該いずれか他方のベクトルと今回のＣｙベクトルの外積をとって今回のいずれか一方のベクトルを求める処理を行うことを特徴とするプログラム。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行う際にアルゴリズムの異なる複数の処理が実行可能に構成され、
Ｃｙベクトルが所定の条件を満たすかいなか判断し、前記判断結果に基づき、アルゴリズムを切り替えてＣｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行うことを特徴とするプログラム。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＹＺ平面と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＸＹ平面と交わる線上にＣｘベクトルが存在するとしてＣｘベクトルの方向を決定する処理を切り替えて実行する制御を行うことを特徴とするプログラム。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＹＺ平面と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、  前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｚベクトルまたはＣｘベクトルの方向を決定する処理を、切り替えて実行する制御を行うことを特徴とするプログラム。
【請求項９】
コンピュータ読み取り可能な情報記憶媒体であって、請求項１乃至８のいずれかのプログラムを記憶したことを特徴とする情報記憶媒体。
【請求項１０】
画像生成システムであって、
操作部に設けられた加速度センサの出力値である加速度ベクトルに基づいて、操作部の向き又は回転を特定するための向き／回転パラメータを演算する向き／回転パラメータ演算部と、
演算された向き／回転パラメータに基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行うゲーム処理と、
オブジェクト空間を仮想カメラからみた画像を生成する画像生成部と、を含み、
向き／回転パラメータ演算部は、
ワールド座標系における上下方向の軸ベクトルであるＷｙベクトルまたはＷｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｙベクトルを、センサの出力値に基づき特定し、
当該ＷｙベクトルまたはＣｙベクトルに基づき、ワールド座標系における他の２軸の軸ベクトルであるＷｘベクトル、Ｗｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｘベクトル、Ｃｚベクトルを求め、求めたＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを決定することを特徴とする画像生成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報記憶媒体及び画像生成システムに関する。
【背景技術】
【０００２】
最近ではゲーム用のコントローラに加速度センサを設けてコントローラの向きや回転を検出して、ゲーム入力とすることが可能なゲーム装置が開発されている。
【０００３】
このようなゲーム装置において、検出された向きや回転に応じてゲーム空間のオブジェクトの向きや回転を制御して、当該オブジェクトを含むゲーム画像を生成するゲームも実現可能である。
【特許文献１】特開２００３−２２５４６７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
このようなゲームにおいてはコントローラの向きや回転に応じて矛盾なく動作するゲーム画像を生成することが重要なポイントとなる。
【０００５】
しかし加速度センサで検出できるのは加速度ベクトルにすぎないため、この加速度ベクトルからいかに精度よくまたは矛盾なくコントローラの向きや回転に関する情報を取り出すかが問題となる。
【０００６】
本発明は、以上のような課題に鑑みてなされたものであり、その目的とするところは、コントローラに設けられた加速度センサの検出値に基づき精度よく、または矛盾なくコントローラの向きや回転に関する情報を取得することが可能なプログラム、情報記憶媒体及び画像生成システムを提供することにある。
【課題を解決するための手段】
【０００７】
（１）本発明は、
操作部に設けられた加速度センサの出力値である加速度ベクトルに基づいて、操作部の向き又は回転を特定するための向き／回転パラメータを演算する向き／回転パラメータ演算部と、
演算された向き／回転パラメータに基づきオブジェクト空間の操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御する演算を行うゲーム処理と、
オブジェクト空間を仮想カメラからみた画像を生成する画像生成部と、
としてコンピュータを機能させ、
向き／回転パラメータ演算部は、
ワールド座標系における上下方向の軸ベクトルであるＷｙベクトルまたはＷｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｙベクトルを、センサの出力値に基づき特定し、
当該ＷｙベクトルまたはＣｙベクトルに基づき、ワールド座標系における他の２軸の軸ベクトルであるＷｘベクトル、Ｗｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｘベクトル、Ｃｚベクトルを求め、求めたＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを決定するプログラムに関係する。
【０００８】
また本発明は、上記各部を含む画像生成システムに関係する。また本発明は、コンピュータ読み取り可能な情報記憶媒体であって、上記各部としてコンピュータを機能させるプログラムを記憶（記録）した情報記憶媒体に関係する。
【０００９】
加速度センサの出力値は、ワールド座標系での「下」方向（Ｙ軸の反対方向）をコントローラ基準座標系に変換したものである。
【００１０】
ここでベクトルを特定したり求める際には、少なくともベクトルの方向を特定または求めればよく大きさに関しては任意である。したがってベクトルを直接取り扱う構成に限られず正規化したベクトルをもちいて特定したり求めたりする場合も本発明の範囲内である。
【００１１】
またＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを求めるとは、例えばＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルの正規化ベクトルに基づき向き／回転パラメータを求める構成や、またＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルの方向成分に基づき向き／回転パラメータを求める構成も含む。
【００１２】
本発明によれば操作部に設けられた加速度センサの出力値である加速度ベクトルに基づいて、操作部の向き又は回転を特定するための向き／回転パラメータをリアルタイムに演算して、操作対象オブジェクト又は仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御することができる。
【００１３】
例えばコントローラの傾きや回転に応じて、プレーヤキャラクタである移動体オブジェクトを傾かせたり回転させたりして、かかる移動体オブジェクトを含むゲーム空間の３人称画像を生成するようにしてもよい。
【００１４】
また例えばコントローラの傾きや回転に応じて、仮想カメラを傾かせたり回転させたりして、ゲーム空間の１人称画像を生成するようにしてもよい。
【００１５】
このようにするとコントローラの傾きや回転にリアルタイムに連動してオブジェクトや視線方向がリアルタイムに変化するゲーム画像を生成することができる。
【００１６】
（２）本発明は、
操作部に設けられた加速度センサの出力値である加速度ベクトルに基づいて、操作部の向き又は回転を特定するための向き／回転パラメータをリアルタイムに演算する向き／回転パラメータ演算部と、としてコンピュータを機能させるプログラムであって、
前記向き／回転パラメータ演算部は、
ワールド座標系における上下方向の軸ベクトルであるＷｙベクトルまたはＷｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｙベクトルを、センサの出力値に基づき特定し、
当該ＷｙベクトルまたはＣｙベクトルに基づき、ワールド座標系における他の２軸の軸ベクトルであるＷｘベクトル、Ｗｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｘベクトル、Ｃｚベクトルを求め、求めたＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを決定するプログラムに関係する。
【００１７】
また本発明は、上記各部を含む画像生成システムに関係する。また本発明は、コンピュータ読み取り可能な情報記憶媒体であって、上記各部としてコンピュータを機能させるプログラムを記憶（記録）した情報記憶媒体に関係する。
【００１８】
（３）また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルに垂直な平面と、コントローラのローカル座標系におけるＹＺ平面またはＸＹ平面との交線の方向に基づきＣｚベクトルまたはＣｘベクトルの方向を決定することを特徴とする。
【００１９】
Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＹＺ平面（ｘ＝０）と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する第１の処理、及びＣｙベクトルに垂直な平面がコントローラのローカル座標系におけるＸＹ平面（ｚ＝０）と交わる線上にＣｘベクトルが存在するとしてＣｘベクトルの方向を決定する第２の処理の少なくとも一方を行うようにしてもよい。
【００２０】
そして求めたＣｚベクトルとＣｙベクトルの外積をとることによりＣｘベクトルを求めることができる。また求めたＣｘベクトルとＣｙベクトルの外積をとることによりＣｚベクトルを求めることができる。
【００２１】
（４）また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、
前記向き／回転パラメータ演算部は、
前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｘベクトルまたはＣｙベクトルの方向を決定することを特徴とする。
【００２２】
直近とは、現時点からあらかじめ設定された短い期間だけさかのぼることを意味し、例えば前前回等でもよい。短い期間の長さをどのように設定するかは設計事項である。
【００２３】
本発明によれば、過去の履歴を反映させて今回のＣｚベクトルまたはＣｘベクトルを決定するので向きや回転の変化の連続性を担保することができる。しかも演算が不定値を取ったり不安定領域がないため、どのような入力地に対しても途中で破掟することなく向き／回転パラメータ求めることができる。
【００２４】
（５）また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、
前記向き／回転パラメータ演算部は、
前回または直近のＣｚベクトルまたはＣｘベクトルのいずれか一方のベクトルと今回のＣｙベクトルの外積をとって今回のＣｚベクトルまたはＣｘベクトルのいずれか他方のベクトルをもとめ、当該いずれか他方のベクトルと今回のＣｙベクトルの外積をとって今回のいずれか一方のベクトルを求める処理を行うことを特徴とする。
【００２５】
例えば今回のＣｙベクトルと前回のＣｚベクトルの外積によって、両者に垂直な正規化ベクトルを求めて今回のＣｘとする。そして新たに求めた今回のＣｘベクトルと今回のＣｙベクトルの外積から今回のＣｚベクトルを求めるようにしてもよい。
【００２６】
また例えば今回のＣｙベクトルと前回のＣｘベクトルの外積によって、両者に垂直な正規化ベクトルを求めて今回のＣｚとする。そして新たに求めた今回Ｃｚベクトルと今回のＣｙベクトルの外積から今回のＣｚベクトルを求めるようにしてもよい。
【００２７】
（６）また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行う際にアルゴリズムの異なる複数の処理が実行可能に構成され、
Ｃｙベクトルが所定の条件を満たすかいなか判断し、前記判断結果に基づき、アルゴリズムを切り替えてＣｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行うことを特徴とする。
【００２８】
Ｃｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行う際の各アルゴリズムの処理は、Ｃｙベクトルの方向によってそれぞれにウイークポイントを有している場合がある。本発明によればＣｙベクトルの方向によって、アルゴリズムを切り替えてＣｚベクトル及びＣｘベクトルを決定する処理を行うことができる。
【００２９】
（７）また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＹＺ平面と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＸＹ平面と交わる線上にＣｘベクトルが存在するとしてＣｘベクトルの方向を決定する処理を切り替えて実行する制御を行うことを特徴とする。
【００３０】
（８）また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、
前記向き／回転パラメータ演算部は、
Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＹＺ平面と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、  前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｚベクトルまたはＣｘベクトルの方向を決定する処理を、切り替えて実行する制御を行うことを特徴とする。
【発明を実施するための最良の形態】
【００３１】
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【００３２】
１．構成
まず、図１を用いて本実施形態の画像生成システム（ゲームシステム）の構成について説明する。なお、図１は、本実施形態の画像生成システムにおける機能構成の例である。また、本実施形態の画像生成システムは、当該構成要素（各部）の一部を省略した構成としてもよい。
【００３３】
操作部１６０は、プレーヤが操作データを入力するためのものであり、その機能は、レバー、ボタン、ステアリング、マイク等により実現できる。
【００３４】
操作部１６０は、加速度センサ１６２を含み、操作部自体の向きや回転に応じて生じる加速度ベクトルを検出する。
【００３５】
例えば加速度センサ１６２を内蔵したコントローラなどを用いることのより実現できる。
【００３６】
加速度センサ１６２は、操作に応じた加速度を検出し、検出した加速度情報（出力値）を出力するものであり、圧電型や動電式、歪みケージ式等の加速度センサなどのハードウェアにより実現できる。
【００３７】
本実施の形態では、加速度センサ３の出力値は、ワールド座標系での「下」方向（Ｙ軸の反対方向）をコントローラ基準座標系に変換したものである。
【００３８】
記憶部１７０は、処理部１００や通信部１９６などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などにより実現できる。
【００３９】
情報記憶媒体１８０（コンピュータにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク（ＣＤ、ＤＶＤ）、ハードディスク、メモリーカード、メモリーカセット、磁気ディスク、或いはメモリ（ＲＯＭ）などにより実現できる。処理部１００は、情報記憶媒体１８０に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体１８０には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。
【００４０】
表示部１９０は、本実施形態により生成された画像を出力するものであり、その機能は、ＣＲＴ、ＬＣＤ（液晶表示装置）、タッチパネル型ディスプレイ、或いはＨＭＤ（ヘッドマウントディスプレイ）などにより実現できる。音出力部１９２は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
【００４１】
携帯型情報記憶装置１９４は、プレーヤの個人データやゲームのセーブデータなどが記憶されるものであり、この携帯型情報記憶装置１９４としては、メモリーカードや携帯型ゲーム装置などがある。通信部１９６は、外部（例えばホスト装置や他の画像生成システム）との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ＡＳＩＣなどのハードウェアや、プログラムなどにより実現できる。
【００４２】
なお、本実施形態の各部としてコンピュータを機能させるためのプログラム（データ）は、ホスト装置（サーバー）が有する情報記憶媒体からネットワーク及び通信部１９６を介して情報記憶媒体１８０（記憶部１７０）に配信してもよい。このようなホスト装置（サーバー）の情報記憶媒体の使用も本発明の範囲内に含めることができる。
【００４３】
処理部１００（プロセッサ）は、各機能ブロックへの命令の指示、ゲーム処理、画像生成処理、音生成処理などの各種の処理を行う。ここで、ゲーム処理としては、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、キャラクタやマップなどのオブジェクトを配置する処理、オブジェクトを表示する処理、ゲーム結果を演算する処理、或いはゲーム終了条件が満たされた場合にゲームを終了する処理などがある。
【００４４】
処理部１００の機能は、各種プロセッサ（ＣＰＵ、ＤＳＰ等）、ＡＳＩＣ（ゲートアレイ等）などのハードウェアや、プログラムにより実現できる。処理部１００は、記憶部１７０をワーク領域として各種処理を行う。
【００４５】
処理部１００は、向き／回転パラメータ演算部１１０、ゲーム処理部１２０、画像生成部１３０、音生成部１５０を含む。なお、これらの一部を省略する構成としてもよい。
【００４６】
向き／回転パラメータ演算部１１０は、ワールド座標系における上下方向の軸ベクトルであるＷｙベクトルまたはＷｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｙベクトルを、センサの出力値に基づき特定し、当該ＷｙベクトルまたはＣｙベクトルに基づき、ワールド座標系における他の２軸の軸ベクトルであるＷｘベクトル、Ｗｙベクトルをコントローラのローカル座標系に座標変換したベクトルであるＣｘベクトル、Ｃｚベクトルを求め、求めたＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルに基づき向き／回転パラメータを決定する処理を行う。
【００４７】
また向き／回転パラメータ演算部１１０は、Ｃｙベクトルに垂直な平面と、コントローラのローカル座標系におけるＹＺ平面またはＸＹ平面との交線の方向に基づきＣｚベクトルまたはＣｘベクトルの方向を決定するようにしてもよい。
【００４８】
また向き／回転パラメータ演算部は、前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｘベクトルまたはＣｙベクトルの方向を決定するようにしてもよい。
【００４９】
また向き／回転パラメータ演算部１１０は、前回または直近のＣｚベクトルまたはＣｘベクトルのいずれか一方のベクトルと今回のＣｙベクトルの外積をとって今回のＣｚベクトルまたはＣｘベクトルのいずれか他方のベクトルをもとめ、当該いずれか他方のベクトルと今回のＣｙベクトルの外積をとって今回のいずれか一方のベクトルを求める処理を行うようにしてもよい。
【００５０】
また向き／回転パラメータ演算部１１０は、Ｃｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行う際にアルゴリズムの異なる複数の処理が実行可能に構成され、Ｃｙベクトルが所定の条件を満たすかいなか判断し、前記判断結果に基づき、アルゴリズムを切り替えてＣｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行うようにしてもよい。
【００５１】
また向き／回転パラメータ演算部１１０は、Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＹＺ平面と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＸＹ平面と交わる線上にＣｘベクトルが存在するとしてＣｘベクトルの方向を決定する処理を切り替えて実行する制御を行うようにしてもよい。
【００５２】
また向き／回転パラメータ演算部１１０は、Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラのローカル座標系におけるＹＺ平面と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｚベクトルまたはＣｘベクトルの方向を決定する処理を、切り替えて実行する制御を行うようにしてもよい。
【００５３】
ゲーム処理部は、オブジェクト空間設定部１２２、移動・動作制御部１２４、仮想カメラ制御部１２６を含む。
【００５４】
オブジェクト空間設定部１２２は、キャラクタ、車、戦車、建物、樹木、柱、壁、マップ（地形）などの表示物を表す各種オブジェクト（ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブ面で構成されるオブジェクト）をオブジェクト空間に配置設定する処理を行う。即ち、ワールド座標系でのオブジェクト（モデルオブジェクト）の位置や回転角度（向き、方向と同義）を決定し、その位置（Ｘ、Ｙ、Ｚ）にその回転角度（Ｘ、Ｙ、Ｚ軸回りでの回転角度）でオブジェクトを配置する。
【００５５】
移動・動作制御１２４は、オブジェクト、例えば、キャラクタ、車、又は飛行機等の移動体オブジェクトの移動・動作演算（移動・動作シミュレーション）を行う。即ち、この移動・動作処理部１１２は、操作部１６０によりプレーヤが入力した操作データ、プログラム（移動・動作アルゴリズム）、または、各種データ（モーションデータ）などに基づいて、オブジェクト（移動オブジェクト）をオブジェクト空間内で移動させたり、オブジェクトを動作（モーション、アニメーション）させる処理を行う。
【００５６】
具体的には、本実施形態の移動・動作処理部１２４は、オブジェクトの移動情報（位置、回転角度、速度、或いは加速度）や動作情報（各パーツオブジェクトの位置、或いは回転角度）を、１フレーム（１／６０秒）毎に順次求めるシミュレーション処理を行う。なお、このフレームは、オブジェクトの移動・動作処理（シミュレーション処理）や画像生成処理を行う時間の単位である。
【００５７】
移動・動作処理部１２４は、演算された向き／回転パラメータに基づきオブジェクト空間の操作対象オブジェクトの回転、姿勢、動作、移動方向の少なくとも１つを制御するようにしてもよい。
【００５８】
仮想カメラ制御部１２６は、プレーヤからの入力に基づき仮想カメラの位置、回転（向き）当を制御する処理を行う。
【００５９】
仮想カメラ制御部１２６は、演算された向き／回転パラメータに基づき仮想カメラの向き、回転、姿勢、動作、移動方向の少なくとも１つを制御するようにしてもよい。
【００６０】
また画像生成部１３０は、ゲーム処理部１２０で行われる種々の処理（ゲーム処理）の結果に基づいて描画処理を行い、これにより画像を生成し、表示部１９０に出力する。いわゆる３次元ゲーム画像を生成する場合には、まず、オブジェクト（モデル）の各頂点の頂点データ（頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等）を含むオブジェクトデータ（モデルデータ）が入力され、入力されたオブジェクトデータに含まれる頂点データに基づいて、頂点処理が行われる。
【００６１】
なお、頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理（テッセレーション、曲面分割、ポリゴン分割）を行うようにしてもよい。
【００６２】
頂点処理では、頂点の移動処理や、座標変換（ワールド座標変換、カメラ座標変換）、クリッピング処理、透視変換、あるいは光源処理等のジオメトリ処理が行われ、その処理結果に基づいて、オブジェクトを構成する頂点群について与えられた頂点データを変更（更新、調整）する。そして、頂点処理後の頂点データに基づいてラスタライズ（走査変換）が行われ、ポリゴン（プリミティブ）の面とピクセルとが対応づけられる。そして、ラスタライズに続いて、画像を構成するピクセル（表示画面を構成するフラグメント）を描画するピクセル処理（フラグメント処理）が行われる。ピクセル処理では、テクスチャの読出し（テクスチャマッピング）、色データの設定／変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を描画バッファ１７２（ピクセル単位で画像情報を記憶できるバッファ。ＶＲＡＭ、レンダリングターゲット）に出力（描画）する。すなわち、ピクセル処理では、画像情報（色、法線、輝度、α値等）をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内に設定された仮想カメラ（所与の視点）から見える画像が生成される。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として１画面に表示できるように画像を生成することができる。
【００６３】
なお、画像生成部１３０が行う頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン（プリミティブ）の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ（頂点シェーダやピクセルシェーダ）により実現されてもよい。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、ハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
【００６４】
そして、画像生成部１３０は、オブジェクトを描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
【００６５】
ジオメトリ処理では、オブジェクトに対して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。また、ジオメトリ処理後（透視投影変換後）のオブジェクトデータ（オブジェクトの頂点の位置座標、テクスチャ座標、色データ（輝度データ）、法線ベクトル、或いはα値等）は、記憶部１７０に保存される。
【００６６】
テクスチャマッピングは、記憶部１７０のテクスチャ記憶部１７４に記憶されるテクスチャ（テクセル値）をオブジェクトにマッピングするための処理である。具体的には、オブジェクトの頂点に設定（付与）されるテクスチャ座標等を用いて記憶部１７０のテクスチャ記憶部１７８からテクスチャ（色（ＲＧＢ）、α値などの表面プロパティ）を読み出す。そして、２次元の画像であるテクスチャをオブジェクトにマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
【００６７】
特に、本実施形態では、オブジェクトを描画する際に、所与のテクスチャをマッピングする処理を行うようにしてもよい。この場合には、各オブジェクトに対してマッピングされるテクスチャの色分布（テクセルパターン）を動的に変化させることができる。
【００６８】
この場合において、色分布が異なるテクスチャを動的に生成してもよいし、複数の色分布が異なるテクスチャを予め用意しておき、使用するテクスチャを動的に切り替えるようにしてもよい。また、オブジェクト単位でテクスチャの色分布を変化させてもよいし、オブジェクト単位でテクスチャの色分布を変化させるようにしてもよい。
【００６９】
隠面消去処理としては、描画ピクセルのＺ値（奥行き情報）が格納されるＺバッファ（奥行きバッファ）１７６を用いたＺバッファ法（奥行き比較法、Ｚテスト）による隠面消去処理を行うことができる。すなわち、オブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Ｚバッファ１７６に格納されるＺ値を参照する。そして参照されたＺバッファ１７６のＺ値と、プリミティブの描画ピクセルでのＺ値とを比較し、描画ピクセルでのＺ値が、仮想カメラから見て手前側となるＺ値（例えば小さなＺ値）である場合には、その描画ピクセルの描画処理を行うとともにＺバッファ１７６のＺ値を新たなＺ値に更新する。
【００７０】
αブレンディング（α合成）は、α値（Ａ値）に基づく半透明合成処理（通常αブレンディング、加算αブレンディング又は減算αブレンディング等）のことである。例えば、通常αブレンディングでは、α値を合成の強さとして線形補間を行うことにより２つの色を合成した色を求める処理を行う。
ＲＱ＝（１−α）×Ｒ１＋α×Ｒ２    （１）
ＧＱ＝（１−α）×Ｇ１＋α×Ｇ２    （２）
ＢＱ＝（１−α）×Ｂ１＋α×Ｂ２    （３）
【００７１】
また合成処理が加算αブレンディングである場合を例にとれば、描画部１２０は、下式に従ったα合成処理を行う。
ＲＱ＝Ｒ１＋α×Ｒ２                （４）
ＧＱ＝Ｇ１＋α×Ｇ２                （５）
ＢＱ＝Ｂ１＋α×Ｂ２                （６）
【００７２】
また、合成処理がα乗算である場合を例にとれば、描画部１２０は、下式に従ったα合成処理を行う。
ＲＱ＝α×Ｒ１                      （７）
ＧＱ＝α×Ｇ１                      （８）
ＢＱ＝α×Ｂ１                      （９）
【００７３】
また合成処理がα乗加算である場合を例にとれば、描画部１２０は、下式に従ったα合成処理を行う。
ＲＱ＝α×Ｒ１＋Ｒ２                （７）
ＧＱ＝α×Ｇ１＋Ｇ２                （８）
ＢＱ＝α×Ｂ１＋Ｂ２                （９）
【００７４】
ここで、Ｒ１、Ｇ１、Ｂ１は、描画バッファ１７２に既に描画されている画像（背景画像）の色（輝度）のＲ、Ｇ、Ｂ成分であり、Ｒ２、Ｇ２、Ｂ２は、描画バッファ１７２に描画するオブジェクト（プリミティブ）の色のＲ、Ｇ、Ｂ成分である。また、ＲＱ、ＧＱ、ＢＱは、αブレンディングにより得られる画像の色のＲ、Ｇ、Ｂ成分である。
【００７５】
なお、α値は、各ピクセル（テクセル、ドット）に関連づけて記憶できる情報であり、例えばＲＧＢの各色成分の輝度を表す色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度（透明度、不透明度と等価）、バンプ情報などとして使用できる。
【００７６】
音生成部１４０は、処理部１００で行われる種々の処理の結果に基づいて音処理を行い、ＢＧＭ、効果音、又は音声などのゲーム音を生成し、音出力部１９２に出力する。
【００７７】
なお、本実施形態の画像生成システムは、１人のプレーヤのみがプレイできるシングルプレーヤモード専用のシステムにしてもよいし、複数のプレーヤがプレイできるマルチプレーヤモードも備えるシステムにしてもよい。また複数のプレーヤがプレイする場合に、これらの複数のプレーヤに提供するゲーム画像やゲーム音を、１つの端末を用いて生成してもよいし、ネットワーク（伝送ライン、通信回線）などで接続された複数の端末（ゲーム機、携帯電話）を用いて分散処理により生成してもよい。
【００７８】
２．本実施形態の手法
２．１  加速度センサの入力値
図２は、本実施形態の操作部の一例を示す図である。
【００７９】
本実施の形態では、操作手段１６０として同図に示すような加速度センサ１６２内蔵のコントローラを使用する。このようなコントローラを使用することにより加速度センサ１６２は、コントローラにかかる加速度ベクトルを検出することができる。
【００８０】
加速度センサ３は、操作に応じた加速度を検出し、検出した加速度情報（出力値）を出力するものであり、圧電型や動電式、歪みケージ式等の加速度センサなどのハードウェアにより実現できる。
【００８１】
本実施の形態の加速度センサ１６２で得られる情報は、ワールド座標系での「下」方向（Ｙ軸の反対方向）をコントローラ基準座標系に変換した加速度ベクトルである。
【００８２】
図３（Ａ）（Ｂ）を用いて本実施の形態のコントローラの向き／回転の検出原理について説明する。
【００８３】
図３（Ａ）は座標変換と加速度センサ入力の関係について説明するための図である。
【００８４】
Ｗｘベクトル、Ｗｙベクトル、Ｗｚベクトルはそれぞれワールド座標系２０におけるＸ軸、Ｙ軸、Ｚ軸の軸ベクトル（大きさ１お基準ベクトル）を示しており、１０はワールド座標系２０に置ける加速度センサが検出した加速度ベクトルを示している。
【００８５】
本実施の形態では加速度センサ１６２で得られた加速度ベクトル１０を重力の方向ベクトルと想定して、コントローラの向き／回転を推定する。
【００８６】
ここでワールド座標系２０におけるＸ軸、Ｙ軸、Ｚ軸の基準ベクトルであるＷｘベクトル、Ｗｙベクトル、Ｗｚベクトルをコントローラのローカル座標系（以下コントローラ座標系という）に３０に座標変換したものをＣｘベクトル、Ｃｙベクトル、Ｃｚベクトルであるとする。
【００８７】
コントローラ座標系とはコントローラを基準姿勢に配置した時の座標系である。例えば図３（Ｂ）に示すようにコントートローラ１６０をワールド座標系に配置した場合を基準位置とすると、図３（Ａ）のワールド座標系におけるコントローラは基準位置にたいして傾いた状態（回転した状態）にあるといえる。従ってコントローラ座標系に変換した場合のＣｙベクトルはコントローラ座標系の各軸に対して所定の傾きを有するベクトルとなっている。
【００８８】
本実施の形態では、図３（Ａ）に示すワールド座標系での「下」方向（Ｙ軸の反対方向）１０をコントローラ基準座標系に変換したも（Ｃｙベクトル）を加速度センサの出力値として受け取る。
【００８９】
ここでＣｘベクトル（ワールド座標系２０におけるＸ軸の基準ベクトルであるＷｘベクトルをコントローラ座標系に３０に座標変換したもの）、Ｃｚベクトル（ワールド座標系２０におけるＺ軸の基準ベクトルであるＷｚベクトルをコントローラ座標系に３０に座標変換したもの）は、Ｃｙベクトルに垂直な円盤領域のいずれになるかは、加速度センサの出力値のみでは確定することができない。
【００９０】
そこで本実施の形態では、ここでコントローラの向きを確定させるために、加速度センサの出力値として得られたＣｙベクトルから、Ｃｘベクトル、Ｃｚベクトルを決定する。
【００９１】
以下に操作部に設けられた加速度センサの出力値である加速度ベクトルに基づいて、操作部の向き又は回転を特定するための向き／回転パラメータをリアルタイムに演算する手法について具体的に説明する。
【００９２】
図４は、コントローラ１６０をワールド座標系におけるＹ軸にそって回転させている様子を示している。このようにコントローラ１６０を重力の軸にそって回転させても加速度センサの出力値は変化しないので判別不能である。
【００９３】
図５（Ａ）（Ｂ）はコントローラの回転パターンを示す図である。
【００９４】
図５（Ａ）はコントローラ１６０をＺ軸に沿って回転させている場合（Ｚ回転）を示している。Ｚ回転は捻りを示しておりゲーム操作上重要である。
【００９５】
また図５（Ｂ）はコントローラ１６０をＸ軸に沿って回転させている場合（Ｘ回転）を示している。Ｘ回転は宙返りを表すものであり、ゲーム上重要である。
【００９６】
本実施の形態ではゲーム操作上重要と思われる上記操作を正しく判別させることを目的とする。
【００９７】
２．２  第１の手法
図６は、Ｃｙベクトルに基づいて、Ｃｘベクトル、Ｃｚベクトルを求める第１の手法について説明するための図である。
【００９８】
第１の手法では、Ｃｙベクトルに垂直な平面４０がコントローラ座標系３０におけるＹＺ平面（ｘ＝０）５０またはＸＹ平面（ｚ＝０）と交わる線ｌの方向に基づきＣｚベクトルまたはＣｘベクトルの方向を決定する。
【００９９】
Ｃｙベクトルに垂直な半径１の円板Ｓ（図３（Ａ）の４０）が、ＹＺ平面（ｘ＝０）と交わる線上ｌにあると仮定して、Ｃｚベクトルの方向を決定する（以下手法Ａという）。ここで線ｌ上のベクトルとしてはｐ１ベクトルとｐ２ベクトルが考えられるが、どちらにするかは前回のＣｚベクトルに基づいて決定するようにしてもよい。例えば前回のＣｚベクトルとの距離を比較し距離が近い方に決定してもよい。
【０１００】
このようにしてＣｚベクトルを決定したら、求めたＣｚベクトルとＣｙベクトルの外積をとることによりＣｘベクトルを求めることができる。
【０１０１】
またＣｙベクトルに垂直な半径１の円板Ｓ（図３（Ａ）の４０）が、ＸＹ平面（ｚ＝０）と交わる線ｌ上にあると仮定して、Ｃｘベクトルの方向を決定する（以下手法Ａ’という）。ここで線ｌ上のベクトルとしてはｐ１ベクトルとｐ２ベクトルが考えられるが、どちらにするかは前回のＣｘベクトルに基づいて決定するようにしてもよい。例えば前回のＣｘベクトルとの距離を比較し距離が近い方に決定してもよい。
【０１０２】
このようにしてＣｘベクトルを決定したら、求めたＣｘベクトルとＣｙベクトルの外積をとることによりＣｚベクトルを求めることができる。
【０１０３】
図７は第１の手法について説明するためのフローチャート図である。
【０１０４】
ここでｇは加速度センサ入力（ｘ，ｙ，ｚ）、Ｃｘ，Ｃｙ，Ｃｚは、それぞれワールド座標軸ベクトル（ｘ，ｙ，ｚ）、Ｖｚは前回のＣｚの履歴（ｘ，ｙ，ｚ）、Ｍは回転マトリクス（［３］［３］）、ｒは回転パラメータ（ｘ，ｙ，ｚ）を示している。
【０１０５】
本実施の形態では下記の処理を毎フレームごとに行っている。
【０１０６】
まずＣｚ、ｒを下記のように初期化する（ステップＳ１０）。
Ｃｚ＝（０，０，１）
ｒ＝（０，０，０）
【０１０７】
次に前回のＣｚの履歴（ｘ，ｙ，ｚ）であるＶｚにＣｚを代入する（ステップＳ２０）。
【０１０８】
次に加速度センサ入力（ｘ，ｙ，ｚ）をｇにセットする（ステップＳ３０）。
【０１０９】
次にＣｙに−ｇをセットする（ステップＳ４０）。
【０１１０】
そして｜Ｃｙ｜＞０でなければステップＳ１５０にいき、｜Ｃｙ｜＞０であれば以下の処理を行う（ステップＳ５０）。これによりＣｙが０の時に不正な向き／回転パラメータが生成されるのを防止することができる。
【０１１１】
次にＣｙを正規化する（大きさが１の基準ベクトルにする）（ステップＳ６０）。
【０１１２】
次にＣｙについて下記の条件を満たすか否か判定する（ステップＳ７０）。
【０１１３】
【数１】
2007267851.tif 000003
【０１１４】
これによりｐ１ベクトル、ｐ２ベクトルのｙ成分、Ｚ成分が不定な値をとる場合に向き／回転パラメータが生成されるのを防止することができる。
【０１１５】
次にＹＺ平面上でＣｙに垂直な正規化ベクトルｐ１，ｐ２を求める（ステップＳ８０）。正規化ベクトルｐ１，ｐ２は、下記の式で与えられる。
【０１１６】
【数２】
2007267851.tif 000004
【０１１７】
次に正規化ベクトルｐ１，ｐ２とＶｚとの距離を比較する（ステップＳ９０）。
【０１１８】
ｐ１のほうがＶｚに近い場合にはＣｚにｐ１を代入する（ステップＳ１００）。
【０１１９】
ｐ２のほうがＶｚに近い場合にはＣｚにｐ２を代入する（ステップＳ１１０）。
【０１２０】
Ｃｙ、Ｃｚの外積からＣｘを求める（ステップＳ１２０）。
【０１２１】
【数３】
2007267851.tif 000005
【０１２２】
次にＣｘ、Ｃｙ、Ｃｚを回転マトリックスＭに格納する（ステップＳ１３０）。ＸＹＺ軸ベクトルの変換とマトリクスＭの関係は以下のとおりである。
【０１２３】
【数４】
2007267851.tif 000006
【０１２４】
軸ベクトルを並べて作ったマトリクスは以下のとおりである。
【０１２５】
【数５】
2007267851.tif 000007
【０１２６】
ＭはそのままＷ座標系→Ｃ座標系への変換行列を表す。また、コントローラのW座標系での向きを表すマトリクスはＣ座標系→Ｗ座標系の変換行列でもあり、すなわちＭの逆行列となる。回転行列の逆行列は転置行列に等しいので以下の式が成り立つ。
【０１２７】
【数６】
2007267851.tif 000008
【０１２８】
次に回転マトリックスＭから向き／回転パラメータをｒを求める（ステップＳ１４０）。
【０１２９】
回転マトリクスと回転パラメータの関係式は以下のとおりである。
【０１３０】
【数７】
2007267851.tif 000009
【０１３１】
これを解くと以下の式が得られる。
【０１３２】
【数８】
2007267851.tif 000010
【０１３３】
どちらの値を採用するかについては、前回の結果に近いほうを選べばよい。
【０１３４】
そして、向き／回転パラメータｒをコントローラの傾き入力としてゲーム処理を行う（ステップＳ１５０）。
【０１３５】
例えばコントローラの傾きや回転に応じて、プレーヤキャラクタである移動体オブジェクトを傾かせたり回転させたりして、かかる移動体オブジェクトを含むゲーム空間の３人称画像を生成するようにしてもよい。
【０１３６】
また例えばコントローラの傾きや回転に応じて、仮想カメラを傾かせたり回転させたりして、ゲーム空間の１人称画像を生成するようにしてもよい。
【０１３７】
このようにするとコントローラの傾きや回転にリアルタイムに連動してオブジェクトや視線方向がリアルタイムに変化するゲーム画像を生成することができる。
【０１３８】
そしてゲーム終了になるまでステップＳ２０〜Ｓ１６０の処理を繰り返す（ステップＳ１６０）。
【０１３９】
２．３  第２の手法
図８は、Ｃｙベクトルに基づいて、Ｃｘベクトル、Ｃｚベクトルを求める第２の手法について説明するための図である。
【０１４０】
第２の手法では、前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｚベクトルまたはＣｘベクトルの方向を決定する。
【０１４１】
前回または直近のＣｚベクトルまたはＣｘベクトルのいずれか一方のベクトルと今回のＣｙベクトルの外積をとって今回のＣｚベクトルまたはＣｘベクトルのいずれか他方のベクトルをもとめ、当該いずれか他方のベクトルと今回のＣｙベクトルの外積をとって今回のいずれか一方のベクトルを求める処理を行うようにしてもよい。
【０１４２】
具体的には、今回のＣｙベクトルと前回のＣｚベクトルの外積によって、両者に垂直な正規化ベクトルを求めて今回のＣｘとする。そして新たに求めた今回のＣｘベクトルと今回のＣｙベクトルの外積から今回のＣｚベクトルを求める（これを手法Ｂとする）。
【０１４３】
また今回のＣｙベクトルと前回のＣｘベクトルの外積によって、両者に垂直な正規化ベクトルを求めて今回のＣｚとする。そして新たに求めた今回Ｃｚベクトルと今回のＣｙベクトルの外積から今回のＣｚベクトルを求める（これを手法Ｂとする）。
【０１４４】
ここでＣｙベクトルとＣｚベクトルが並行になってしまうと外積ベクトルの値が０になってしまいＣｘベクトルが求められないが、このような状態は一瞬（１フレーム、例えば１／６０秒）で９０°の回転をした場合にしか発生しないので、現実には無用の値として無視できる。そもそも加速度センサの入力値を重力とみなすには、ローパスフィルタを通して急激な変化を除く方が望ましいため、このような変化は起こらない。
【０１４５】
よって、この第２の手法では実質的に特異点の影響を受けることなく、コントローラの運動のさせかたに応じた向き（回転パラメータ）を得ることができる。
【０１４６】
図９は第２の手法について説明するためのフローチャート図である。
【０１４７】
ここでｇは加速度センサ入力（ｘ，ｙ，ｚ）、Ｃｘ，Ｃｙ，Ｃｚは、それぞれワールド座標軸ベクトル（ｘ，ｙ，ｚ）、Ｃ’ｘ，Ｃ’ｙ，Ｃ’ｚは、それぞれワールド座標軸ベクトル履歴（ｘ，ｙ，ｚ）で例えば前フレームのワールド座標軸ベクトル（ｘ，ｙ，ｚ）、Ｍは回転マトリクス（［３］［３］）、ｒは回転パラメータ（ｘ，ｙ，ｚ）を示している。
【０１４８】
本実施の形態では下記の処理を毎フレームごとに行っている。
【０１４９】
まずＣｚ、ｒを下記のように初期化する（ステップＳ２１０）。
Ｃｘ＝（１，０，１）
Ｃｙ＝（０，１，０）
Ｃｚ＝（０，０，１）
ｒ＝（０，０，０）
【０１５０】
次に前回のＣ’ｘ、Ｃ’ｙ、Ｃ’ｚの履歴（ｘ，ｙ，ｚ）にそれぞれ現在のＣｘ、Ｃｙ、Ｃｚを代入する（ステップＳ２２０）。
【０１５１】
次に加速度センサ入力（ｘ，ｙ，ｚ）をｇにセットする（ステップＳ２３０）。
【０１５２】
次にＣｙに−ｇをセットする（ステップＳ２４０）。
【０１５３】
そして｜Ｃｙ｜＞０でなければステップＳ３２０にいき、｜Ｃｙ｜＞０であれば以下の処理を行う（ステップＳ２５０）。これによりＣｙが０の時に不正な向き／回転パラメータが生成されるのを防止することができる。
【０１５４】
次にＣｙを正規化する（大きさが１の基準ベクトルにする）（ステップＳ２６０）。
【０１５５】
そしてＣｙベクトルとＣ’ｚベクトルの外せきをとりＣｘベクトルとする（ステップＳ２７０）。
【０１５６】
そして｜Ｃｘ｜＞０でなければステップＳ３２０にいき、｜Ｃｘ｜＞０であれば以下の処理を行う（ステップＳ２８０）。これによりＣｘが０の時に不正な向き／回転パラメータが生成されるのを防止することができる。
【０１５７】
次にＣｘ、Ｃｙの外積からＣｚを求める（ステップＳ２９０）。
【０１５８】
次にＣｘ、Ｃｙ、Ｃｚを回転マトリックスＭに格納する（ステップＳ３００）。ＸＹＺ軸ベクトルの変換とマトリクスＭの関係は図７で説明したのと同様である。
【０１５９】
次に回転マトリックスＭから向き／回転パラメータをｒを求める（ステップＳ３１０）。
【０１６０】
回転マトリクスと回転パラメータの関係関係は図７で説明したのと同様である。
【０１６１】
そして、向き／回転パラメータｒをコントローラの傾き入力としてゲーム処理を行う（ステップＳ３２０）。
【０１６２】
例えばコントローラの傾きや回転に応じて、プレーヤキャラクタである移動体オブジェクトを傾かせたり回転させたりして、かかる移動体オブジェクトを含むゲーム空間の３人称画像を生成するようにしてもよい。
【０１６３】
また例えばコントローラの傾きや回転に応じて、仮想カメラを傾かせたり回転させたりして、ゲーム空間の１人称画像を生成するようにしてもよい。
【０１６４】
このようにするとコントローラの傾きや回転にリアルタイムに連動してオブジェクトや視線方向がリアルタイムに変化するゲーム画像を生成することができる。
【０１６５】
そしてゲーム終了になるまでステップＳ２２０〜Ｓ３３０の処理を繰り返す（ステップＳ３３０）。
【０１６６】
２．４  第３の手法
上記実施の形態では第１の手法や第２の手法を単独で用いる場合について説明したが、これらを組み合わせて用いる場合でもよい。
【０１６７】
すなわちＣｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行う際にアルゴリズムの異なる複数の処理（例えば手法Ａ、手法Ａ’、手法Ｂ、手法Ｂ’それぞれに対応した処理）が実行可能に構成され、Ｃｙベクトルが所定の条件を満たすかいなか判断し、前記判断結果に基づき、アルゴリズムを切り替えてＣｙベクトルに基づきＣｚベクトル及びＣｘベクトルを決定する処理を行うようにしてもよい。
【０１６８】
第３の手法では、Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラ座標系におけるＹＺ平面（ｘ＝０）と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、前回または直近のＣｚベクトルまたはＣｘベクトルに基づき今回のＣｚベクトルまたはＣｘベクトルの方向を決定する処理を、切り替えて実行する制御を行う。
【０１６９】
図１０は、第３の手法の所定の条件について説明するための図である。
【０１７０】
手法Ａでは下記の値が小さくなるにつれ、誤差によってＸ軸回転が激しく変化して計算が不安定になる。
【０１７１】
【数１２】
2007267851.tif 000011
【０１７２】
６０はコントローラ座標系における、軸ベクトル半径１の球（原点を中心とする半径１の球）である。球６０とＸ軸正方向が交わる点を含む所定の領域６２及び球６０とＸ軸負方向が交わる点を含む所定の領域６４は、手法Ａでは計算が不安定になる領域である。
【０１７３】
領域６２、６４は軸ベクトル半径１の球面上にあるので下記の条件式で判定することができる。
【０１７４】
【数９】
2007267851.tif 000012
【０１７５】
【数１０】
2007267851.tif 000013
【０１７６】
どちらの条件式を使用してもよい。ただし０＜ｆ＜１であり、例えばｆ＝０．９を使用してもよい。
【０１７７】
本実施の形態では手法Ａでは計算が不安定になる領域を上記条件式に基づき判定し、Ｃｙベクトル（Ｃｙベクトルの各成分）が上記条件式を満たす場合（言い換えればＣｙベクトル（正規化されているとする）の終点がＸ軸正方向が交わる点を含む所定の領域６２または球６０とＸ軸負方向が交わる点を含む所定の領域６４に属する場合）には、手法Ｂまたは手法Ｂ’を使用する。
【０１７８】
この場合手法Ｂまたは手法Ｂ’を使用するのは領域は狭い範囲に限定されているため、コントローラを連続的に動かしていけばずれが積もる前に脱出することができる。
【０１７９】
図１１は第３の手法について説明するためのフローチャート図である。
【０１８０】
ここではＣｙベクトルについて所定の条件を満たすか否か判断し、判断結果に基づき手法Ａと手法Ｂを切り替えて向き／回転パラメータを求める場合を例にとり説明する。
【０１８１】
本実施の形態では下記の処理を毎フレームごとに行っている。
【０１８２】
まずｆ＝０．９に初期化する（ステップＳ４１０）。
【０１８３】
次に加速度センサ入力（ｘ，ｙ，ｚ）をｇにセットする（ステップＳ４２０）。
【０１８４】
次にＣｙに−ｇをセットする（ステップＳ４３０）。
【０１８５】
そして｜Ｃｙ｜＞０でなければステップＳ４９０にいき、｜Ｃｙ｜＞０であれば以下の処理を行う（ステップＳ４４０）。これによりＣｙが０の時に不正な向き／回転パラメータが生成されるのを防止することができる。
【０１８６】
次にＣｙを正規化する（大きさが１の基準ベクトルにする）（ステップＳ４５０）。
【０１８７】
ここでＣｙベクトルが下記の条件式を満たすか否か判断する（ステップＳ４６０）。
【０１８８】
【数９】
2007267851.tif 000014
【０１８９】
満たさない場合には手法Ａで向き／回転パラメータを演算する（ステップＳ４７０）。具体的には、図７のステップＳ７０〜Ｓ１４０の処理を実行する。
【０１９０】
満たす場合には手法Ｂで向き／回転パラメータを演算する（ステップＳ４８０）。具体的には、図７のステップＳ２７０〜Ｓ３１０の処理を実行する。
【０１９１】
そして、向き／回転パラメータｒをコントローラの傾き入力としてゲーム処理を行う（ステップＳ４９０）。
【０１９２】
例えばコントローラの傾きや回転に応じて、プレーヤキャラクタである移動体オブジェクトを傾かせたり回転させたりして、かかる移動体オブジェクトを含むゲーム空間の３人称画像を生成するようにしてもよい。
【０１９３】
また例えばコントローラの傾きや回転に応じて、仮想カメラを傾かせたり回転させたりして、ゲーム空間の１人称画像を生成するようにしてもよい。
【０１９４】
このようにするとコントローラの傾きや回転にリアルタイムに連動してオブジェクトや視線方向がリアルタイムに変化するゲーム画像を生成することができる。
【０１９５】
そしてゲーム終了になるまでステップＳ４２０〜Ｓ５００の処理を繰り返す（ステップＳ５００）。
【０１９６】
２．５  第４の手法
第４の手法では、Ｃｙベクトルが所定の条件を満たすかいなか判断し、判断結果に基づき、Ｃｙベクトルに垂直な平面がコントローラ座標系におけるＹＺ平面（ｘ＝０）と交わる線上にＣｚベクトルが存在するとしてＣｚベクトルの方向を決定する処理と、Ｃｙベクトルに垂直な平面がコントローラ座標系におけるＸＹ平面（ｚ＝０）と交わる線上にＣｘベクトルが存在するとしてＣｘベクトルの方向を決定する処理を切り替えて実行する制御を行う。
【０１９７】
図１２（Ａ）（Ｂ）は、第４の手法の所定の条件について説明するための図である。
【０１９８】
図１２（Ａ）は、手法Ａにおける不安定険領域を示しており、図１２（Ｂ）は、手法Ａ’における不安定険領域を示している。
【０１９９】
手法Ａでは下記の値が小さくなるにつれ、誤差によってＸ軸回転が激しく変化して計算が不安定になる。
【０２００】
【数１２】
2007267851.tif 000015
【０２０１】
図１２（Ａ）の６０はコントローラ座標系における、軸ベクトル半径１の球（原点を中心とする半径１の球）である。球６０とＸ軸正方向が交わる点を含む所定の領域６２及び球６０とＸ軸負方向が交わる点を含む所定の領域６４は、手法Ａでは計算が不安定になる領域である。
【０２０２】
手法Ａでは下記の値が小さくなるにつれ、誤差によってＸ軸回転が激しく変化して計算が不安定になる。
【０２０３】
【数１２】
2007267851.tif 000016
【０２０４】
領域６２、６４は軸ベクトル半径１の球面上にあるので下記の条件式で判定することができる。
【０２０５】
【数９】
2007267851.tif 000017
【０２０６】
【数１０】
2007267851.tif 000018
【０２０７】
図１２（Ｂ）の６０はコントローラ座標系における、軸ベクトル半径１の球（原点を中心とする半径１の球）である。球６０とＺ軸正方向が交わる点を含む所定の領域６８及び球６０とＸ軸負方向が交わる点を含む所定の領域６６は、手法Ａ’では計算が不安定になる領域である。
【０２０８】
手法Ａ’では下記の値が小さくなるにつれ、誤差によってＸ軸回転が激しく変化して計算が不安定になる。
【０２０９】
【数１１】
2007267851.tif 000019
【０２１０】
手法Ａと手法Ａ’をきりかえる際には手法Ａで示した条件式に当てはまる場合には手法Ａを採用し、当てはまあない場合いは手法Ａ’を採用するようにしてもよい。
【０２１１】
第４の手法ではただし０＜ｆ＜１であり、例えばｆ＝ｃｏｓ４５＝０．７０７を使用してもよい。
【０２１２】
図１３は第４の手法について説明するためのフローチャート図である。
【０２１３】
ここではＣｙベクトルについて所定の条件を満たすか否か判断し、判断結果に基づき手法Ａと手法Ａ’を切り替えて向き／回転パラメータを求める場合を例にとり説明する。
【０２１４】
本実施の形態では下記の処理を毎フレームごとに行っている。
【０２１５】
まずｆ＝０．７０７に初期化する（ステップＳ６１０）。
【０２１６】
次に加速度センサ入力（ｘ，ｙ，ｚ）をｇにセットする（ステップＳ６２０）。
【０２１７】
次にＣｙに−ｇをセットする（ステップＳ６３０）。
【０２１８】
そして｜Ｃｙ｜＞０でなければステップＳ６９０にいき、｜Ｃｙ｜＞０であれば以下の処理を行う（ステップＳ６４０）。これによりＣｙが０の時に不正な向き／回転パラメータが生成されるのを防止することができる。
【０２１９】
次にＣｙを正規化する（大きさが１の基準ベクトルにする）（ステップＳ６５０）。
【０２２０】
ここでＣｙベクトルが下記の条件式を満たすか否か判断する（ステップＳ６６０）。
【０２２１】
【数９】
2007267851.tif 000020
【０２２２】
満たさない場合には手法Ａで向き／回転パラメータを演算する（ステップＳ６７０）。
【０２２３】
満たす場合には手法Ａ’で向き／回転パラメータを演算する（ステップＳ６８０）。
【０２２４】
そして、向き／回転パラメータｒをコントローラの傾き入力としてゲーム処理を行う（ステップＳ６９０）。
【０２２５】
例えばコントローラの傾きや回転に応じて、プレーヤキャラクタである移動体オブジェクトを傾かせたり回転させたりして、かかる移動体オブジェクトを含むゲーム空間の３人称画像を生成するようにしてもよい。
【０２２６】
また例えばコントローラの傾きや回転に応じて、仮想カメラを傾かせたり回転させたりして、ゲーム空間の１人称画像を生成するようにしてもよい。
【０２２７】
このようにするとコントローラの傾きや回転にリアルタイムに連動してオブジェクトや視線方向がリアルタイムに変化するゲーム画像を生成することができる。  そしてゲーム終了になるまでステップＳ６２０〜Ｓ７００の処理を繰り返す（ステップＳ７００）。
【０２２８】
このように手法Ａ、手法Ａ’、手法Ｂ、手法Ｂ’を適宜組み合わせることにより、特異点を除去し、コントローラの捻り・宙返りに対応した入力を検出することが可能になる。
【０２２９】
なお、本発明は、上記実施形態で説明したものに限らず、種々の変形実施が可能である。例えば、明細書又は図面中の記載において広義や同義な用語（描画領域、ピクセル値、変換テーブル等）として引用された用語（フレームバッファ・ワークバッファ、α値、ルックアップテーブル等）は、明細書又は図面中の他の記載においても広義や同義な用語に置き換えることができる。
【０２３０】
また、メンバーオブジェクトの移動制御手法も本実施形態で説明したものに限定されず、これらと均等な手法も本発明の範囲に含まれる。
【０２３１】
また、上記実施の形態では複数の戦闘機ゲームを例にとり説明したがこれに限られず、種々のゲームに適用できる。例えば、一機から構成される戦闘機ゲームまたは複数の移動体オブジェクトから構成されるグループを制御するゲームであれば適用可能である。
【０２３２】
また、本発明は、業務用ゲームシステム、家庭用ゲームシステム、多数のプレーヤが参加する大型アトラクションシステム、シミュレータ、マルチメディア端末、ゲーム画像を生成するシステムボード、携帯電話等の種々の画像生成システムに適用できる。
【図面の簡単な説明】
【０２３３】
【図１】本実施形態の画像生成システムの機能ブロック図の例。
【図２】本実施形態の操作部の一例を示す図である。
【図３】図３（Ａ）（Ｂ）は、本実施の形態のコントローラの向き／回転の検出原理について説明するための図である。
【図４】コントローラをワールド座標系におけるＹ軸にそって回転させている様子を示す図である。
【図５】図５（Ａ）（Ｂ）はコントローラの回転パターンを示す図である。
【図６】Ｃｙベクトルに基づいて、Ｃｘベクトル、Ｃｚベクトルを求める第１の手法について説明するための図である。
【図７】第１の手法について説明するためのフローチャート図である。
【図８】Ｃｙベクトルに基づいて、Ｃｘベクトル、Ｃｚベクトルを求める第２の手法について説明するための図である。
【図９】第２の手法について説明するためのフローチャート図である。
【図１０】第３の手法の所定の条件について説明するための図である。
【図１１】第３の手法について説明するためのフローチャート図である。
【図１２】図１２（Ａ）（Ｂ）は、第４の手法の所定の条件について説明するための図である。
【図１３】第４の手法について説明するためのフローチャート図である。
【符号の説明】
【０２３４】
１００  処理部、１１０  向き／回転パラメータ演算部、１２０  ゲーム処理部、１２２  オブジェクト空間設定部、１２４  移動・動作処理部、１２６  仮想カメラ制御部、１３０  画像生成部、１４０  音生成部、１６０  操作部、１６２  加速度センサ、１７０  記憶部、１７２  描画バッファ、１７４  テクスチャ記憶部、１７６  Ｚバッファ、１８０  情報記憶媒体、１９０  表示部、１９２  音出力部、１９４  携帯型情報記憶装置、１９６  通信部
【図１】
2007267851.tif 000021
【図２】
2007267851.tif 000022
【図４】
2007267851.tif 000023
【図５】
2007267851.tif 000024
【図７】
2007267851.tif 000025
【図８】
2007267851.tif 000026
【図９】
2007267851.tif 000027
【図１０】
2007267851.tif 000028
【図１１】
2007267851.tif 000029
【図１２】
2007267851.tif 000030
【図１３】
2007267851.tif 000031
【図３】
2007267851.tif 000032
【図６】
2007267851.tif 000033