(57)【特許請求の範囲】
【請求項１】
仮想カメラから見た仮想空間内の操作対象オブジェクトを表示装置に表示する画像処理装置のコンピュータで実行される画像処理プログラムであって、
前記コンピュータを、
直交する２軸方向を基準としたユーザの方向入力の方向を示す方向データを取得するデータ取得手段と、
仮想空間における前記仮想カメラの位置および姿勢を設定する仮想カメラ設定手段と、
仮想空間における前記操作対象オブジェクトの位置に作用している仮想重力の方向または当該位置における仮想フィールドの法線の方向を示す直上ベクトルと、前記仮想カメラの姿勢を示すカメラベクトルとに基づいて、前記方向データが示す方向に応じた仮想空間内での前記操作対象オブジェクトの移動方向を決定する移動方向決定手段と、
前記移動方向決定手段で決定された移動方向へ前記操作対象オブジェクトを移動させるオブジェクト移動手段として機能させ、
前記カメラベクトルは、前記仮想カメラの視線方向、当該仮想カメラから見た表示画像の縦方向、および当該表示画像の横方向をそれぞれ示す直交する３つのカメラベクトルで構成され、
前記移動方向決定手段は、前記３つのカメラベクトルから第１カメラベクトルおよび第２カメラベクトルを選択して、当該第１カメラベクトルと前記直上ベクトルとに直交する第１ベクトルと、当該第２カメラベクトルと前記直上ベクトルとに直交する第２ベクトルとを算出し、当該第１ベクトルおよび当該第２ベクトルを前記２軸方向にそれぞれ関連付けて前記方向データが示す方向に応じた前記移動方向を決定する、画像処理プログラム。
【請求項２】
前記移動方向決定手段は、前記第１カメラベクトルと前記直上ベクトルとの外積によって前記第１ベクトルを算出し、前記第２カメラベクトルと前記直上ベクトルとの外積によって前記第２ベクトルを算出する、請求項１に記載の画像処理プログラム。
【請求項３】
前記移動方向決定手段は、前記視線方向または前記縦方向を示すカメラベクトルを前記第１カメラベクトルとして選択し、前記横方向を示すカメラベクトルを前記第２カメラベクトルとして選択する、請求項１または２に記載の画像処理プログラム。
【請求項４】
前記移動方向決定手段は、前記視線方向を示すカメラベクトルと前記直上ベクトルとの内積値および前記縦方向を示すカメラベクトルと前記直上ベクトルとの内積値を用いて、前記視線方向および前記縦方向を示すカメラベクトルの一方を前記第１カメラベクトルとして選択する、請求項３に記載の画像処理プログラム。
【請求項５】
前記移動方向決定手段は、前記内積値を比較し、当該内積値の絶対値が小さい結果となった前記視線方向および前記縦方向を示すカメラベクトルの一方を前記第１カメラベクトルとして選択する、請求項４に記載の画像処理プログラム。
【請求項６】
前記移動方向決定手段は、前記内積値の絶対値が小さい結果となった前記視線方向および前記縦方向を示すカメラベクトルの一方について、当該内積値の正負に応じて当該一方のカメラベクトルを反転させて前記第１カメラベクトルとして選択する、請求項５に記載の画像処理プログラム。
【請求項７】
前記移動方向決定手段は、前記３つのカメラベクトルと前記直上ベクトルとの内積値を用いて、前記第１および第２カメラベクトルを選択する、請求項１または２に記載の画像処理プログラム。
【請求項８】
前記仮想カメラ設定手段は、さらに前記仮想カメラを回転させ、
前記方向データを用いて、ユーザの方向入力が変化したことを検出する入力方向変化検出手段と、
前記仮想カメラの回転後において、前記入力方向変化検出手段が前記方向入力の変化を検出するまで、前記移動方向決定手段が当該仮想カメラの回転前のカメラベクトルに基づいて移動方向を決定する移動方向維持手段として、さらに前記コンピュータを機能させる、請求項１に記載の画像処理プログラム。
【請求項９】
前記移動方向維持手段は、前記仮想カメラの回転後において、前記入力方向変化検出手段が前記方向入力の変化を検出することに応じて、前記移動方向の仮想カメラの回転前のカメラベクトルに基づく決定を解除し、
前記移動方向決定手段は、前記仮想カメラの回転後において、前記入力方向変化検出手段が前記方向入力の変化を検出することに応じて、当該回転後の仮想カメラの姿勢を示すカメラベクトルに基づいて、当該方向入力の変化後の前記方向データが示す方向に応じた前記移動方向を決定する、請求項８に記載の画像処理プログラム。
【請求項１０】
前記仮想カメラ設定手段は、前記仮想カメラをその視線方向を中心に回転させる、請求項８に記載の画像処理プログラム。
【請求項１１】
前記操作対象オブジェクトの位置に設定されている前記直上ベクトルおよび前記移動方向決定手段が決定する移動方向に基づいて、前記操作対象オブジェクトの姿勢を示す互いに直交する３つの姿勢ベクトルを逐次決定するオブジェクト姿勢決定手段として、さらに前記コンピュータを機能させ、
前記オブジェクト姿勢決定手段は、前記操作対象オブジェクトの移動前後の位置に設定されている前記直上ベクトルの方向が変化した場合、前記入力方向変化検出手段が前記方向入力の変化を検出するまで、前記３つの姿勢ベクトルのうち、１つの姿勢ベクトルの方向を固定して他の２つの姿勢ベクトルの方向を変化させて決定する、請求項８に記載の画像処理プログラム。
【請求項１２】
前記仮想空間には、その外周面に対して異なった方向の仮想重力が設定された仮想立体フィールドが設定されており、
前記移動方向決定手段は、前記操作対象オブジェクトの位置における前記仮想立体フィールドの外周面に沿って前記操作対象オブジェクトの移動方向を決定し、
前記オブジェクト移動手段は、前記仮想立体フィールドの外周面に沿って前記移動方向決定手段で決定された移動方向へ前記操作対象オブジェクトを移動させる、請求項１に記載の画像処理プログラム。
【請求項１３】
前記仮想カメラ設定手段は、前記操作対象オブジェクトの位置に応じて、前記仮想カメラの視体積内に前記操作対象オブジェクトが含まれて、前記表示装置に前記操作対象オブジェクトが表示される位置および姿勢に前記仮想カメラを設定する、請求項１２に記載の画像処理プログラム。
【請求項１４】
仮想カメラから見た仮想空間内の操作対象オブジェクトを表示装置に表示する画像処理装置であって、
直交する２軸方向を基準としたユーザの方向入力の方向を示す方向データを取得するデータ取得手段と、
仮想空間における前記仮想カメラの位置および姿勢を設定する仮想カメラ設定手段と、
仮想空間における前記操作対象オブジェクトの位置に作用している仮想重力の方向または当該位置における仮想フィールドの法線の方向を示す直上ベクトルと、前記仮想カメラの姿勢を示すカメラベクトルとに基づいて、前記方向データが示す方向に応じた仮想空間内での前記操作対象オブジェクトの移動方向を決定する移動方向決定手段と、
前記移動方向決定手段で決定された移動方向へ前記操作対象オブジェクトを移動させるオブジェクト移動手段とを備え、
前記カメラベクトルは、前記仮想カメラの視線方向、当該仮想カメラから見た表示画像の縦方向、および当該表示画像の横方向をそれぞれ示す直交する３つのカメラベクトルで構成され、
前記移動方向決定手段は、前記３つのカメラベクトルから第１カメラベクトルおよび第２カメラベクトルを選択して、当該第１カメラベクトルと前記直上ベクトルとに直交する第１ベクトルと、当該第２カメラベクトルと前記直上ベクトルとに直交する第２ベクトルとを算出し、当該第１ベクトルおよび当該第２ベクトルを前記２軸方向にそれぞれ関連付けて前記方向データが示す方向に応じた前記移動方向を決定する、画像処理装置。
【請求項１５】
前記仮想カメラ設定手段は、さらに前記仮想カメラを回転させ、
前記画像処理装置は、
前記方向データを用いて、ユーザの方向入力が変化したことを検出する入力方向変化検出手段と、
前記仮想カメラの回転後において、前記入力方向変化検出手段が前記方向入力の変化を検出するまで、前記移動方向決定手段が当該仮想カメラの回転前のカメラベクトルに基づいて移動方向を決定する移動方向維持手段とを、さらに備える、請求項１４に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理プログラムおよび画像処理装置に関し、より特定的には、方向入力に基づいて表示装置に表示されたオブジェクトを移動させる画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【０００２】
従来、十字スイッチやスティック等へのユーザ入力に応じて、表示装置に表示されたオブジェクトを仮想世界における前後左右に移動させるゲーム（画像処理）が一般的になっている。例えば、アナログジョイスティックまたは十字スイッチに対する「上」、「下」、「左」、および「右」操作に応じて、オブジェクトを移動させるビデオゲーム装置が開示されている（例えば、特許文献１参照）。上記特許文献１に開示されたビデオゲーム装置では、注目ノンプレイヤオブジェクトがロックされている場合、上記「上」、「下」、「左」、および「右」操作に応じて、それぞれ「注目ノンプレイヤオブジェクトに近づく方向」、「注目ノンプレイヤオブジェクトから遠ざかる方向」、「注目ノンプレイヤオブジェクトとの距離を一定に維持したまま左方向」、および「注目ノンプレイヤオブジェクトとの距離を一定に維持したまま右方向」にプレイヤオブジェクトを移動させる。また、注目ノンプレイヤオブジェクトがロックされていない場合、上記「上」、「下」、「左」、および「右」操作に応じて、それぞれ「前方」、「後方」、「左方」、および「右方」にプレイヤオブジェクトを移動させる。
【特許文献１】特開２００２−２６３３５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上述したように、従来の操作に対応するオブジェクトの移動方向は、上下操作に対応してオブジェクトが仮想世界における前後方向に移動するものが一般的である。これは、仮想世界に設定された平面に沿ってオブジェクトを移動させることを想定しており、基本的に表示画面で表現される画像において、プレイヤが直感的に認識する上下に対応する方向が仮想世界の前後方向となる環境で一定していることによる。そのため、仮想世界におけるオブジェクトの位置に応じて、オブジェクトの起立方向が変わる（例えば、仮想世界に設定されている重力方向や地形に対する法線方向が変わる）ような、変化に富んだ地形上でオブジェクトを移動させることを想定した移動方向の設定は考慮されていない。また、オブジェクトが移動している位置の地形が著しく変化したり、仮想カメラの向きが急激に変わったりした場合、オブジェクトの移動方向と操作方向との関係が直感的にわからなくなることが予想され、地形や仮想カメラの向きが変化した前後における移動方向および操作方向の連続性がとれずに操作が不安定になることも予想される。
【０００４】
それ故に、本発明の目的は、ユーザの方向入力に直感的に対応付けられた方向に、表示装置に表示された仮想空間内のオブジェクトを移動させる画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【０００５】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【０００６】
第１の発明は、仮想カメラ（Ｃ）から見た仮想空間内の操作対象オブジェクト（ＰＣ）を表示装置（２）に表示する画像処理装置（５）のコンピュータ（１０）で実行される画像処理プログラムである。画像処理プログラムは、データ取得手段（ステップ４２を実行するＣＰＵ１０；以下、単にステップ番号のみ記載する）、仮想カメラ設定手段（Ｓ４１）、移動方向決定手段（Ｓ４６、Ｓ５１）、およびオブジェクト移動手段（Ｓ４８、Ｓ５３）として、コンピュータを機能させる。データ取得手段は、ユーザの方向入力に基づいた方向データ（Ｄａ）を取得する。仮想カメラ設定手段は、仮想空間における仮想カメラの位置（Ｄｃ１）および姿勢（Ｄｃ２）を設定する。移動方向決定手段は、仮想空間における操作対象オブジェクトの位置（Ｄｂ１、ＰＰ）に作用している仮想重力の方向または当該位置における仮想フィールド（ＧＦ）の法線の方向を示す直上ベクトル（Ｖｗ）と、仮想カメラの姿勢を示すカメラベクトル（ＶｃＸ、ＶｃＹ、ＶｃＺ）とに基づいて、方向データが示す方向（Ｖｓ）に応じた仮想空間内での操作対象オブジェクトの移動方向（Ｖｍ）を決定する。オブジェクト移動手段は、移動方向決定手段で決定された移動方向へ操作対象オブジェクトを移動させる。
【０００７】
第２の発明は、上記第１の発明において、方向データは、直交する２軸方向（ｘ方向、ｙ方向）を基準とした方向入力の方向（Ｖｓｘ、Ｖｓｙ）を示すデータである。カメラベクトルは、仮想カメラの視線方向（ＶｃＺ）、当該仮想カメラから見た表示画像の縦方向（ＶｃＹ）、および当該表示画像の横方向（ＶｃＸ）をそれぞれ示す直交する３つのカメラベクトルで構成される。移動方向決定手段は、３つのカメラベクトルから第１カメラベクトル（Ｖｏ；ＶｃＹまたはＶｃＺ）および第２カメラベクトル（ＶｃＸ）を選択して（Ｓ８１〜Ｓ８８）、当該第１カメラベクトルと直上ベクトルとに直交する第１ベクトル（Ｖｘ）と、当該第２カメラベクトルと直上ベクトルとに直交する第２ベクトル（Ｖｙ）とを算出し（Ｓ８９）、当該第１ベクトルおよび当該第２ベクトルを２軸方向にそれぞれ関連付けて方向データが示す方向に応じた移動方向を決定する（Ｓ９０）。
【０００８】
第３の発明は、上記第２の発明において、移動方向決定手段は、第１カメラベクトルと直上ベクトルとの外積によって第１ベクトルを算出し、第２カメラベクトルと直上ベクトルとの外積によって第２ベクトルを算出する（Ｓ８９）。
【０００９】
第４の発明は、上記第２または第３の発明において、移動方向決定手段は、視線方向または縦方向を示すカメラベクトルを第１カメラベクトルとして選択し、横方向を示すカメラベクトルを第２カメラベクトルとして選択する（Ｓ８１〜Ｓ８８）。
【００１０】
第５の発明は、上記第４の発明において、移動方向決定手段は、視線方向を示すカメラベクトルと直上ベクトルとの内積値（ｚｄｎ）および縦方向を示すカメラベクトルと直上ベクトルとの内積値（ｙｄｎ）を用いて、視線方向および縦方向を示すカメラベクトルの一方を第１カメラベクトルとして選択する（Ｓ８１〜Ｓ８８）。
【００１１】
第６の発明は、上記第５の発明において、移動方向決定手段は、内積値を比較し、当該内積値の絶対値が小さい結果となった視線方向および縦方向を示すカメラベクトルの一方を第１カメラベクトルとして選択する（Ｓ８２）。
【００１２】
第７の発明は、上記第６の発明において、移動方向決定手段は、内積値の絶対値が小さい結果となった視線方向および縦方向を示すカメラベクトルの一方について、当該内積値の正負に応じて当該一方のカメラベクトルを反転させて第１カメラベクトルとして選択する（Ｓ８１〜Ｓ８８）。
【００１３】
第８の発明は、上記第２または第３の発明において、移動方向決定手段は、３つのカメラベクトルと直上ベクトルとの内積値を用いて、第１および第２カメラベクトルを選択する（Ｓ８１〜Ｓ８８）。
【００１４】
第９の発明は、上記第１または第２の発明において、仮想カメラ設定手段は、所定の条件を満たすとき仮想カメラを回転させる（図１５）。画像処理プログラムは、入力方向変化検出手段（Ｓ４５）および移動方向維持手段（Ｓ８０）として、さらにコンピュータを機能させる。入力方向変化検出手段は、方向データを用いて、ユーザの方向入力が変化したことを検出する。移動方向維持手段は、仮想カメラの回転後において、入力方向変化検出手段が方向入力の変化を検出するまで（Ｓ４５でＹｅｓ）、移動方向決定手段が当該仮想カメラの回転前のカメラベクトル（Ｄｃ３）に基づいて移動方向を決定する。
【００１５】
第１０の発明は、上記第９の発明において、移動方向維持手段は、仮想カメラの回転後において、入力方向変化検出手段が方向入力の変化を検出することに応じて（Ｓ４５でＮｏ）、移動方向の仮想カメラの回転前のカメラベクトルに基づく決定を解除する。移動方向決定手段は、仮想カメラの回転後において、入力方向変化検出手段が方向入力の変化を検出することに応じて、当該回転後の仮想カメラの姿勢を示すカメラベクトルに基づいて、当該方向入力の変化後の方向データが示す方向に応じた移動方向を決定する。
【００１６】
第１１の発明は、上記第９の発明において、仮想カメラ設定手段は、所定の条件を満たすとき仮想カメラをその視線方向を中心に回転させる。
【００１７】
第１２の発明は、上記第９の発明において、オブジェクト姿勢決定手段（Ｓ４９、Ｓ５４）として、さらにコンピュータを機能させる。オブジェクト姿勢決定手段は、操作対象オブジェクトの位置に設定されている直上ベクトルおよび移動方向決定手段が決定する移動方向に基づいて、操作対象オブジェクトの姿勢を示す互いに直交する３つの姿勢ベクトル（Ｖｔ、Ｖｆ、Ｖｒ）を逐次決定する。オブジェクト姿勢決定手段は、操作対象オブジェクトの移動前後の位置に設定されている直上ベクトルの方向が変化した場合（Ｓ９３でＹｅｓ）、入力方向変化検出手段が方向入力の変化を検出するまで、３つの姿勢ベクトルのうち、１つの姿勢ベクトル（Ｖｒ）の方向を固定して他の２つの姿勢ベクトル（Ｖｔ、Ｖｆ）の方向を変化させて決定する。
【００１８】
第１３の発明は、上記第１または第２の発明において、仮想空間には、その外周面に対して異なった方向の仮想重力が設定された仮想立体フィールドが設定されている（図１１）。移動方向決定手段は、操作対象オブジェクトの位置における仮想立体フィールドの外周面（ＧＦａ〜ＧＦｃ）に沿って操作対象オブジェクトの移動方向を決定する。オブジェクト移動手段は、仮想立体フィールドの外周面に沿って移動方向決定手段で決定された移動方向へ操作対象オブジェクトを移動させる。
【００１９】
第１４の発明は、上記第１３の発明において、仮想カメラ設定手段は、操作対象オブジェクトの位置に応じて、仮想カメラの視体積内に操作対象オブジェクトが含まれて、表示装置に操作対象オブジェクトが表示される位置および姿勢に仮想カメラを設定する。
【００２０】
第１５の発明は、仮想カメラから見た仮想空間内の操作対象オブジェクトを表示装置に表示する画像処理装置である。画像処理装置は、データ取得手段、仮想カメラ設定手段、移動方向決定手段、およびオブジェクト移動手段を備える。データ取得手段は、ユーザの方向入力に基づいた方向データを取得する。仮想カメラ設定手段は、仮想空間における仮想カメラの位置および姿勢を設定する。移動方向決定手段は、仮想空間における操作対象オブジェクトの位置に作用している仮想重力の方向または当該位置における仮想フィールドの法線の方向を示す直上ベクトルと、仮想カメラの姿勢を示すカメラベクトルとに基づいて、方向データが示す方向に応じた仮想空間内での操作対象オブジェクトの移動方向を決定する。オブジェクト移動手段は、移動方向決定手段で決定された移動方向へ操作対象オブジェクトを移動させる。
【００２１】
第１６の発明は、上記第１５の発明において、方向データは、直交する２軸方向を基準とした方向入力の方向を示すデータである。カメラベクトルは、仮想カメラの視線方向、当該仮想カメラから見た表示画像の縦方向、および当該表示画像の横方向をそれぞれ示す直交する３つのカメラベクトルで構成される。移動方向決定手段は、３つのカメラベクトルから第１カメラベクトルおよび第２カメラベクトルを選択して、当該第１カメラベクトルと直上ベクトルとに直交する第１ベクトルと、当該第２カメラベクトルと直上ベクトルとに直交する第２ベクトルとを算出し、当該第１ベクトルおよび当該第２ベクトルを２軸方向にそれぞれ関連付けて方向データが示す方向に応じた移動方向を決定する。
【００２２】
第１７の発明は、上記第１５または第１６の発明において、仮想カメラ設定手段は、所定の条件を満たすとき仮想カメラを回転させる。画像処理装置は、入力方向変化検出手段および移動方向維持手段を、さらに備える。入力方向変化検出手段は、方向データを用いて、ユーザの方向入力が変化したことを検出する。移動方向維持手段は、仮想カメラの回転後において、入力方向変化検出手段が方向入力の変化を検出するまで、移動方向決定手段が当該仮想カメラの回転前のカメラベクトルに基づいて移動方向を決定する。
【発明の効果】
【００２３】
上記第１の発明によれば、仮想カメラの位置や姿勢に応じて、表示装置に表示された操作対象オブジェクトを、ユーザの方向入力に直感的に対応付けられた方向に移動させることが可能となる。例えば、重力方向（法線方向）が様々な方向に設定されているゲームフィールドを用いた仮想ゲーム空間において、直感的な方向入力操作が実現可能となり、ユーザに操作の混乱を与えることもない。また、このような仮想ゲーム空間環境において、所定条件を満たすときに仮想カメラを回転させる状況であっても、直感的な方向入力操作が実現可能となり、ユーザに操作の混乱を与えることもない。
【００２４】
上記第２の発明によれば、仮想カメラの位置および姿勢や操作対象オブジェクトの直上方向が様々に変化する状況においても、仮想カメラの姿勢を示す直交する３つのカメラベクトルから選ばれた２つのカメラベクトルと直上ベクトルとを用いて、方向入力操作に応じた直感的な移動方向の算出が可能となる。
【００２５】
上記第３の発明によれば、第１カメラベクトルと直上ベクトルとに直交するベクトルを第１ベクトルとし、第２カメラベクトルと直上ベクトルとに直交するベクトルを第２ベクトルとして、当該第１ベクトルおよび第２ベクトルを基準とした移動方向を決定することができる。
【００２６】
上記第４の発明によれば、直上ベクトルの方向がカメラ座標における縦方向および視線方向を含む平面と平行となるように画像が生成される場合に、方向入力操作に応じた適切な移動方向の算出が可能となる。
【００２７】
上記第５の発明によれば、第１ベクトルを求めるために適切なカメラベクトルを、内積値を用いて選択することができる。
【００２８】
上記第６の発明によれば、視線方向および縦方向を示すカメラベクトルのうち、直上ベクトルとの間に成す角度が大きい一方が第１カメラベクトルとして選択され、第１ベクトルを求めるために適切なカメラベクトルが選択される。
【００２９】
上記第７の発明によれば、内積値の正負に応じて、適切な方向のカメラベクトルを用いて移動方向を算出することができる。
【００３０】
上記第８の発明によれば、第１および第２ベクトルを求めるために適切なカメラベクトルを、内積値を用いて選択することができる。
【００３１】
上記第９の発明によれば、仮想カメラの回転前後において、ユーザによる入力方向に変化がなければ、仮想カメラの回転前に決定された移動方向が維持される。つまり、仮想カメラが移動または回転しても、当該移動や回転が行われてない状態を仮定して移動方向が維持される。したがって、仮想カメラ回転前後にユーザが同じ方向入力を継続していれば、操作対象オブジェクトの移動方向が変わることなく継続されることになる。つまり、ユーザが操作対象オブジェクトを同じ方向に移動させ続けたい場合、仮想カメラの状態によらず同じ操作を継続すればいいため、ユーザにとって非常に分かりやすい操作となる。
【００３２】
上記第１０の発明によれば、仮想カメラ回転後に操作対象オブジェクトの移動方向を変更したり停止させたりしたい場合、方向入力を変化させると移動方向維持状態が解除されるため、現時点の仮想カメラの位置および姿勢に基づいた移動方向に変更される。したがって、ユーザが改めて操作対象オブジェクトの移動方向を変化させる場合は、方向入力に応じて直感的に把握できる方向に操作対象オブジェクトが移動することになる。
【００３３】
上記第１１の発明によれば、仮想カメラがその視線方向を中心に回転して、表示される画像の上下が反転するような場合も直感的な方向入力操作が実現可能となり、ユーザに操作の混乱を与えることもない。
【００３４】
上記第１２の発明によれば、操作対象オブジェクトに作用する仮想重力が変化するような移動をする場合、姿勢ベクトルのうち１つの姿勢ベクトルの方向を固定して操作対象オブジェクトの姿勢を変化させるため、姿勢変更処理が簡素化される。
【００３５】
上記第１３の発明によれば、重力方向（法線方向）が様々な方向に設定されている仮想立体フィールド（例えば、その中心に向かって仮想重力が設定されている立体的なゲームフィールド）を用いた画像処理であっても、その仮想重力方向に応じて直感的な方向入力操作が実現可能となり、ユーザに操作の混乱を与えることもない。
【００３６】
上記第１４の発明によれば、上記仮想フィールドが設定された仮想空間環境において、仮想カメラを移動させたり回転させたりする状況であっても、直感的な方向入力操作が実現可能となり、ユーザに操作の混乱を与えることもない。
【００３７】
本発明の画像処理装置によれば、上述した画像処理プログラムと同様の効果を得ることができる。
【発明を実施するための最良の形態】
【００３８】
図１および図２を参照して、本発明の一実施形態に係る画像処理プログラムを実行する装置について説明する。以下、説明を具体的にするために、当該装置の一例である据置型のゲーム装置本体５を含むゲームシステムについて説明する。なお、図１は据置型のゲーム装置３を含むゲームシステム１の外観図であり、図２はゲーム装置本体５のブロック図である。以下、当該ゲームシステム１について説明する。
【００３９】
図１において、ゲームシステム１は、表示手段の一例の家庭用テレビジョン受像機（以下、モニタと記載する）２と、当該モニタ２に接続コードを介して接続する据置型のゲーム装置３とから構成される。モニタ２は、ゲーム装置本体５から出力された音声信号を音声出力するためのスピーカ２ａを備える。また、ゲーム装置３は、本願発明の画像処理プログラムの一例であるゲームプログラムを記録した光ディスク４と、当該光ディスク４のゲームプログラムを実行してゲーム画面をモニタ２に表示出力させるためのコンピュータを搭載したゲーム装置本体５と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体５に与えるためのコントローラ７とを備えている。
【００４０】
また、ゲーム装置本体５は、無線コントローラモジュール１９（図２参照）を内蔵する。無線コントローラモジュール１９は、コントローラ７から無線送信されるデータを受信し、ゲーム装置本体５からコントローラ７へデータを送信して、コントローラ７とゲーム装置本体５とを無線通信によって接続する。さらに、ゲーム装置本体５には、当該ゲーム装置本体５に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。
【００４１】
また、ゲーム装置本体５には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ１７（図２参照）が搭載される。ゲーム装置本体５は、光ディスク４に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ２に表示する。また、ゲームプログラム等は、光ディスク４に限らず、フラッシュメモリ１７に予め記憶されたものを実行するようにしてもよい。さらに、ゲーム装置本体５は、フラッシュメモリ１７に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置本体５のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００４２】
コントローラ７は、無線コントローラモジュール１９を内蔵するゲーム装置本体５へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて操作情報等の送信データを無線送信する。コントローラ７は、２つのコントロールユニット（コアユニット７０およびサブユニット７６）が屈曲自在な接続ケーブル７９を介して互いに接続されて構成されており、主にモニタ２の表示画面に表示されるオブジェクト等を操作するための操作手段である。コアユニット７０およびサブユニット７６は、それぞれ片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン（十字キーやスティック等を含む）とが設けられている。また、後述により明らかとなるが、コアユニット７０は、当該コアユニット７０から見た画像を撮像する撮像情報演算部７４を備えている。また、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって例えば赤外光を出力する。また、コントローラ７（例えば、コアユニット７０）は、ゲーム装置本体５の無線コントローラモジュール１９から無線送信された送信データを通信部７５で受信して、当該送信データに応じた音や振動を発生させることもできる。
【００４３】
なお、本実施例では、コアユニット７０とサブユニット７６とを屈曲自在な接続ケーブル７９で接続したが、サブユニット７６に無線ユニットを搭載することで、接続ケーブル７９をなくすこともできる。例えば、無線ユニットとしてＢｌｕｅｔｏｏｔｈ（登録商標）ユニットをサブユニット７６に搭載することで、サブユニット７６からコアユニット７０へ操作データを送信することが可能になる。
【００４４】
次に、図２を参照して、ゲーム装置本体５の内部構成について説明する。ゲーム装置本体５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０、システムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ／Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）１３、ディスクドライブ１４、およびＡＶ−ＩＣ（Ａｕｄｉｏ  Ｖｉｄｅｏ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）１５等を有する。
【００４５】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムＬＳＩ１１の内部構成については、後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置本体５の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ３５または外部メインメモリ１２に読み出したデータを書き込む。
【００４６】
また、システムＬＳＩ１１には、入出力プロセッサ３１、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）３２、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３３、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３４、および内部メインメモリ３５が設けられる。図示は省略するが、これらの構成要素３１〜３５は、内部バスによって互いに接続される。
【００４７】
ＧＰＵ３２は、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ３４は、ＧＰＵ３２がグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ３２は、ＶＲＡＭ３４に記憶されたデータを用いて画像データを作成する。
【００４８】
ＤＳＰ３３は、オーディオプロセッサとして機能し、内部メインメモリ３５や外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００４９】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、ＡＶコネクタ１６を介して、読み出した画像データをモニタ２に出力するとともに、読み出した音声データをモニタ２に内蔵されるスピーカ２ａに出力する。これによって、画像がモニタ２に表示されるとともに音がスピーカ２ａから出力される。
【００５０】
入出力プロセッサ（Ｉ／Ｏプロセッサ）３１は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ３１は、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、および外部メモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００５１】
入出力プロセッサ３１は、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ３１は、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介して当該データをネットワークに送信する。また、入出力プロセッサ３１は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２、および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０は、ゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置本体５と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体５を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５２】
また、入出力プロセッサ３１は、アンテナ２３および無線コントローラモジュール１９を介して、コントローラ７から送信される操作データ等を受信し、内部メインメモリ３５または外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。なお、内部メインメモリ３５には、外部メインメモリ１２と同様に、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、ＣＰＵ１０のワーク領域やバッファ領域として用いられてもかまわない。
【００５３】
さらに、入出力プロセッサ３１には、拡張コネクタ２０および外部メモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ３１は、拡張コネクタ２０や外部メモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００５４】
また、ゲーム装置本体５（例えば、前部主面）には、当該ゲーム装置本体５の電源ボタン２４、ゲーム処理のリセットボタン２５、光ディスク４を脱着する投入口、およびゲーム装置本体５の投入口から光ディスク４を取り出すイジェクトボタン２６等が設けられている。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置本体５の各構成要素に対して、図示しないＡＣアダプタを経て電力が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置本体５の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００５５】
次に、図３を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の外観構成を示す斜視図である。
【００５６】
図３において、コントローラ７は、コアユニット７０とサブユニット７６とが接続ケーブル７９で接続されて構成されている。コアユニット７０は、ハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。一方、サブユニット７６は、ハウジング７７を有しており、当該ハウジング７７に複数の操作部７８が設けられている。
【００５７】
接続ケーブル７９の一方端には、コアユニット７０のコネクタ７３に着脱自在なコネクタ７９１が設けられており、接続ケーブル７９の他方端は固定的にサブユニット７６と接続されている。そして、接続ケーブル７９のコネクタ７９１は、コアユニット７０の後面に設けられたコネクタ７３と嵌合し、コアユニット７０とサブユニット７６とが当該接続ケーブル７９を介して接続される。
【００５８】
次に、図４および図５を参照して、コアユニット７０について説明する。なお、図４は、コアユニット７０の上面後方から見た斜視図である。図５は、コアユニット７０を下面前方から見た斜視図である。
【００５９】
図４および図５において、コアユニット７０は、例えばプラスチック成型によって形成されたハウジング７１を有している。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００６０】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、矢印で示す４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【００６１】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、リング状に４方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記十字キー７２ａの代わりに設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。また、少なくとも４つの方向（前後左右）をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。
【００６２】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ｂ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられる。なお、図４に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６３】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３本体の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６４】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール１９からコントローラ７へ、複数のＬＥＤ７０２のうち、上記コントローラ種別に対応するＬＥＤを点灯させるための信号が送信される。
【００６５】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図６のスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００６６】
一方、ハウジング７１下面には、凹部が形成されている。ハウジング７１下面の凹部は、プレイヤがコアユニット７０を把持したときに当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００６７】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コアユニット７０が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコアユニット７０の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００６８】
次に、図６および図７を参照して、コアユニット７０の内部構造について説明する。なお、図６は、コアユニット７０の上筐体（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図７は、コアユニット７０の下筐体（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図７に示す基板７００は、図６に示す基板７００の裏面から見た斜視図となっている。
【００６９】
図６において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図７、図１０参照）に接続される。また、図示しない無線モジュール７５３（図１０参照）およびアンテナ７５４によって、コアユニット７０がワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。
【００７０】
また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コアユニット７０の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコアユニット７０の動きを良好な感度でゲーム装置本体５等が判定することができる。例えば、コアユニット７０は、３軸の加速度センサ７０１を備えている。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。そして、加速度センサ７０１でそれぞれ検知された加速度を示すデータは、通信部７５に出力される。
【００７１】
一方、図７において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コアユニット７０の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置本体５から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。このバイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４が作動することによってコアユニット７０に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００７２】
図８および図９を参照して、サブユニット７６について説明する。なお、図８は、サブユニット７６の一例を示す斜視図である。図９は、図８のサブユニット７６の上筐体（ハウジング７７の一部）を外した状態を示す斜視図である。
【００７３】
図８において、サブユニット７６は、例えばプラスチック成型によって形成されたハウジング７７を有している。ハウジング７７は、その前後方向を長手方向とし、サブユニット７６において最太部となる頭部を前方に形成した流線型の立体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００７４】
ハウジング７７上面の上記最太部近傍に、スティック７８ａが設けられる。スティック７８ａは、ハウジング７７上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向や傾倒量を検出し、それに応じて操作信号を出力する操作部である。例えば、プレイヤがスティック先端を３６０°任意の方向に傾倒することによって任意の方向や位置を指定することができ、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示することができる。また、プレイヤは、スティック７８ａの傾倒量によって、プレイヤキャラクタ等の移動量を指示することができる。
【００７５】
なお、スティック７８ａは、プレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、上述した十字キーやリング状に４方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記スティック７８ａの代わりに設けてもかまわない。また、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記スティック７８ａの代わりに設けてもかまわない。また、タッチパッドを、上記スティック７８ａの代わりに設けてもかまわない。また、少なくとも４つの方向（前後左右）をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記スティック７８ａの代わりに設けてもかまわない。
【００７６】
サブユニット７６のハウジング７７の前面に、複数の操作ボタン７８ｄおよび７８ｅが設けられる。操作ボタン７８ｄおよび７８ｅは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７８ｄおよび７８ｅに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７８ｄおよび７８ｅには、ＸボタンおよびＹボタン等としての機能が割り当てられる。これら操作ボタン７８ｄおよび７８ｅは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられる。なお、図８に示した配置例では、操作ボタン７８ｄおよび７８ｅは、ハウジング７７前面の上下方向に沿って並設されている。
【００７７】
図９において、ハウジング７７の内部には基板が固設されており、当該基板の上主面上にスティック７８ａおよび加速度センサ７６１等が設けられる。そして、これらは、基板等に形成された配線（図示せず）を介して接続ケーブル７９と接続されている。加速度センサ７６１は、ハウジング７７の長手方向の中央部かつ短手方向の中央部に配置されるのが好ましい。例えば、サブユニット７６は、３軸の加速度センサ７６１を備えている。この３軸の加速度センサ７６１は、３方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。そして、加速度センサ７６１でそれぞれ検知された加速度を示すデータは、接続ケーブル７９を介して通信部７５に出力される。
【００７８】
次に、図１０を参照して、コントローラ７の内部構成について説明する。なお、図１０は、コントローラ７の構成を示すブロック図である。
【００７９】
図１０において、コアユニット７０は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。また、サブユニット７６は、上述した操作部７８および加速度センサ７６１を備えており、接続ケーブル７９とコネクタ７９１および７３とを介して、マイコン７５１と接続されている。
【００８０】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コアユニット７０の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コアユニット７０のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００８１】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置本体５からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置本体５から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置本体５から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００８２】
コアユニット７０に設けられた操作部７２からの操作信号（コアキーデータ）、加速度センサ７０１からの加速度信号（コア加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。また、接続ケーブル７９を介して、サブユニット７６に設けられた操作部７８からの操作信号（サブキーデータ）および加速度センサ７６１からの加速度信号（サブ加速度データ）は、マイコン７５１に出力される。マイコン７５１は、入力した各データ（コアキーデータ、サブキーデータ、コア加速度データ、サブ加速度データ、処理結果データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期でデータを収集して送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（Ｂｌｕｅｔｏｏｔｈ；登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その微弱電波信号をアンテナ７５４から放射する。つまり、コアユニット７０に設けられた操作部７２からのコアキーデータ、サブユニット７６に設けられた操作部７８からのサブキーデータ、コアユニット７０に設けられた加速度センサ７０１からのコア加速度データ、サブユニット７６に設けられた加速度センサ７６１からのサブ加速度データ、および撮像情報演算部７４からの処理結果データは、無線モジュール７５３で微弱電波信号に変調されてコアユニット７０から放射される。そして、ゲーム装置３の無線コントローラモジュール１９でその微弱電波信号を受信し、ゲーム装置３で当該微弱電波信号を復調や復号することによって、一連の操作情報（コアキーデータ、サブキーデータ、コア加速度データ、サブ加速度データ、および処理結果データ）を取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。
【００８３】
次に、ゲーム装置本体５が行う具体的な処理を説明する前に、図１１〜図１６を参照して本ゲーム装置本体５で行うゲームの概要について説明する。なお、図１１は、ゲームフィールドＧＦ上に配置されたプレイヤキャラクタＰＣに対する操作方向の一例を説明するための図である。図１２は、ゲームフィールドＧＦａ上にプレイヤキャラクタＰＣａが配置されたときのゲーム画像および操作方向の一例を示す図である。図１３は、ゲームフィールドＧＦｂ上にプレイヤキャラクタＰＣｂが配置されたときのゲーム画像および操作方向の一例を示す図である。図１４は、ゲームフィールドＧＦｃ上にプレイヤキャラクタＰＣｃが配置されたときのゲーム画像および操作方向の一例を示す図である。図１５は、ゲームフィールドＧＦｃ上に配置されたプレイヤキャラクタＰＣｃに対して、仮想カメラＣの方向を変化させたときの操作方向の一例を説明するための図である。図１６は、仮想カメラＣの方向を変化させたとき、ゲームフィールドＧＦｃ上にプレイヤキャラクタＰＣｃが配置されたゲーム画像および操作方向の一例を示す図である。
【００８４】
図１１において、仮想ゲーム空間内に１つの立体で構成されるゲームフィールドＧＦが設けられている。例えば、ゲームフィールドＧＦは、所定の立体ポリゴンにテクスチャマッピングして形成されるゲームフィールドオブジェクトを３次元空間座標系に配置して構築される。そして、プレイヤは、ゲームフィールドＧＦの外周面上に配置されて当該外周面に沿って移動するプレイヤキャラクタＰＣを、例えばスティック７８ａを傾倒することによって当該プレイヤキャラクタＰＣを移動させてゲームを進行する。
【００８５】
図１１に示すように、ゲームフィールドＧＦには、その中心部に向かって仮想ゲーム空間の仮想重力（以下、単に重力と記載する）が設定されている。つまり、ゲームフィールドＧＦは、その位置に応じて重力方向が変化するように重力が設定されている。図１１の例では、ゲームフィールドＧＦの上面（図１１に示すゲームフィールドＧＦａ）においては、当該上面からゲームフィールドＧＦの中心部に向かう方向（図１１に示す仮想ゲーム空間の下方向）の重力が設定されている。また、ゲームフィールドＧＦの側面（図１１に示すゲームフィールドＧＦｂ）においては、当該側面からゲームフィールドＧＦの中心部に向かう方向（図１１に示す仮想ゲーム空間の水平（具体的には右）方向）の重力が設定されている。さらに、ゲームフィールドＧＦの下面（図１１に示すゲームフィールドＧＦｃ）においては、当該下面からゲームフィールドＧＦの中心部に向かう方向（図１１に示す仮想ゲーム空間の上方向）の重力が設定されている。そして、プレイヤキャラクタＰＣは、ゲームフィールドＧＦに設定された重力に引き寄せられるように外周面上に配置され、ゲームフィールドＧＦの何れかのフィールド面（ゲームフィールドＧＦａ、ＧＦｂ、またはＧＦｃ）に接して配置される。他の例においては、重力方向は必ずしもゲームフィールドＧＦの中心部に向かう方向でなくともよく、ゲームごとに適宜設定してよい。また、坂道のような箇所においては、重力方向と外周面の方線方向とが必ずしも平行でなくともよい。
【００８６】
図１１および図１２を参照して、ゲームフィールドＧＦａ上の位置ＰＰａに配置されたプレイヤキャラクタＰＣａを想定する。この場合、ゲームフィールドＧＦａの上方位置に配置された仮想カメラＣがプレイヤキャラクタＰＣａを撮像する（図１１に示す仮想カメラＣａ）ことによって、図１２に示すようなゲーム画像が生成される。この状態でプレイヤがスティック７８ａを上方向（図１２に示す方向Ｓｕ）に傾倒したとき、プレイヤキャラクタＰＣａを仮想カメラＣａから遠ざかる方向、すなわちゲーム画像において仮想ゲーム空間における手前から奥への方向（図１１および図１２に示す操作方向Ｍｕ）へ移動させる操作指示となる。一方、プレイヤがスティック７８ａを下方向（図１２に示す方向Ｓｄ）に傾倒したとき、プレイヤキャラクタＰＣａを仮想カメラＣａに近づく方向、すなわちゲーム画像において仮想ゲーム空間における奥から手前への方向（図１１および図１２に示す操作方向Ｍｄ）へ移動させる操作指示となる。そして、プレイヤがスティック７８ａを左右方向（図１２に示す方向ＳｌおよびＳｒ）にそれぞれ傾倒したとき、プレイヤキャラクタＰＣａを仮想カメラＣａから見て左右方向（図１２に示す操作方向ＭｌおよびＭｒ）へそれぞれ移動させる操作指示となる。図１２から明らかなように、スティック７８ａの上下左右方向がそれぞれゲーム画像の上下左右方向となるため、プレイヤが直感的に考える方向にプレイヤの操作方向とプレイヤキャラクタＰＣａの移動方向とが対応付けられている。
【００８７】
図１１および図１３を参照して、ゲームフィールドＧＦｂ上の位置ＰＰｂに配置されたプレイヤキャラクタＰＣｂを想定する。この場合、ゲームフィールドＧＦｂの左方位置（例えば、プレイヤキャラクタＰＣｂの直上位置）に配置された仮想カメラＣがプレイヤキャラクタＰＣｂを撮像する（図１１に示す仮想カメラＣｂ）ことによって、図１３に示すようなゲーム画像が生成される。この状態でプレイヤがスティック７８ａを上方向（図１３に示す方向Ｓｕ）に傾倒したとき、プレイヤキャラクタＰＣｂを仮想カメラＣｂから見て上方向（図１１および図１３に示す操作方向Ｍｕ）へ移動させる操作指示となる。一方、プレイヤがスティック７８ａを下方向（図１３に示す方向Ｓｄ）に傾倒したとき、プレイヤキャラクタＰＣｂを仮想カメラＣｂから見て下方向（図１１および図１３に示す操作方向Ｍｄ）へ移動させる操作指示となる。そして、プレイヤがスティック７８ａを左右方向（図１３に示す方向ＳｌおよびＳｒ）にそれぞれ傾倒したとき、プレイヤキャラクタＰＣｂを仮想カメラＣｂから見て左右方向（図１３に示す操作方向ＭｌおよびＭｒ）へそれぞれ移動させる操作指示となる。この場合も図１３から明らかなように、スティック７８ａの上下左右方向がそれぞれゲーム画像の上下左右方向となるため、プレイヤが直感的に考える方向にプレイヤの操作方向とプレイヤキャラクタＰＣｂの移動方向とが対応付けられている。
【００８８】
図１１および図１４を参照して、ゲームフィールドＧＦｃ上の位置ＰＰｃに配置されたプレイヤキャラクタＰＣｃを想定する。この場合、ゲームフィールドＧＦｃの下方位置に配置された仮想カメラＣがプレイヤキャラクタＰＣｃを撮像する（図１１に示す仮想カメラＣｃ）ことによって、図１４に示すようなゲーム画像が生成される。つまり、図１４に示すように、上下逆になった状態でプレイヤキャラクタＰＣｃがゲームフィールドＧＦの下面に引き寄せられて接しているゲーム画像が表現される。この状態でプレイヤがスティック７８ａを上方向（図１４に示す方向Ｓｕ）に傾倒したとき、プレイヤキャラクタＰＣｃを仮想カメラＣｃに近づく方向、すなわちゲーム画像において仮想ゲーム空間における奥から手前への方向（図１１および図１４に示す操作方向Ｍｕ）へ移動させる操作指示となる。一方、プレイヤがスティック７８ａを下方向（図１４に示す方向Ｓｄ）に傾倒したとき、プレイヤキャラクタＰＣｃを仮想カメラＣｃから遠ざかる方向、すなわちゲーム画像において仮想ゲーム空間における手前から奥への方向（図１１および図１４に示す操作方向Ｍｄ）へ移動させる操作指示となる。そして、プレイヤがスティック７８ａを左右方向（図１４に示す方向ＳｌおよびＳｒ）にそれぞれ傾倒したとき、プレイヤキャラクタＰＣｃを仮想カメラＣｃから見て左右方向（図１４に示す操作方向ＭｌおよびＭｒ）へそれぞれ移動させる操作指示となる。この場合も図１４から明らかなように、スティック７８ａの上下左右方向がそれぞれゲーム画像の上下左右方向となるため、プレイヤが直感的に考える方向にプレイヤの操作方向とプレイヤキャラクタＰＣｃの移動方向とが対応付けられている。
【００８９】
また、図１５に示すように、プレイヤキャラクタＰＰｃの上下が画面の上下と逆になった場合に、仮想カメラＣｃをその撮像方向（視線方向）を中心として回転させることによってプレイヤキャラクタＰＰｃの上下と画面の上下が合うように表示の向きを変化させる場面を想定する。なお、図１５の左側が回転前の状態、右側が回転後の状態を示している。回転させる前の仮想カメラＣｃは、ゲームフィールドＧＦｃの下方位置に配置されており、プレイヤキャラクタＰＣｃを撮像している。この仮想カメラＣｃが撮像することによって、図１４に示すようなゲーム画像が生成される。そして、視線方向を中心として同じ位置で仮想カメラＣｃを図示矢印方向に１８０°回転させて、ゲーム画像を生成する。このような回転後の仮想カメラＣｃが、図１５においては仮想カメラＣｄで示されている。
【００９０】
ゲームフィールドＧＦｃの下方位置に配置された仮想カメラＣｄがプレイヤキャラクタＰＣｃを撮像することによって、図１６に示すようなゲーム画像が生成される。したがって、図１６に示すように、図１４と比較して上下逆転したゲーム画像が生成され、プレイヤキャラクタＰＣｃがゲームフィールドＧＦの上面（実際は、ゲームフィールドＧＦｃ）の上に配置されているようなゲーム画像が表現される。
【００９１】
プレイヤがスティック７８ａを上下左右方向（図１６に示す方向Ｓｕ、Ｓｄ、Ｓｌ、Ｓｒ）にそれぞれ傾倒したとき、上記仮想カメラＣの回転に応じてプレイヤキャラクタＰＣｃの移動方向が変化する。具体的には、プレイヤがスティック７８ａを方向Ｓｕ（上方向）へ操作することに応じて、プレイヤキャラクタＰＣｃを移動させる方向が、仮想カメラＣｃに近づく方向から仮想カメラＣｄから遠ざかる方向に変わる（図１５および図１６に示す操作方向Ｍｕ）。この場合、図１６から明らかなように、操作方向に応じた移動方向の変化によって、スティック７８ａの上方向がゲーム画像の上方向への移動指示となるため、プレイヤが直感的に考える方向にプレイヤの操作方向とプレイヤキャラクタＰＣｃの移動方向とが対応付けられるように変化をしていることになる。
【００９２】
また、プレイヤがスティック７８ａを方向Ｓｄ（下方向）へ操作することに応じて、プレイヤキャラクタＰＣｃを移動させる方向が、仮想カメラＣｃから遠ざかる方向から仮想カメラＣｄに近づく方向に変わる（図１５および図１６に示す操作方向Ｍｄ）。この場合、図１６から明らかなように、操作方向に応じた移動方向の変化によって、スティック７８ａの下方向がゲーム画像の下方向への移動指示となるため、プレイヤが直感的に考える方向にプレイヤの操作方向とプレイヤキャラクタＰＣｃの移動方向とが対応付けられるように変化をしていることになる。そして、プレイヤがスティック７８ａを左右方向（図１６に示す方向ＳｌおよびＳｒ）にそれぞれ傾倒したとき、上記カメラ回転後においてはプレイヤキャラクタＰＣｃを仮想カメラＣｄから見て左右方向（図１６に示す操作方向ＭｌおよびＭｒ）へそれぞれ移動させる操作指示となる。
【００９３】
なお、本実施例においては、上述した仮想カメラＣの回転に伴う移動方向の変化が、所定の条件を満たした場合に実施される。具体的には、仮想カメラＣの回転前後において、プレイヤによるスティック７８ａの操作状態に変化がなければ、仮想カメラＣの回転が行われていないものとして、仮想カメラＣの回転前に設定されている操作方向に対応する移動方向が維持される。例えば、図１６の例では、プレイヤがスティック７８ａを方向Ｓｄ（下方向）へ操作することを仮想カメラＣの回転前後において維持している場合、プレイヤキャラクタＰＣｃを移動させる方向も仮想カメラＣｃから遠ざかる方向に維持される（図１６において上向き矢印Ｍｄ）。そして、プレイヤがスティック７８ａの操作を緩めたり、操作方向を変更したりした時点で、上述したような移動方向の変化が実施される。このため、プレイヤが入力を維持し続けている間は、その方向の入力を始めた段階でプレイヤが意図していたゲーム空間内での方向にプレイヤキャラクタＰＣｃを移動し続けることができ、突然操作方向が変わることによってプレイヤが混乱してしまったり、操作をミスしてしまったりすることを防ぐことができる。
【００９４】
プレイヤキャラクタＰＣがゲームフィールドＧＦａからゲームフィールドＧＦｂを通ってゲームフィールドＧＦｃまで移動するとき、仮想ゲーム空間に設定されている重力方向が最終的に１８０°回転する。このとき、上述のように画面上での方向に関わらず移動方向を維持している場合には、プレイヤキャラクタＰＣの動作に注目すると、プレイヤキャラクタＰＣはプレイヤキャラクタＰＣから見た前方へ移動し続けることになるので、姿勢が変化するのはプレイヤキャラクタＰＣの上方（起立方向）を示す上方向ベクトルＶｔおよび前方を示す前方向ベクトルＶｆだけであり、プレイヤキャラクタＰＣの横方向を示す横方向ベクトルＶｒに変化がないことになる。したがって、後述により明らかとなるが、重力方向が変化する領域をプレイヤキャラクタＰＣが通過する場合、プレイヤの方向指示入力が変化しない間は、横方向ベクトルＶｒを固定する処理を行っている。
【００９５】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。以下、説明するゲーム処理においては、コアユニット７０およびサブユニット７６をそれぞれ操作する場合、サブユニット７６から得られるスティック７８ａの方向入力（サブキーデータ）に基づいて行われる処理を一例として説明する。
【００９６】
まず、図１７を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図１７は、ゲーム装置本体５の外部メインメモリ１２および／または内部メインメモリ３５（以下、２つのメインメモリを総称して、単にメインメモリと記載する）に記憶される主なデータを示す図である。
【００９７】
図１７に示すように、メインメモリには、キーデータＤａ、プレイヤキャラクタデータＤｂ、仮想カメラデータＤｃ、法線ベクトルデータＤｄ、重力ベクトルデータＤｅ、前回重力ベクトルデータＤｆ、側面突入状態フラグデータＤｇ、操作ベクトルデータＤｈ、移動ベクトルデータＤｉ、および画像データＤｊ等が記憶される。なお、メインメモリには、図１７に示すデータの他、ゲームに登場するオブジェクト等に関するデータや仮想ゲーム空間に関するデータ（背景のデータ等）等、ゲーム処理に必要な他のデータが記憶される。
【００９８】
キーデータＤａは、コアユニット７０やサブユニット７６に設けられた操作部７２および７８の操作状況を示すデータであり、コアユニット７０から送信データとして送信されてくる一連の操作情報に含まれる最新のコアキーデータおよびサブキーデータが記憶される。なお、ゲーム装置本体５に備える無線コントローラモジュール１９は、コアユニット７０から所定周期（例えば、１／２００秒毎）に送信される操作情報に含まれるコアキーデータおよびサブキーデータを受信し、無線コントローラモジュール１９に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた最新のコアキーデータおよびサブキーデータがゲーム処理周期である１フレーム毎（例えば、１／６０秒毎）に読み出されて、メインメモリのキーデータＤａが更新される。なお、以下の処理においては、これらコアキーデータおよびサブキーデータのうち、スティック７８ａの操作状況を示すサブキーデータが必要となるため、キーデータＤａには当該サブキーデータを少なくとも記憶すればよい。また、キーデータＤａには、少なくとも直近の２回のゲーム処理周期において取得したサブキーデータが記憶される。
【００９９】
なお、後述する処理フローでは、キーデータＤａがゲーム処理周期である１フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コアユニット７０からの送信周期毎にキーデータＤａを更新し、当該更新されたキーデータをゲーム処理周期毎に利用する態様でもかまわない。この場合、キーデータＤａを更新する周期と、ゲーム処理周期とが異なることになる。
【０１００】
プレイヤキャラクタデータＤｂは、仮想ゲーム空間に登場するプレイヤキャラクタＰＣの位置や姿勢を示すデータであり、プレイヤキャラクタ位置データＤｂ１および姿勢ベクトルデータＤｂ２を含んでいる。プレイヤキャラクタ位置データＤｂ１は、仮想ゲーム空間におけるプレイヤキャラクタＰＣの位置ＰＰを示すデータが格納される。また、姿勢ベクトルデータＤｂ２は、仮想ゲーム空間におけるプレイヤキャラクタＰＣの姿勢を示すデータが格納される。例えば、姿勢ベクトルデータＤｂ２には、プレイヤキャラクタＰＣの上方（起立方向）を示す上方向ベクトルＶｔ、前方を示す前方向ベクトルＶｆ、および横方向を示す横方向ベクトルＶｒを示すデータがそれぞれ格納される。
【０１０１】
仮想カメラデータＤｃは、仮想ゲーム空間に配置される仮想カメラＣの位置や撮像方向等を示すデータであり、カメラ位置データＤｃ１、カメラベクトルデータＤｃ２、および突入時カメラベクトルデータＤｃ３を含んでいる。カメラ位置データＤｃ１は、仮想ゲーム空間における仮想カメラＣの位置を示すデータが格納される。カメラベクトルデータＤｃ２は、仮想ゲーム空間に配置された仮想カメラＣの撮像方向や向きを示すデータが格納される。例えば、カメラベクトルデータＤｃ２は、カメラ座標系の視線方向（仮想カメラＣから注視点に向かう方向）を示すカメラベクトルＶｃＺ、カメラ座標系の右方向（仮想カメラＣによって表示される表示領域の右方向）を示すカメラベクトルＶｃＸ、およびカメラ座標系の上方向（仮想カメラＣによって表示される表示領域の上方向）を示すカメラベクトルＶｃＹを示すデータがそれぞれ格納される。また、突入時カメラベクトルデータＤｃ３は、プレイヤキャラクタＰＣが側面突入状態となった時点のカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺを、カメラベクトルＶｃＸｏ、ＶｃＹｏ、およびＶｃＺｏとして代入して、当該カメラベクトルＶｃＸｏ、ＶｃＹｏ、およびＶｃＺｏを示すデータが一時的に格納される。
【０１０２】
法線ベクトルデータＤｄは、プレイヤキャラクタＰＣの位置ＰＰにおけるゲームフィールドＧＦの法線方向（位置ＰＰの地形に垂直な上方向であり、典型的にはプレイヤキャラクタＰＣの移動方向に対して垂直となる上方向）である法線ベクトルＶｗを示すデータが格納される。重力ベクトルデータＤｅは、プレイヤキャラクタＰＣの位置ＰＰにおけるゲームフィールドＧＦの重力方向である重力ベクトルＶｇを示すデータが格納される。前回重力ベクトルデータＤｆは、前回の処理で用いられた重力ベクトルＶｇを重力ベクトルＶｇｏとして代入し、当該重力ベクトルＶｇｏを示すデータが格納される。側面突入状態フラグデータＤｇは、プレイヤキャラクタＰＣが側面突入状態にあるか否かを示す側面突入状態フラグＦの状態を示すデータが格納される。ここで、側面突入状態とは、上述のように、プレイヤキャラクタＰＣの移動方向を維持し続ける状態であって、例えばゲームフィールドＧＦの上面から側面に突入し、さらに下面へと移動していく場合などにおける状態のことである。
【０１０３】
操作ベクトルデータＤｈは、プレイヤの方向入力の方向や操作量を示すデータが格納される。例えば、スティック７８ａの傾倒方向および傾倒量（傾倒角度）に応じてプレイヤキャラクタＰＣの移動方向および移動速度が指示される場合、キーデータＤａに基づいてスティック７８ａの傾倒方向および傾倒量に応じた操作ベクトルＶｓが算出され、当該操作ベクトルＶｓを示すデータが操作ベクトルデータＤｈに格納される。操作ベクトルＶｓは、具体的にはスティック７８ａの上下方向の傾倒量、左右方向の傾倒量の２つの値で表される２次元ベクトルである。移動ベクトルデータＤｉは、仮想ゲーム空間においてプレイヤキャラクタＰＣが移動する方向および速度を示すデータが格納される。例えば、操作ベクトルＶｓに応じて、仮想ゲーム空間においてプレイヤキャラクタＰＣが移動する方向および速度を示す移動ベクトルＶｍが算出され、当該移動ベクトルＶｍを示すデータが移動ベクトルデータＤｉに格納される。
【０１０４】
画像データＤｊは、プレイヤキャラクタ画像データＤｊ１および地形画像データＤｊ２等を含んでいる。プレイヤキャラクタ画像データＤｊ１は、仮想ゲーム空間の位置ＰＰにプレイヤキャラクタＰＣを配置してゲーム画像を生成するためのデータである。地形画像データＤｊ２は、仮想ゲーム空間にゲームフィールドＧＦを配置してゲーム画像を生成するためのデータである。
【０１０５】
次に、図１８〜図２０を参照して、ゲーム装置本体５において行われるゲーム処理の詳細を説明する。なお、図１８は、ゲーム装置本体５において実行されるゲーム処理の流れを示すフローチャートである。図１９は、図１８におけるステップ４６および５１の移動方向算出処理の詳細な動作を示すサブルーチンである。図２０は、図１８におけるステップ５５の側面突入検出処理の詳細な動作を示すサブルーチンである。なお、図１８〜図２０に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがスティック７８ａを操作することに応じてプレイヤキャラクタＰＣを移動させる処理について説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図１８〜図２０では、ＣＰＵ１０が実行する各ステップを「Ｓ」と略称する。
【０１０６】
ゲーム装置本体５の電源が投入されると、ゲーム装置本体５のＣＰＵ１０は、ブートＲＯＭ（例えば、ＲＯＭ／ＲＴＣ１３）に記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリに読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１８〜図２０に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【０１０７】
図１８において、ＣＰＵ１０は、ゲーム処理の初期設定を行い（ステップ４０）、次のステップに処理を進める。上記ステップ４０における初期設定では、ゲームフィールドオブジェクトを３次元空間座標系に配置してゲームフィールドＧＦを構築する。なお、ゲームフィールドＧＦは、上述したような立体形状を有しており、当該立体外周面の各地点に対して、それぞれ上述したような重力が設定される。それぞれの地点における重力は、例えば上記立体の中心付近を向くように設定される。また、プレイヤキャラクタＰＣや他のオブジェクトをゲームフィールドＧＦ外周面上の所定位置に配置し、プレイヤキャラクタＰＣの位置ＰＰおよび姿勢を示すデータをプレイヤキャラクタデータＤｂに格納する。そして、プレイヤキャラクタＰＣ等が配置されたゲームフィールドＧＦに対して、予め決められた初期位置に仮想カメラＣを配置してゲーム画像をモニタ２に表示し、当該仮想カメラＣの位置やカメラベクトルを示すデータを仮想カメラデータＤｃに格納する。また、ＣＰＵ１０は、各ゲームパラメータを初期化（例えば、上述したパラメータを除いた各ゲームパラメータを０に初期化）する。
【０１０８】
次に、ＣＰＵ１０は、プレイヤキャラクタＰＣの位置ＰＰに応じて仮想カメラＣを設定し（ステップ４１）、次のステップに処理を進める。つまり、カメラ位置データＤｃ１、カメラベクトルデータＤｃ２を適宜設定する。例えば、ＣＰＵ１０は、プレイヤキャラクタＰＣ等が配置されたゲームフィールドＧＦに対して、少なくともプレイヤキャラクタＰＣが撮像範囲内（例えば、撮像範囲の中央）となるように仮想カメラＣを配置して（図１１参照）ゲーム画像をモニタ２に表示し、当該仮想カメラＣの位置やカメラベクトルを示すデータを仮想カメラデータＤｃに格納する。なお、本実施例においては、上記ステップ４１において、仮想カメラＣの位置をプレイヤキャラクタＰＣの移動に常に追従するように設定する（図１１参照）。また、上記ステップ４１において、プレイヤキャラクタＰＣの位置ＰＰ等が所定の条件を満たせば、仮想カメラＣの方向をその視線方向を中心として１８０°回転するまで、フレーム毎に徐々に角度を変化させるように設定する（図１５参照）。このように、仮想カメラＣの視体積内にプレイヤキャラクタＰＣが含まれて、モニタ２にプレイヤキャラクタＰＣが表示されるように仮想カメラＣの位置および姿勢が設定される。
【０１０９】
次に、ＣＰＵ１０は、サブキーデータを取得して（ステップ４２）、次のステップに処理を進める。例えば、ＣＰＵ１０は、コアユニット７０から受信した最新の操作情報に含まれるキーデータを用いて、キーデータＤａを更新する。具体的には、コアユニット７０から受信した最新の操作情報に含まれるサブキーデータ（特に、スティック７８ａの操作状況を示すデータ）を用いて、キーデータＤａを更新する。なお、上記ステップ４２で取得したサブキーデータは、最新のデータとしてキーデータＤａに記憶される。また、上記ステップ４２の実行前までに最新のデータとしてキーデータＤａに記憶されていたサブキーデータは、前回のデータとして取り扱われて引き続きキーデータＤａに記憶される。このようにキーデータＤａには、少なくとも直近の２回のゲーム処理周期において取得したサブキーデータが記憶される。
【０１１０】
次に、ＣＰＵ１０は、キーデータＤａを参照して、プレイヤからの方向入力があるか否かを判断する（ステップ４３）。例えば、ＣＰＵ１０は、キーデータＤａに格納されているサブキーデータが、何れかの方向にスティック７８ａが傾倒されていることを示す場合、方向入力があると判断する。一方、ＣＰＵ１０は、キーデータＤａに格納されているサブキーデータが、スティック７８ａが傾倒されていないニュートラル状態であることを示す場合、方向入力がないと判断する。そして、ＣＰＵ１０は、方向入力がある場合、次のステップ４４に処理を進める。一方、ＣＰＵ１０は、方向入力がない場合、側面突入状態を解除して、次のステップ５７に処理を進める。具体的には、ＣＰＵ１０は、側面突入状態フラグデータＤｇに記憶されている側面突入状態フラグＦをＯＦＦに設定する。
【０１１１】
ステップ４４において、ＣＰＵ１０は、プレイヤキャラクタＰＣが側面突入状態にあるか否かを判断する。具体的には、ＣＰＵ１０は、側面突入状態フラグデータＤｇを参照し、側面突入状態フラグＦがＯＮである場合にプレイヤキャラクタＰＣが側面突入状態にあると判断する。そして、ＣＰＵ１０は、側面突入状態にある場合、次のステップ４５に処理を進める。一方、ＣＰＵ１０は、側面突入状態にない場合、次のステップ５１に処理を進める。
【０１１２】
ステップ４５において、ＣＰＵ１０は、プレイヤによる方向入力の変化が閾値以内であるか否かを判断する。そして、ＣＰＵ１０は、方向入力の変化が閾値以内である場合、次のステップ４６に処理を進める。一方、ＣＰＵ１０は、方向入力の変化が閾値を越えている場合、次のステップ５０に処理を進める。例えば、上記ステップ４５においては、キーデータＤａに記憶された最新のサブキーデータが示すスティック７８ａの傾倒状況（例えば、傾倒方向や傾倒量）と、前回のサブキーデータが示すスティック７８ａの傾倒状況とが比較される。そして、両者の差が方向入力操作を変化させたレベルであることを判定するための閾値が設けられており、当該差が閾値以内であるときに方向入力操作が不変であると認識している。
【０１１３】
ステップ５０において、ＣＰＵ１０は、側面突入状態を解除して、次のステップ５１に処理を進める。具体的には、ＣＰＵ１０は、側面突入状態フラグデータＤｇに記憶されている側面突入状態フラグＦをＯＦＦに設定する。ここで、上記ステップ５０は、プレイヤキャラクタＰＣが側面突入状態であり（ステップ４４でＹｅｓ）、かつ、方向入力の変化が閾値を越えている場合（ステップ４５でＮｏ）に実行される処理であり、プレイヤキャラクタＰＣが側面突入状態であってもプレイヤの方向入力操作が変化すると側面突入状態が解除されることになる。
【０１１４】
プレイヤキャラクタＰＣが側面突入状態にない場合（ステップ４４でＮｏまたはステップ４５でＮｏ）、ステップ５１が実行される。ステップ５１において、ＣＰＵ１０は、プレイヤキャラクタＰＣの移動方向を決定する処理を行う。以下、図１９を参照して、移動方向決定処理について説明する。
【０１１５】
図１９において、ＣＰＵ１０は、カメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺと、法線ベクトルＶｗと、操作ベクトルＶｓとを設定し（ステップ８０）、処理を次のステップに進める。
【０１１６】
図２１および図２２を参照して、上記ステップ８０におけるカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺと、法線ベクトルＶｗと、操作ベクトルＶｓとの設定例について説明する。後述により明らかとなるが、当該移動方向決定処理は、プレイヤキャラクタＰＣが側面突入状態にない場合と、側面突入状態である場合との両方において行われる処理であるが、移動方向の決定に用いられるカメラベクトルが異なっている。ＣＰＵ１０は、プレイヤキャラクタＰＣが側面突入状態にない場合、上記ステップ４１で設定されたカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺ（すなわち、カメラベクトルデータＤｃ２に記憶されているカメラベクトル）を、そのまま以下の処理で用いるパラメータとして上記ステップ８０で設定する。一方、ＣＰＵ１０は、プレイヤキャラクタＰＣが側面突入状態である場合、突入時カメラベクトルデータＤｃ３に記憶されているカメラベクトルＶｃＸｏ、ＶｃＹｏ、およびＶｃＺｏを、それぞれカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺの代わりのパラメータとして取り扱って上記ステップ８０で設定する。
【０１１７】
また、ＣＰＵ１０は、プレイヤキャラクタ位置データＤｂ１を参照して、位置ＰＰにおけるゲームフィールドＧＦの法線ベクトルＶｗ（位置ＰＰの地形に垂直な上方向であり、典型的にはプレイヤキャラクタＰＣの移動方向（移動ベクトルＶｍ）に対して垂直となる上方向を示すベクトル）を算出する。そして、ＣＰＵ１０は、当該法線ベクトルＶｗを示すデータを法線ベクトルデータＤｄに記憶する。また、ＣＰＵ１０は、キーデータＤａに記憶された最新のサブキーデータが示すスティック７８ａの傾倒方向および傾倒量を用いて、操作ベクトルＶｓを算出する。そして、ＣＰＵ１０は、当該操作ベクトルＶｓを示すデータを操作ベクトルデータＤｉに記憶する。ここで、必要に応じて、法線ベクトルＶｗに代えて、位置ＰＰにおける重力ベクトルを反転させたベクトル（反重力ベクトル）や、重力ベクトルと法線ベクトルとの２つのベクトルを適宜調整することによって算出したベクトルを法線ベクトルデータＤｄに格納するようにしても、適宜移動方向を定めることが可能である。
【０１１８】
図１９に戻り、ＣＰＵ１０は、上記ステップ８０の処理の後、内積ｚｄｎおよびｙｄｎを算出し（ステップ８１）、次のステップに処理を進める。具体的には、ＣＰＵ１０は、上記ステップ８０で設定されたカメラベクトルＶｃＹおよびＶｃＺと、法線ベクトルＶｍとを用いて、−ＶｃＺとＶｗとの内積を内積ｚｄｎ、ＶｃＹとＶｗとの内積を内積ｙｄｎとして算出する。つまり、内積ｚｄｎは法線ベクトルＶｗにおけるカメラ座標系の反視線方向（−ＶｃＺ方向）成分を示すパラメータであり、内積ｙｄｎは法線ベクトルＶｗにおけるカメラ座標系の上方向（ＶｃＹ方向）成分を示すパラメータとなる。
【０１１９】
次に、ＣＰＵ１０は、内積ｚｄｎの絶対値が内積ｙｄｎの絶対値より大きいか否かを判断する（ステップ８２）。そして、ＣＰＵ１０は、｜ｚｄｎ｜＞｜ｙｄｎ｜の場合、次のステップ８３に処理を進める。一方、ＣＰＵ１０は、｜ｚｄｎ｜≦｜ｙｄｎ｜の場合、次のステップ８６に処理を進める。ここで、上記ステップ８２は、法線ベクトルＶｗの方向がカメラ座標の視線方向に近いか上下方向に近いかを判定している。すなわち、上記ステップ８２では、プレイヤキャラクタＰＣがゲームフィールドＧＦ上で起立している場合、仮想カメラＣがプレイヤキャラクタＰＣの直上方向に近い位置から撮像しているか、プレイヤキャラクタＰＣの横方向に近い位置から撮像しているかを判定していることになる。そして、ＣＰＵ１０は、法線ベクトルＶｗの方向がカメラ座標の視線方向に近い場合にステップ８３に処理を進め、法線ベクトルＶｗの方向がカメラ座標の上下方向に近い場合にステップ８６に処理を進めている。
【０１２０】
ステップ８３において、ＣＰＵ１０は、内積ｚｄｎが０以上か否かを判断する。そして、ＣＰＵ１０は、ｚｄｎ≧０の場合、ベクトルＶｏ＝ＶｃＹとしてベクトルＶｏを設定し（ステップ８４）、次のステップ８９に処理を進める。一方、ＣＰＵ１０は、ｚｄｎ＜０の場合、ベクトルＶｏ＝−ＶｃＹとしてベクトルＶｏを設定し（ステップ８５）、次のステップ８９に処理を進める。
【０１２１】
一方、ステップ８６において、ＣＰＵ１０は、内積ｙｄｎが０以上か否かを判断する。そして、ＣＰＵ１０は、ｙｄｎ≧０の場合、ベクトルＶｏ＝ＶｃＺとしてベクトルＶｏを設定し（ステップ８７）、次のステップ８９に処理を進める。一方、ＣＰＵ１０は、ｙｄｎ＜０の場合、ベクトルＶｏ＝−ＶｃＺとしてベクトルＶｏを設定し（ステップ８８）、次のステップ８９に処理を進める。
【０１２２】
ステップ８９において、ＣＰＵ１０は、方向ベクトルＶｘおよびＶｙを算出し、次のステップに処理を進める。ここで、図２１および図２２に示すように、方向ベクトルＶｘは、スティック７８ａを右方向（図１２等で示す方向Ｓｒ）に傾倒させた操作に対応する仮想ゲーム空間の方向（具体的には、プレイヤキャラクタＰＣの移動方向）を示す方向パラメータである。また、方向ベクトルＶｙは、スティック７８ａを上方向（図１２等で示す方向Ｓｕ）に傾倒させた操作に対応する仮想ゲーム空間の方向を示す方向パラメータである。そして、ＣＰＵ１０は、方向ベクトルＶｘを、ベクトルＶｏと法線ベクトルＶｗとの外積、すなわち、
Ｖｘ  ＝  Ｖｏ  ×  Ｖｗ
によって算出する。また、ＣＰＵ１０は、方向ベクトルＶｙを、カメラベクトルＶｃＸの逆方向ベクトル（−ＶｃＸ）と法線ベクトルＶｗとの外積、すなわち、
Ｖｙ  ＝  −ＶｃＸ  ×  Ｖｗ
によって算出する。
【０１２３】
次に、ＣＰＵ１０は、プレイヤキャラクタＰＣの移動ベクトルＶｍを算出して移動ベクトルデータＤｉを更新し（ステップ９０）、当該サブルーチンによる処理を終了する。例えば、ＣＰＵ１０は、移動ベクトルＶｍを
Ｖｍ  ＝  Ｖｘ  ＊  Ｖｓｘ  ＋  Ｖｙ  ＊  Ｖｓｙ
によって算出する。ここで、図２１および図２２に示すように、Ｖｓｘは操作ベクトルＶｓのｘ方向（スティック７８ａを右へ傾倒させる方向）成分を示し、Ｖｓｙは操作ベクトルＶｓのｙ方向（スティック７８ａを上へ傾倒させる方向であり、ｘ方向と直交する方向）成分を示している。つまり、プレイヤの方向入力の方向を示す操作ベクトルＶｓは、直交する２軸方向（ｘ方向およびｙ方向）を基準としたパラメータであり、上記方向ベクトルＶｘおよびＶｙをそれぞれ当該２軸方向に関連付けて移動ベクトルＶｍを算出している。
【０１２４】
ここで、上述した移動方向決定処理における基本原理について説明する。上述した処理においては、互いに直交する３つのカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺの何れか２つと、移動方向に対して必ず垂直となる法線ベクトルＶｗとの外積を用いて、操作ベクトルＶｓに対応する仮想ゲーム空間の方向（移動ベクトルＶｍ）を求めている。ここで、図２１および図２２に示すように、上述した処理は、ゲームフィールドＧＦの法線方向（もしくは重力方向）が表示画面に対して上下または前後方向に設定される、すなわち法線ベクトルＶｗの方向がカメラ座標におけるＶｃＹ−ＶｃＺ平面と平行であることを前提としている。したがって、表示されるゲーム画像において、位置ＰＰからゲームフィールドＧＦに沿った上方向となる方向ベクトルＶｙは、法線ベクトルＶｗおよびカメラベクトルＶｃＸに対して直交するベクトルとなる。すなわち、方向ベクトルＶｙは、カメラベクトルＶｃＸの逆方向ベクトル（−ＶｃＸ）と法線ベクトルＶｗとの外積によって求めることができる。
【０１２５】
また、表示されるゲーム画像において、位置ＰＰからゲームフィールドＧＦに沿った右方向となる方向ベクトルＶｘは、法線ベクトルＶｗおよびカメラベクトルＶｃＹまたはＶｃＺに対して直交するベクトルとなる。しかしながら、法線ベクトルＶｗの方向がカメラ座標におけるＶｃＹ−ＶｃＺ平面と平行であることを前提にして、法線ベクトルＶｗとカメラ座標との位置関係が仮想カメラＣの移動等に応じて変化する。つまり、カメラベクトルＶｃＹおよびＶｃＺと法線ベクトルＶｗとの位置関係が、仮想カメラＣの移動や撮像角度の変化に応じて変化する。本実施例では、カメラベクトルＶｃＹおよびＶｃＺから法線ベクトルＶｗの方向との差が大きい（内積値が小さい）一方を選択し、当該選択された一方（ベクトルＶｏ）と法線ベクトルＶｗとの外積によって、方向ベクトルＶｘを求めている。なお、方向ベクトルＶｘおよびＶｙを求める際のカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺの正負は、所望の方向に直交する方向ベクトルＶｘおよびＶｙを外積によって求めるための符号調整である。例えば、内積値の絶対値が小さい結果となったカメラベクトルＶｃＹおよびＶｃＺの一方について、当該内積値の正負に応じて当該一方のカメラベクトルＶｃＹまたはＶｃＺを反転させて符号調整している。
【０１２６】
このように、本実施例では、カメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺと法線ベクトルＶｗとの内積および外積を用いることによって、プレイヤの方向入力の基準入力方向（ｘおよびｙ方向）に応じた仮想ゲーム空間における基準方向（方向ベクトルＶｘおよびＶｙ）を算出している。そして、当該基準方向に基づいて、プレイヤの方向入力に応じた移動ベクトルＶｍを算出することによって、プレイヤの方向入力に直感的に対応付けられた移動方向を算出している。これによって、重力方向（法線方向）が様々な方向に設定されているゲームフィールドを用いた仮想ゲーム空間においても、直感的な方向入力操作が実現可能となり、プレイヤに操作の混乱を与えることもない。さらに、上記仮想ゲーム空間環境において、所定条件を満たすときに仮想カメラを回転させる状況であっても、直感的な方向入力操作が実現可能となり、プレイヤに操作の混乱を与えることもない。
【０１２７】
なお、上述した移動方向決定処理では、カメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺのうち、カメラベクトルＶｃＹおよびＶｃＺの何れか一方と、カメラベクトルＶｃＸとを用いて２つの方向ベクトルＶｘおよびＶｙを算出しているが、他の態様でカメラベクトルを選択して算出してもかまわない。例えば、上述した移動方向決定処理では、法線ベクトルＶｗの方向がカメラ座標におけるＶｃＹ−ＶｃＺ平面と平行であることを前提にしているために、カメラベクトルＶｃＸを用いることを必須としているが、カメラ座標系と法線ベクトルＶｗとの位置関係によって、他のカメラベクトルを用いることを必須としてもよい。具体的には、ゲームフィールドＧＦの重力方向（法線方向）が表示画面に対して左右または前後方向に設定される、すなわち法線ベクトルＶｗの方向がカメラ座標におけるＶｃＸ−ＶｃＺ平面と平行であることを前提とする。この場合、カメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺのうち、カメラベクトルＶｃＸおよびＶｃＺの何れか一方と法線ベクトルＶｗとの外積、およびカメラベクトルＶｃＹと法線ベクトルＶｗとの外積を用いてそれぞれ２つの方向ベクトルＶｘおよびＶｙを算出すればよい。
【０１２８】
図１８に戻り、上記ステップ５１の移動方向決定処理の後、ＣＰＵ１０は、プレイヤキャラクタＰＣが姿勢変化する際の回転軸を未固定に設定する（ステップ５２）。そして、ＣＰＵ１０は、上記ステップ５１で算出された移動ベクトルＶｍに基づいて、プレイヤキャラクタＰＣを移動させ（ステップ５３）、当該プレイヤキャラクタＰＣの姿勢を決定して（ステップ５４）、次のステップ５５に処理を進める。例えば、ＣＰＵ１０は、ゲームフィールドＧＦ上を移動ベクトルＶｍに基づいてプレイヤキャラクタＰＣを移動させて新たな位置ＰＰを算出して、プレイヤキャラクタ位置データＤｂ１を更新する。そして、ＣＰＵ１０は、新たに算出された位置ＰＰおよびプレイヤからの操作入力に応じてプレイヤキャラクタＰＣの姿勢を決定して、姿勢ベクトルデータＤｂ２を更新する。ここで、図２３に示すように、プレイヤキャラクタＰＣにはその姿勢を示すパラメータとしてベクトルＶｔ、Ｖｆ、およびＶｒが設定されている。具体的には、プレイヤキャラクタＰＣの上方（起立方向）を示す上方向ベクトルＶｔ、前方を示す前方向ベクトルＶｆ、および横方向を示す横方向ベクトルＶｒによって、プレイヤキャラクタＰＣの姿勢が定義される。上記ステップ５４では、新たに算出された位置ＰＰおよびプレイヤからの操作入力に応じて、これら上方向ベクトルＶｔ、前方向ベクトルＶｆ、および横方向ベクトルＶｒを決定して、姿勢ベクトルデータＤｂ２を更新する。
【０１２９】
一方、プレイヤキャラクタＰＣが側面突入状態であり（ステップ４４でＹｅｓ）、かつ、方向入力の変化が閾値以内（すなわち、プレイヤの方向入力操作が不変）である場合（ステップ４５でＹｅｓ）、ＣＰＵ１０は、プレイヤキャラクタＰＣの移動方向を決定する処理を行って（ステップ４６）、次のステップに処理を進める。このステップ４６で行う移動方向決定処理は、上述したステップ５１で行う移動方向決定処理と同様であるため、詳細な説明を省略する。ただし、ステップ４６で行う移動方向決定処理においては、プレイヤキャラクタＰＣが側面突入状態であるため、突入時カメラベクトルデータＤｃ３に記憶されているカメラベクトルＶｃＸｏ、ＶｃＹｏ、およびＶｃＺｏが、それぞれカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺとして取り扱われる。
【０１３０】
次に、ＣＰＵ１０は、上記ステップ４６の移動方向決定処理の後、プレイヤキャラクタＰＣが姿勢変化する際の回転軸を固定に設定する（ステップ４７）。そして、ＣＰＵ１０は、上記ステップ４６で算出された移動ベクトルＶｍに基づいて、プレイヤキャラクタＰＣを移動させ（ステップ４８）、当該プレイヤキャラクタＰＣの姿勢を決定して（ステップ４９）、次のステップ５５に処理を進める。
【０１３１】
例えば、上記ステップ４８において、ＣＰＵ１０は、ゲームフィールドＧＦ上を移動ベクトルＶｍに基づいてプレイヤキャラクタＰＣを移動させて新たな位置ＰＰを算出して、プレイヤキャラクタ位置データＤｂ１を更新する。ここで、ステップ４８におけるプレイヤキャラクタＰＣの移動方向は、側面突入状態に移行した時点のカメラベクトルに基づいて算出される。したがって、側面突入状態期間で仮想カメラＣが移動または回転しても、当該移動や回転が行われてない状態を仮定してプレイヤキャラクタＰＣの移動方向が算出される。
【０１３２】
また、上記ステップ４９において、ＣＰＵ１０は、新たに算出された位置ＰＰおよびプレイヤからの操作入力に応じてプレイヤキャラクタＰＣの姿勢を決定して、姿勢ベクトルデータＤｂ２を更新する。ここで、上記ステップ４９の姿勢決定処理は、プレイヤキャラクタＰＣの姿勢を変化させる際、横方向ベクトルＶｒの方向を固定して他の上方向ベクトルＶｔおよび前方向ベクトルＶｆの方向を回転させる。ここで、後述により明らかとなるが、プレイヤキャラクタＰＣに作用する重力方向が変化し、かつ、方向入力操作に変化がないときに、側面突入状態に設定される。そして、図１１等を用いて説明したように、このような環境におけるプレイヤキャラクタＰＣの動作に注目すると、プレイヤキャラクタＰＣの姿勢が変化するのはプレイヤキャラクタＰＣの上方向ベクトルＶｔおよび前方向ベクトルＶｆだけであり、プレイヤキャラクタＰＣの横方向ベクトルＶｒに変化がない。したがって、上記ステップ４９における姿勢決定処理においては、プレイヤキャラクタＰＣの姿勢を決める上方向ベクトルＶｔ、前方向ベクトルＶｆ、および横方向ベクトルＶｒのうち、１つ（横方向ベクトルＶｒ）を固定して、重力変化時におけるプレイヤキャラクタＰＣの姿勢変化を制御している。
【０１３３】
ステップ５５において、ＣＰＵ１０は、側面突入検出処理を行い、次のステップ５７に処理を進める。以下、図２０を参照して、側面突入検出処理の詳細な動作について説明する。
【０１３４】
図２０において、ＣＰＵ１０は、現在の位置ＰＰに設定されている重力ベクトルＶｇを取得して重力ベクトルデータＤｅを更新し（ステップ９１）、次のステップに処理を進める。上述したように、ゲームフィールドＧＦには、その中心部に向かって仮想ゲーム空間の重力が設定されている。そして、上記ステップ９１においては、位置ＰＰに設定されている重力方向（つまり、プレイヤキャラクタＰＣに作用している仮想重力の方向）を示す重力ベクトルＶｇを取得する。
【０１３５】
次に、ＣＰＵ１０は、側面突入状態フラグデータＤｇを参照して、プレイヤキャラクタＰＣが側面突入状態にあるか否かを判断する（ステップ９２）。そして、ＣＰＵ１０は、側面突入状態でない場合、次のステップ９３に処理を進める。一方、ＣＰＵ１０は、側面突入状態である場合、次のステップ９９に処理を進める。
【０１３６】
ステップ９３において、ＣＰＵ１０は、重力ベクトルデータＤｅに格納されている重力ベクトルＶｇと、前回重力ベクトルデータＤｆに格納されている重力ベクトルＶｇｏとが等しいか否かを判断する。そして、ＣＰＵ１０は、Ｖｇ≠Ｖｇｏの場合、次のステップ９４に処理を進める。一方、ＣＰＵ１０は、Ｖｇ＝Ｖｇｏの場合、次のステップ９９に処理を進める。ここで、前回重力ベクトルデータＤｆに格納されている重力ベクトルＶｇｏは、前回の処理において取得された重力ベクトルＶｇであり、上記ステップ９３ではプレイヤキャラクタＰＣに作用する重力の方向が変化したか否かを検出していることになる。
【０１３７】
ステップ９４において、ＣＰＵ１０は、重力回転軸ベクトルＶｇｒを算出して、次のステップに処理を進める。ここで、重力回転軸ベクトルＶｇｒは、重力の変化の回転軸を示すベクトルであり、重力ベクトルＶｇおよび重力ベクトルＶｇｏに対して互いに垂直なベクトルを算出することによって求められる。
【０１３８】
次に、ＣＰＵ１０は、プレイヤキャラクタＰＣの上方向ベクトルＶｔ、前方向ベクトルＶｆ、および横方向ベクトルＶｒそれぞれの方向から、重力回転軸ベクトルＶｇｒが示す回転軸方向に最も近いものを選択し（ステップ９５）、選択された方向を示すベクトルが横方向ベクトルＶｒであるか否かを判断する（ステップ９６）。そして、ＣＰＵ１０は、横方向ベクトルＶｒが選択された場合、次のステップ９７に処理を進める。一方、ＣＰＵ１０は、上方向ベクトルＶｔまたは前方向ベクトルＶｆが選択された場合、次のステップ９９に処理を進める。
【０１３９】
ステップ９７において、ＣＰＵ１０は、ＣＰＵ１０は、側面突入状態に設定して、次のステップに処理を進める。具体的には、ＣＰＵ１０は、側面突入状態フラグデータＤｇに記憶されている側面突入状態フラグＦをＯＮに設定する。
【０１４０】
次に、ＣＰＵ１０は、カメラベクトルデータＤｃ２に格納されているカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺを参照して、それぞれの値をそれぞれカメラベクトルＶｃＸｏ、ＶｃＹｏ、およびＶｃＺｏに代入して突入時カメラベクトルデータＤｃ３に格納し（ステップ９８）、次のステップ９９に処理を進める。
【０１４１】
ステップ９９において、重力ベクトルデータＤｅに格納されている重力ベクトルＶｇを参照して、その値を重力ベクトルＶｇｏに代入して前回重力ベクトルデータＤｆに格納し、当該サブルーチンによる処理を終了する。
【０１４２】
図１８に戻り、ステップ５５の側面突入検出処理の後、ＣＰＵ１０は、描画処理を行い（ステップ５７）、次のステップに処理を進める。具体的には、ＣＰＵ１０は、上記ステップ４１で設定された仮想カメラＣから見たゲームフィールドＧＦおよびプレイヤキャラクタＰＣ等の様子を示すゲーム画像を作成し、モニタ２に表示する。
【０１４３】
次に、ＣＰＵ１０は、ゲームを終了するか否かを判断する（ステップ５８）。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。ＣＰＵ１０は、ゲームを終了しない場合に上記ステップ４１に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【０１４４】
上述した処理手順によって、側面突入状態において設定されるプレイヤキャラクタＰＣの移動方向について説明する。上述したフローチャートから明らかなように、プレイヤキャラクタＰＣが側面突入状態に移行してからプレイヤの方向入力変化が生じる前までの期間は、上記ステップ４６の処理によってプレイヤキャラクタＰＣの移動方向が決定される。ここで、上記ステップ４６の移動方向決定処理においては、プレイヤキャラクタＰＣが側面突入状態に設定された時点のカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺに基づいて移動ベクトルＶｍが算出される。つまり、上記期間中に仮想カメラＣが移動または回転しても、当該移動や回転が行われてない状態を仮定して移動ベクトルＶｍが算出される。したがって、上記期間中に仮想カメラＣがその視線方向を中心に回転した場合、一時的にプレイヤの方向入力の方向とプレイヤキャラクタＰＣの移動方向とが逆になることがあり得る。
【０１４５】
例えば、図１４〜図１６を用いて説明したように、上記期間中に仮想カメラＣｃがその視線方向を中心に１８０°回転する場合を考える。この場合、モニタ２に表示されるゲーム画像が仮想カメラＣの回転に応じて上下反転して表示される（例えば、図１４に示すゲーム画像から図１６に示すゲーム画像への変化）。そして、上記期間中においては、上記仮想カメラＣの回転後にスティック７８ａを下方向（方向Ｓｄ）に傾倒しているとき、図１６に示すようにプレイヤキャラクタＰＣが仮想カメラＣから遠ざかる方向（上側に記載された方向Ｍｄ）への移動する。したがって、スティック７８ａを下方向へ傾倒する方向入力操作が表示領域の上方向となる移動指示となるため、プレイヤの方向入力の方向とプレイヤキャラクタＰＣの移動方向とが逆になっている。
【０１４６】
ここで、上記仮想カメラＣの回転前にスティック７８ａを下方向（方向Ｓｄ）に傾倒しているとき、図１４に示すようにプレイヤキャラクタＰＣが仮想カメラＣから遠ざかる仮想ゲーム空間の手前から奥へ向かう方向（方向Ｍｄ）への移動している。そして、プレイヤが同じ方向入力を継続（つまり、方向Ｓｄへの方向入力）して仮想カメラＣが回転したときも（図１６の状態）、プレイヤキャラクタＰＣが仮想カメラＣから遠ざかる仮想ゲーム空間の手前から奥へ向かう方向（上側に記載された方向Ｍｄ）への移動する。したがって、上記期間中にプレイヤが同じ方向入力を継続していれば、当該期間中に仮想カメラＣが回転してもプレイヤキャラクタＰＣの移動方向が変わることなく継続されることになる。つまり、上記期間中にプレイヤキャラクタＰＣを同じ方向に移動させ続けたい場合、仮想カメラＣの状態によらず同じ操作を継続すればいいため、プレイヤにとって非常に分かりやすい操作となる。
【０１４７】
また、プレイヤキャラクタＰＣの移動方向を変更したり停止させたりしたい場合、スティック７８ａの傾倒状態を変化させると上記側面突入状態が解除されるため、現時点の仮想カメラＣの位置および撮像角度に基づいた移動方向に変更される。例えば、仮想カメラＣの回転後（図１６の状態）にスティック７８ａの傾倒状態を変化させると、プレイヤの方向入力に直感的に対応付けられた方向にプレイヤキャラクタＰＣの移動方向が変更される（下側に記載された方向Ｍｕ、Ｍｄ、Ｍｌ、およびＭｒ）。したがって、プレイヤが改めてプレイヤキャラクタＰＣの移動方向を変化させる場合は、方向入力に応じて直感的に把握できる方向にプレイヤキャラクタＰＣが移動することになる。
【０１４８】
このように、本実施形態に係る画像処理プログラムを実行する装置は、重力方向（法線方向）が様々な方向に設定されているゲームフィールドを用いた仮想ゲーム空間において、直感的な方向入力操作が実現可能となり、プレイヤに操作の混乱を与えることもない。また、このような仮想ゲーム空間環境において、所定条件を満たすときに仮想カメラを回転させる状況であっても、直感的な方向入力操作が実現可能となり、プレイヤに操作の混乱を与えることもない。
【０１４９】
なお、上述した説明では、位置ＰＰにおけるゲームフィールドＧＦの法線ベクトルＶｗと、カメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺとを用いて、移動ベクトルＶｍを算出しているが、他のベクトルとカメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺとを用いて、移動ベクトルＶｍを算出してもかまわない。例えば、位置ＰＰに設定されているゲームフィールドＧＦの重力ベクトルＶｇに対する反対方向ベクトル（反重力ベクトル）を用いても、同様に移動ベクトルＶｍを算出することができることは言うまでもない。また、法線ベクトルＶｗおよび反重力ベクトルを適宜調整することによって、移動ベクトルＶｍを算出するようにしてもよい。これら法線ベクトルＶｗや反重力ベクトルは、何れもプレイヤキャラクタＰＣの直上方向を示すベクトルであり、仮想ゲーム空間内の位置ＰＰに応じて定められるプレイヤキャラクタＰＣの姿勢（起立方向）を決定するため姿勢制御ベクトルとして用いることができるパラメータである。したがって、プレイヤキャラクタＰＣの起立方向を示すベクトルであれば、他の手法により本発明の直上ベクトルが定められてもよい。なお、これら法線ベクトルＶｗや反重力ベクトルが、本発明の直上ベクトルの一例に相当する。
【０１５０】
また、上述した説明では、サブユニット７６に設けられたスティック７８ａを用いた方向入力操作に応じて、プレイヤキャラクタＰＣを移動させる一例を用いたが、他の操作部を用いてプレイヤキャラクタＰＣを移動させてもかまわない。例えば、コアユニット７０に設けられた十字キー７２ａを用いた方向入力操作に応じて、プレイヤキャラクタＰＣを移動させてもかまわない。この場合、コアユニット７０のみでコントローラ７を構成してゲーム装置本体５に操作情報を与える態様でも、本発明を実現することができる。また、コントローラに方向入力可能な他の操作部を搭載し、当該操作部を用いた方向入力操作に応じて、プレイヤキャラクタＰＣを移動させてもかまわない。
【０１５１】
また、コアユニット７０やサブユニット７６に与えられる方向入力操作に応じた処理を行う据置型のゲーム装置本体５に本願発明を適用した例を説明したが、携帯ゲーム装置にも適用することができる。例えば、携帯ゲーム装置の本体に搭載された方向入力操作可能な操作部を用いて、表示装置に表示されたオブジェクトを移動させる。このように本願発明を適用することで、携帯ゲーム装置等でゲームを行うには好適である。
【０１５２】
また、上述した説明では、据置型や携帯型のゲーム装置に本願発明を適用した例を説明したが、入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置や携帯型の情報処理装置にも適用することができる。例えば、前者の情報処理装置では、入力装置の操作部から出力されるキーデータに応じて、情報処理装置が表示しているオブジェクトを移動する等、入力装置に与えられる操作に基づいて様々な処理を行うことができる。また、後者の情報処理装置は、本体に操作部を搭載し、当該操作部から出力されるキーデータに応じた処理を実行する情報処理装置であればよく、例えば一般的なパーソナルコンピュータ、携帯電話機、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）等のデバイスにも適用することができる。
【０１５３】
例えば、後者の情報処理装置の一例として、他の電話機との間で無線通信する通信部を備えた携帯電話機の場合には、携帯電話機本体に各種操作ボタンが搭載される。そして、携帯電話機に搭載された操作ボタンからの出力値を用いて携帯電話機の表示画面に表示されたオブジェクトの移動制御を行う。このように本願発明を適用することで、携帯電話機等でゲームや操作を行うには好適である。
【０１５４】
また、上述した説明では、コアユニット７０およびサブユニット７６とゲーム装置本体５とが無線通信によって接続された態様を用いたが、コアユニット７０またはサブユニット７６とゲーム装置本体５とがケーブルを介して電気的に接続されてもかまわない。この場合、コアユニット７０またはサブユニット７６に接続されたケーブルをゲーム装置本体５の接続端子に接続する。
【０１５５】
また、上述したコアユニット７０およびサブユニット７６の形状や、それらに設けられている操作部７２の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。
【０１５６】
また、本発明の画像処理プログラムやゲームプログラムは、光ディスク４等の外部記憶媒体を通じてゲーム装置本体５に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体５に供給されてもよい。また、画像処理プログラムやゲームプログラムは、ゲーム装置本体５内部の不揮発性記憶装置に予め記録されていてもよい。なお、画像処理プログラムやゲームプログラムを記憶する情報記憶媒体としては、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【０１５７】
また、プレイヤの操作方向を入力するための手法として、加速度センサ７０１および７６１や撮像情報演算部７４から得られるデータを利用して、プレイヤの操作方向を演算するようにしてもよい。例えば、加速度センサ７０１および７６１や撮像情報演算部７４から得られるデータを利用すれば、プレイヤがコアユニット７０やサブユニット７６の本体を動かしている方向や本体の姿勢等を算出することが可能であり、これらの方向や姿勢の算出結果をプレイヤの操作方向として用いることも可能である。この場合、キーデータに代えて、加速度センサ７０１および７６１や撮像情報演算部７４からのデータを用いて、プレイヤの操作方向を示す方向ベクトルを算出して利用するようにすればよい。ここで、コントローラ７から取得されるデータは２次元のベクトルではないので、所定の演算によって２次元のベクトルを算出するようにしてもよいし、加速度センサ７０１および７６１や撮像情報演算部７４からのデータをそのままメインメモリに格納しておいて、ステップ９０で移動ベクトルＶｍを算出する際に、当該２次元のベクトルを算出して利用するようにしてもよい。
【０１５８】
以上、本発明を詳細に説明してきたが、上述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【産業上の利用可能性】
【０１５９】
本発明に係る画像処理プログラムおよび画像処理装置は、ユーザの方向入力に直感的に対応付けられた方向に表示装置に表示されたオブジェクトを移動させることができ、ゲームコントローラ等の入力装置に与えられる方向入力に応じて表示オブジェクトを移動させる処理等を行うプログラムおよび装置として有用である。
【図面の簡単な説明】
【０１６０】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体５の機能ブロック図
【図３】図１のコントローラ７の外観構成を示す斜視図
【図４】図３のコアユニット７０の上面後方から見た斜視図
【図５】図４のコアユニット７０を下面前方から見た斜視図
【図６】図３のコアユニット７０の上筐体を外した状態を示す斜視図
【図７】図５のコアユニット７０の下筐体を外した状態を示す斜視図
【図８】図３のサブユニット７６の一例を示す斜視図
【図９】図８のサブユニット７６の上筐体を外した状態を示す斜視図
【図１０】図３のコントローラ７の構成を示すブロック図
【図１１】ゲームフィールドＧＦ上に配置されたプレイヤキャラクタＰＣに対する操作方向の一例を説明するための図
【図１２】ゲームフィールドＧＦａ上にプレイヤキャラクタＰＣａが配置されたときのゲーム画像および操作方向の一例を示す図
【図１３】ゲームフィールドＧＦｂ上にプレイヤキャラクタＰＣｂが配置されたときのゲーム画像および操作方向の一例を示す図
【図１４】ゲームフィールドＧＦｃ上にプレイヤキャラクタＰＣｃが配置されたときのゲーム画像および操作方向の一例を示す図
【図１５】ゲームフィールドＧＦｃ上に配置されたプレイヤキャラクタＰＣｃに対して、仮想カメラＣの方向を変化させたときの操作方向の一例を説明するための図
【図１６】仮想カメラＣの方向を変化させたとき、ゲームフィールドＧＦｃ上にプレイヤキャラクタＰＣｃが配置されたゲーム画像および操作方向の一例を示す図
【図１７】ゲーム装置本体５のメインメモリに記憶される主なデータを示す図
【図１８】ゲーム装置本体５において実行されるゲーム処理の流れを示すフローチャート
【図１９】図１８におけるステップ４６および５１の移動方向算出処理の詳細な動作を示すサブルーチン
【図２０】図１８におけるステップ５５の側面突入検出処理の詳細な動作を示すサブルーチン
【図２１】カメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺと、法線ベクトルＶｗと、操作ベクトルＶｓとが設定された一例について説明するための図
【図２２】カメラベクトルＶｃＸ、ＶｃＹ、およびＶｃＺと、法線ベクトルＶｗと、操作ベクトルＶｓとが設定された他の例について説明するための図
【図２３】プレイヤキャラクタＰＣに設定されるベクトルＶｔ、Ｖｆ、およびＶｒの一例を説明するための図
【符号の説明】
【０１６１】
１…ゲームシステム
２…モニタ
２ａ、７０６…スピーカ
３…ゲーム装置
４…光ディスク
５…ゲーム装置本体
１０…ＣＰＵ
１１…システムＬＳＩ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２、２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
３１…入出力プロセッサ
３２…ＧＰＵ
３３…ＤＳＰ
３４…ＶＲＡＭ
３５…内部メインメモリ
７…コントローラ
７０…コアユニット
７１、７７…ハウジング
７２、７８…操作部
７３、７９１…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１、７６１…加速度センサ
７０２…ＬＥＤ
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
７６…サブユニット
７９…接続ケーブル
８…マーカ
【図１】
0004919887.tif 000002
【図２】
0004919887.tif 000003
【図３】
0004919887.tif 000004
【図４】
0004919887.tif 000005
【図５】
0004919887.tif 000006
【図６】
0004919887.tif 000007
【図７】
0004919887.tif 000008
【図８】
0004919887.tif 000009
【図９】
0004919887.tif 000010
【図１０】
0004919887.tif 000011
【図１１】
0004919887.tif 000012
【図１２】
0004919887.tif 000013
【図１３】
0004919887.tif 000014
【図１４】
0004919887.tif 000015
【図１５】
0004919887.tif 000016
【図１６】
0004919887.tif 000017
【図１７】
0004919887.tif 000018
【図１８】
0004919887.tif 000019
【図１９】
0004919887.tif 000020
【図２０】
0004919887.tif 000021
【図２１】
0004919887.tif 000022
【図２２】
0004919887.tif 000023
【図２３】
0004919887.tif 000024