(ゲームシステムの全体構成)
図1を参照して、本発明の一実施形態に係るゲーム装置を含むゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置3、光ディスク4、コントローラ5、およびマーカ部6を含む。本システムは、コントローラ5を用いたゲーム操作に基づいてゲーム装置3でゲーム処理を実行するものである。
ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられ、データの読み取りが可能な情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるためのゲームプログラムが記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されているゲームプログラムを読み出して実行することによってゲーム処理を実行する。なお、ゲームプログラムはゲーム装置3の内部メモリ(不揮発であることが好ましいが揮発性でもよい)に予め記憶されていてもよいし、ゲーム装置3は、ゲーム装置3とネットワークを介して接続される所定のサーバ(または他のゲーム装置)からゲームプログラムをダウンロードして内部メモリに記憶するようにしてもかまわない。
ゲーム装置3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ2の画面の周辺(図1では画面の上側)には、マーカ部6が設置される。マーカ部6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部6はゲーム装置3に接続されており、ゲーム装置3はマーカ部6が備える各赤外LEDの点灯を制御することが可能である。
コントローラ5は、自機に対して行われた操作の内容を示す操作データをゲーム装置3に与える入力装置である。コントローラ5とゲーム装置3とは無線通信によって接続される。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは通信可能に構成されればよく、有線で接続されてもよい。
(ゲーム装置3の内部構成)
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の構成を示すブロック図である。ゲーム装置3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10はシステムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSI11の内部構成については後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
システムLSI11には、入出力プロセッサ11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
入出力プロセッサ(I/Oプロセッサ)11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
また、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
(コントローラ5の構成)
次に、図3〜図7を参照して、コントローラ5について説明する。図3および図4は、コントローラ5の外観構成を示す斜視図である。図3は、コントローラ5の上側後方から見た斜視図であり、図4は、コントローラ5を下側前方から見た斜視図である。
図3および図4において、コントローラ5は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ5に設けられたボタンを押下すること、および、コントローラ5自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
ハウジング31には、複数の操作ボタンが設けられる。図3に示すように、ハウジング31の上面には、十字ボタン32a、1番ボタン32b、2番ボタン32c、Aボタン32d、マイナスボタン32e、ホームボタン32f、プラスボタン32g、および電源ボタン32hが設けられる。一方、図4に示すように、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作ボタン32a〜32iには、ゲーム装置3が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン32hは遠隔からゲーム装置3本体の電源をオン/オフするためのものである。ホームボタン32fおよび電源ボタン32hは、その上面がハウジング31の上面に埋没している。これによって、プレイヤがホームボタン32fまたは電源ボタン32hを誤って押下することを防止することができる。
ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、コントローラ5に他の機器(例えば、他のコントローラ)を接続するために利用される。
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ5の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
また、コントローラ5は撮像情報演算部35(図6)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ49(図5)からの音を外部に放出するための音抜き孔31aが形成されている。
次に、図5および図6を参照して、コントローラ5の内部構造について説明する。図5および図6は、コントローラ5の内部構造を示す図である。なお、図5は、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6は、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6に示す斜視図は、図5に示す基板30を裏面から見た斜視図となっている。
図5において、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ49等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図6参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図7)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
一方、図6において、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ48が設けられている。バイブレータ48は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ48が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ48は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ48がコントローラ5の中心よりも端側に配置することによって、バイブレータ48の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5および図6に示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ49に音声信号を出力するアンプ等を備えている。
なお、図3〜図6に示したコントローラ5の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はZ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
図7は、コントローラ5の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、コネクタ33、撮像情報演算部35、通信部36、および加速度センサ37を備えている。コントローラ5は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置3へ送信するものである。
操作部32は、上述した各操作ボタン32a〜32iを含み、各操作ボタン32a〜32iに対する入力状態(各操作ボタン32a〜32iが押下されたか否か)を示す操作ボタンデータを通信部36のマイコン42へ出力する。
撮像情報演算部35は、撮像手段が撮像した画像データを解析し、画像内で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ5の動きでも追跡して解析することができる。
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ5の前方から入射する光から赤外線のみを通過させる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDセンサのような固体撮像素子であり、レンズ39が集光した赤外線を受光して画像信号を出力する。ここで、テレビ2の表示画面近傍に配置されるマーカ部6のマーカ6Rおよび6Lは、テレビ2の前方に向かって赤外光を出力する赤外LEDで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、マーカ6Rおよび6Lの画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ6Rおよび6L)の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、3軸または2軸の加速度センサは、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。なお、加速度センサ37は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるXYZ座標系における3次元のベクトル(AX,AY,AZ)として表される。以下では、加速度センサ37によって検出される3軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
加速度センサ37が検出した加速度を示すデータ(加速度データ)は、通信部36へ出力される。なお、加速度センサ37が検出した加速度は、コントローラ5自体の向き(姿勢)や動きに対応して変化するので、ゲーム装置3は加速度データを用いてコントローラ5の向きや動きを算出することができる。
なお、加速度センサ37から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラ5のプロセッサ(例えばマイコン42)等のコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ37を搭載するコントローラ5が静止状態であることを前提としてコンピュータ側の処理が実行される場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合)、コントローラ5が現実に静止状態であれば、検出された加速度に基づいてコントローラ5の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ37の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサ37の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ37からの出力に基づいてコントローラ5の傾き角度を算出してもよいし、当該傾き角度を算出せずに、コントローラ5の傾き方向を算出するようにしてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾きまたは姿勢を判定することができる。
一方、コントローラ5が動的な状態(コントローラ5が動かされている状態)であることを前提とする場合には、加速度センサ37は重力加速度に加えてコントローラ5の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ5の動き方向を知ることができる。また、コントローラ5が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ5の傾きを知ることが可能である。なお、他の実施例では、加速度センサ37は、内蔵の加速度検出手段で検出された加速度信号をマイコン42に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ37が静的な加速度(例えば、重力加速度)を検出するために用いられる場合、加速度信号を傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
操作部32、撮像情報演算部35、および加速度センサ37からマイコン42へ出力された各データ(操作ボタンデータ、マーカ座標データ、および加速度データ)は、一時的にメモリ43に格納される。これらの各データは、上記操作データとしてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3の無線コントローラモジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変換されてコントローラ5から送信される。微弱電波信号はゲーム装置3側の無線コントローラモジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいてゲーム処理を行う。なお、通信部36から無線コントローラモジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で各操作データをゲーム装置3の無線コントローラモジュール19へ出力する。
上記コントローラ5を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作を行うことができる。例えば、プレイヤは、コントローラ5を動かすゲーム操作、および、コントローラ5によってテレビ2の画面上の位置を指し示すゲーム操作を行うことができる。
(ゲーム装置における処理の概要)
以下、ゲーム装置3で実行される処理の概要について説明する。以下では、プレイヤが仮想の3次元空間においてプレイヤキャラクタを操作して遊ぶゲームにおけるゲーム処理を説明する。
図8は、本実施形態におけるゲームのゲーム画面の一例を示す図である。図8に示すように、本ゲームにおける仮想の3次元空間(ゲーム空間)には、地面オブジェクト51および壁オブジェクト52が配置される。地面オブジェクト51および壁オブジェクト52は、ゲーム空間内に固定して配置される地形オブジェクトである。なお、ゲーム空間における位置を表すためのxyz座標系(ワールド座標系)が定義されており、ここでは地面オブジェクト51はxz平面に平行に配置されている。また、壁オブジェクト52はxy平面に平行に配置されている。なお、図8では3次元空間における方向を示すためにxyz座標軸を記載しているが、実際には座標軸は表示されない。
ゲーム空間にはさらに、プレイヤの操作対象であるプレイヤオブジェクト53が登場する。プレイヤオブジェクト53は、コントローラ5に対する操作入力に従って、ゲーム空間を移動したり、ジャンプしたり、飛んだりすることができる。したがって、プレイヤオブジェクト53は、ジャンプしたり飛んだりすることにより、地面オブジェクト51および壁オブジェクト52から離れて宙に浮いた状態となることがある。
また、本実施形態におけるゲームでは、ゲーム空間には重力方向が定義される。つまり、ゲーム装置3は、仮想的な重力を考慮してプレイヤオブジェクト53によるジャンプ等の動作や他のオブジェクトの挙動を計算する。なお、本実施形態においては、重力方向は、常に一定ではなく、ゲームの状況に応じて変化するものとする。例えば、プレイヤオブジェクト53がゲーム空間のある地点を通過したことによって、重力方向が90°変化し、変化前に壁であった場所を歩けるようになったり、変化前の地面が壁となったりする。また、本実施形態においては、ゲーム空間における位置によって重力方向が異なる場合がある。例えば、地面オブジェクト51は星のような大きな球体であってもよく、このとき、地面(球体の表面)での重力方向は球体の中心を向くように設定されてもよい。
以上に説明したようなゲームにおいて、プレイヤは、コントローラ5を用いて3次元空間内のプレイヤオブジェクト53を操作し、ゴール地点に到達する、あるいは、特定の敵を倒す等の所定の課題を達成することを目的としてゲームを進行する。
上記のような3次元空間内でプレイヤオブジェクト53が動作するゲームにおいて、プレイヤオブジェクト53が例えばジャンプ中や飛行中であって宙に浮いた状態にある場合、プレイヤは、3次元空間におけるプレイヤオブジェクト53の位置を正確に把握しづらい。つまり、宙に浮いた状態では、xz平面上におけるプレイヤオブジェクト53の位置、および、xy平面上におけるプレイヤオブジェクト53の位置がわかりづらい。プレイヤオブジェクト53の正確な位置が把握できなければ、プレイヤは、プレイヤオブジェクト53をどのように操作すべきか判断することができないので、プレイヤオブジェクト53を正確に操作することができないおそれがある。
そこで、本実施形態では、ゲーム装置3は、プレイヤオブジェクト53の3次元空間における位置をプレイヤが把握しやすくなるように、2方向にプレイヤオブジェクト53の影を描画する。具体的には図8に示すように、ゲーム空間には第1の影54および第2の影55が描画される。
第1の影54は、地面オブジェクト51に対してプレイヤオブジェクト53の位置を重力方向に投影した位置に描画される。地面オブジェクト51上における第1の影54の位置によって、プレイヤは、重力方向に垂直なxz平面におけるプレイヤオブジェクト53の位置を直感的に把握することができる。さらに、第1の影54とプレイヤオブジェクト53との距離によって、プレイヤは、地面オブジェクト51からプレイヤオブジェクト53までの距離を直感的に把握することができる。
第2の影55は、壁オブジェクト52に対してプレイヤオブジェクト53の位置を重力方向に垂直な方向に投影した位置に描画される。ここでは、第2の影55が投影される方向、すなわち、第2の影55を描画するためにプレイヤオブジェクトを投影する方向を「投影方向」と呼ぶ。図8では、投影方向はz軸正方向であるとする。壁オブジェクト52上における第2の影55の位置によって、プレイヤは、投影方向に垂直なxy平面におけるプレイヤオブジェクト53の位置を直感的に把握することができる。さらに、第2の影55とプレイヤオブジェクト53との距離によって、プレイヤは、壁オブジェクト52からプレイヤオブジェクト53までの距離を直感的に把握することができる。
以上のように、本実施形態によれば、ゲーム装置3は、プレイヤオブジェクトの影として、異なる2方向に投影される2つの影を描く。これによって、3次元空間におけるプレイヤオブジェクトの立体的な位置を直感的にわかりやすくプレイヤに理解させることができる。なお、2つの影を投影する方向を略垂直な方向とすることによって、2つの影を投影する方向が近い場合に比べて、3次元空間におけるオブジェクトの位置をプレイヤに認識させやすくなる。
なお、本実施形態では、ゲーム装置3は、2つの影を常に描画するのではなく、ゲーム空間において予め設定される影描画エリア内にプレイヤオブジェクト53が位置する場合のみ2つの影を描画する。そして、プレイヤオブジェクト53が影描画エリアの外に位置する場合、第1の影のみを描画する。影描画エリアは、第2の影が投影される投影面となる地形オブジェクト(例えば図8に示す壁オブジェクト52)が存在する場所に設定される。図8を例にとって説明すると、壁オブジェクト52の前方に影描画エリアが設定され、壁オブジェクト52の後方や側方には影描画エリアが設定されない。また、影描画エリアは、例えば、プレイヤオブジェクト53が宙に浮いている場合のように、3次元空間における位置が特に把握しづらいことが想定される場所に設定されてもよい。例えば、プレイヤオブジェクト53が所定の条件(アイテム取得)を満たした場合にのみ空を飛べるようになる場合、所定の条件を満たすことができる場所付近(アイテムがある場所の付近)に影描画エリアを設定してもよい。以上のように、ゲーム空間内に影描画エリアを設定することによって、第2の影が不要な場合には第2の影を描画する処理を省略することができるので、ゲーム装置3の処理負担を軽減することができる。例えば、影が投影される投影面となるオブジェクトがないために影を描画する処理が無駄になる場合や、第2の影がなくてもプレイヤオブジェクト53の位置の把握が容易であると想定される場合等には、第2の影を描画する処理を省略することにより、ゲーム装置3の処理負担を軽減することができる。
なお、本実施形態では、第1の影と第2の影とは、表示形態が互いに異なるように描画される。具体的には、第1の影は、プレイヤオブジェクト53の形状を地面オブジェクト51に投影した形状となっているのに対して、第2の影は、円形(または楕円形)であり、各影の形状は異なっている。このように、2つの影の表示形態を変えることによって、プレイヤは2つの影を区別して認識することができる。これによって、プレイヤは、重力方向(第1の影が投影される方向)を明確に認識することができる。本ゲームのように、ゲーム状況に応じて重力方向が変化するゲームにとっては、2つの影の表示形態を異ならせることによって重力方向をプレイヤにわかりやすくすることは特に有効である。
(ゲーム処理の詳細)
以下、図9〜図14を参照して、本実施形態におけるゲーム処理の詳細について説明する。図9は、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図9に示すように、メインメモリには、ゲームプログラム60、操作データ61、およびゲーム処理用データ62等が記憶される。なお、メインメモリには、図9に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
ゲームプログラム60は、本実施形態に係る画像処理プログラムの一例であり、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。
操作データ61は、コントローラ5からゲーム装置3へ送信されてくる操作データである。操作データ61には、各操作ボタン32a〜32iに対する入力状態を示す操作ボタンデータ、上記撮像情報演算部35によって算出されるマーカ座標を示すマーカ座標データ、および、加速度センサ37によって検出される加速度ベクトルを示す加速度データが含まれる。上述したように、操作データはコントローラ5からゲーム装置3へ1/200秒に1回の割合で送信されるので、メインメモリに記憶される操作データはこの割合で更新される。メインメモリには、最新の(最後に取得された)操作データのみが記憶されればよい。
ゲーム処理用データ62は、後述するゲーム処理(図12)において用いられるデータである。ゲーム処理用データ62は、現在エリアデータ63、オブジェクト位置データ64、重力方向データ65、第1交点位置データ66、第2交点位置データ67、第1影画像データ68、および第2影画像データ69を含む。
現在エリアデータ63は、プレイヤオブジェクトが現在存在するフィールドに設定されている影描画エリアに関する影描画エリアデータを含むデータである。ここで、フィールドとは、地形オブジェクト等によって構成される1つのゲーム空間であり、本ゲームにおいては、複数のゲーム空間(フィールド)が用意されているものとする。また、影描画エリアデータとは、影描画エリアに関する各種情報を示すデータである。
図10は、現在エリアデータの一例を示す図である。図10に示すように、現在エリアデータに含まれる影描画エリアデータは、1つの影描画エリアに関するエリアID、フィールドID、エリア位置、エリアサイズ、投影方向、および最大距離の各情報を示すデータである。なお、図10に示す現在エリアデータは、フィールドIDが“001”であるフィールドに設定される影描画エリアに関する影描画エリアデータを含んでいる。本実施形態では、各フィールドに設定される各影描画エリアに関する影描画エリアデータは光ディスク4に記憶されている。プレイヤオブジェクトが存在するフィールドが変更されると、変更後のフィールドに設定される影描画エリアに関する影描画エリアデータが光ディスク4から読み出され、新たな現在エリアデータ63としてメインメモリに記憶される。以下、影描画エリアデータにより示される各情報について説明する。
エリアIDは、影描画エリアを識別するための番号であり、影描画エリアに固有の番号である。また、フィールドIDは、影描画エリアが存在するフィールドを識別するための番号であり、フィールドに固有の番号である。
図11は、ゲーム空間内に設定される影描画エリアの一例を示す図である。図11はゲーム空間の一部を表しており、図11では壁オブジェクト52の前方に影描画エリア71(図11において太線の点線で示される領域)が設定されている。図11に示されるように、本実施形態では、影描画エリアは直方体の領域であり、各辺がx軸、y軸、およびz軸のいずれかと平行となるように設定される。
エリア位置は、影描画エリアが設定される位置であり、本実施形態では、直方体である影描画エリアの中心位置P(図11参照)である。具体的には、エリア位置は、上記ワールド座標系の座標値によって表される。例えば図11においては、エリアIDが“001”である影描画エリアに対して“(350,550,250)”という座標値が関連付けられている。また、上記エリアサイズは、影描画エリアの大きさである。具体的には、エリアサイズは、直方体である影描画エリアの3辺の長さそれぞれの1/2の長さを表す。つまり、影描画エリアは、エリア位置により示される座標値を中心に、エリアサイズにより示される長さの幅を有する領域として特定される。例えば図11においては、エリアIDが“001”である影描画エリアに対して“(500,800,500)”という3つの値が関連付けられている。したがって、エリアIDが“001”である影描画エリアは、“(350,550,250)”を中心に、x軸方向に500,y軸方向に800、z軸方向に500の幅を有する領域、すなわち、“−150≦x≦850,−250≦y≦1350,−250≦z≦750”で表される領域となる。以上のエリア位置およびエリアサイズの情報によって、ゲーム空間内における影描画エリアの範囲が特定される。
投影方向は、影描画エリアにおいて第2の影が投影される方向である。具体的には、この投影方向は、ゲーム空間内における方向を示すベクトル(図11に示すベクトルV)として表される。本実施形態では、当該ベクトルを単位ベクトルとして表す。例えば、投影方向が図11に示すベクトルVの方向である場合、投影方向はz軸負方向、すなわち、(0,0,−1)と表される。また、図10に示されるように、本実施形態では影描画エリア毎に投影方向が個別に設定されるので、ゲーム開発者は、第2の影が投影される方向を影描画エリア毎に自由に設定することが可能である。
最大距離は、第2の影が投影される最大の距離である。つまり、プレイヤオブジェクトから投影方向に向かって最大距離までの範囲内に、第2の影を描くオブジェクト(例えば壁オブジェクト)が存在する場合、第2の影が描画される。
図9の説明に戻り、オブジェクト位置データ64は、ゲーム空間内におけるプレイヤオブジェクトの位置を示す。具体的には、当該位置は、上記ワールド座標系の座標値によって表される。プレイヤオブジェクトの位置は、プレイヤオブジェクトの所定部分の位置(例えば、体の中心の位置)に設定される。なお、ゲーム装置3は、プレイヤの操作性等を考慮して、プレイヤオブジェクトの位置を適宜変化させるようにしてもよい。例えば、プレイヤオブジェクトの外形形状が変形する場合には、外形形状に合わせてプレイヤオブジェクトの位置を適宜変更するようにしてもよい。より具体的には、例えばプレイヤオブジェクトが体を丸めて回転しながらジャンプしている場合には、プレイヤオブジェクトの外形形状が球体に近くなる。この場合、球体の中心付近の位置をプレイヤオブジェクトの位置としてオブジェクト位置データ64を設定してもよい。
重力方向データ65は、現時点においてプレイヤオブジェクトに加えられる(仮想の)重力の方向を示す。この重力の方向は、上記投影方向と同様、ゲーム空間内における方向を示す単位ベクトルとして表される。本実施形態では、第1の影は、プレイヤオブジェクトを重力方向に投影した位置に描画されるので、重力方向は、第1の影が投影される方向である。
第1交点位置データ66は、第1の影の位置、すなわち、プレイヤオブジェクトから重力方向に延ばした直線と地形オブジェクトとの交点の位置を示す。第2交点位置データ67は、第2の影の位置、すなわち、プレイヤオブジェクトから投影方向に延ばした直線と地形オブジェクトとの交点の位置を示す。
第1影画像データ68は、第1の影の画像データである。本実施形態では、第1の影は、プレイヤオブジェクトの外形形状を重力方向に投影した形状であり、予め定められた色(例えば黒色)である。また、第2影画像データ69は、第2の影の画像データである。本実施形態では、第2の影は、予め定められた形状であり、プレイヤオブジェクトから第2の影までの距離に基づいて決められる色(濃さ)である。第1の影および第2の影の画像の描画方法については後述する。
次に、ゲーム装置3において行われる処理の詳細を、図12〜図14を用いて説明する。図12は、ゲーム装置3において実行される処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図12に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。なお、図12に示すゲーム処理は、CPU10およびGPU11bの協働動作として行われる。以下では、プレイヤオブジェクトの影を生成して表示する処理を中心にゲーム処理を説明する。
まず、ステップS1において、CPU10は、ゲームに関する初期化処理を実行する。具体的には、CPU10は、プレイヤオブジェクト等のゲームキャラクタのデータ、および、予め定められたフィールド(ゲーム開始時にプレイヤオブジェクトが位置するフィールド)を構築するための地形オブジェクトのデータ等を光ディスク4から読み込む。そして、読み込んだデータを用いて当該フィールドの3次元空間を構築し、プレイヤオブジェクトや他のオブジェクトを当該フィールドの初期位置に配置する処理等を実行する。また、ステップS1においては、上記フィールドに設定される影描画エリアに関する影描画エリアデータが光ディスク4から読み込まれ、現在エリアデータ63としてメインメモリに記憶される。
上記ステップS1の後、ステップS2〜S14の処理ループが、ゲームが実行される間繰り返し実行される。なお、1回の当該処理ループは、1フレーム時間(例えば1/60秒)に1回の割合で実行される。
ステップS2において、CPU10は操作データを取得する。すなわち、コントローラ5から送信されてくる操作データがゲーム装置3で受信され、メインメモリに記憶されるので、CPU10はメインメモリから操作データ61を読み出す。ステップS2の後、ステップS3の処理が実行される。
ステップS3において、CPU10は、プレイヤオブジェクトが存在するフィールドが変更されたか否かを判定する。ここで、本ゲームでは、予め定められたゲーム条件が満たされた場合にフィールドが変更される。予め定められたゲーム条件が満たされた場合とは、例えば、他のフィールドに移動するための入り口にプレイヤオブジェクトが入った場合や、フィールドに存在する所定の敵オブジェクトを倒した場合や、プレイヤオブジェクトが所定のアイテムを取得した場合等である。ステップS3の判定結果が肯定である場合、ステップS4およびS5の処理が実行される。一方、ステップS3の判定結果が否定である場合、ステップS4およびS5の処理がスキップされて、後述するステップS6の処理が実行される。
ステップS4において、CPU10は、変更後の新たなフィールドに設定される影描画エリアに関する影描画エリアデータを光ディスク4から読み出す。読み出された1以上の影描画エリアデータは、現在エリアデータ63としてメインメモリに記憶される。また、ステップS4において、CPU10は、変更後の新たなフィールドを構築するための地形オブジェクトのデータ等を光ディスク4から読み出す。
ステップS4の次のステップS5において、CPU10は、ステップS4で読み出された地形オブジェクトのデータ等を用いて、変更後の新たなフィールドを構築する。また、ステップS5においては、当該新たなフィールドに登場する各オブジェクト(プレイヤオブジェクトや敵オブジェクトを含む)が予め定められた所定位置に配置される。ステップS5の後、ステップS6の処理が実行される。
ステップS6において、CPU10は、フィールド上のオブジェクトを動作させる。つまり、プレイヤによるコントローラ5に対する操作に従ってプレイヤオブジェクトを動作させたり、予め定められたアルゴリズムに従って敵オブジェクトを動作させたりする。プレイヤオブジェクトの動作は、具体的には、ステップS2で取得された操作データに基づいて決定される。また、このとき、ゲーム空間におけるプレイヤオブジェクトの位置が算出され、当該位置を示すデータがオブジェクト位置データ64としてメインメモリに記憶される。ステップS6の後、ステップS7の処理が実行される。
ステップS7において、CPU10は、プレイヤオブジェクトに加えられる仮想的な重力の方向を算出する。本実施形態では、重力方向はゲーム状況に基づいて決定される。例えば、重力方向はプレイヤオブジェクトの現在位置に基づいて決定される。すなわち、ゲーム空間の各位置とその位置における重力方向との対応は予め定められており、当該対応を示すデータが光ディスク4に記憶されている。CPU10は、当該対応を示すデータを参照して、プレイヤオブジェクトの現在位置に対応する重力方向を特定する。なお、プレイヤオブジェクトの現在位置は、メインメモリに記憶されているオブジェクト位置データ64により示される。また、例えば、重力方向は、プレイヤオブジェクトがゲーム空間のある地点を通過したことによって変化したり、予め定められた所定のゲーム条件(例えば、プレイヤオブジェクトがあるアイテムを取得する等)が満たされた場合に変化したりするように決定されてもよい。ステップS7で算出された重力方向を示すデータは、重力方向データ65としてメインメモリに記憶される。
ステップS7の次のステップS8において、CPU10は、第1影描画処理を実行する。第1影描画処理は、重力方向に投影される影である第1の影を描画するための処理である。以下、図13を参照して、第1影描画処理の詳細を説明する。
図13は、図12に示す第1影描画処理(ステップS8)の流れを示すフローチャートである。第1影描画処理においては、まずステップS21において、CPU10は、プレイヤオブジェクトの位置から重力方向を向く直線を算出する。すなわち、メインメモリに記憶されているオブジェクト位置データ64および重力方向データ65を参照し、オブジェクト位置データ64により示される座標から、重力方向データ65により示される方向に延びる直線(半直線)を算出する。ステップS21の後、ステップS22の処理が実行される。
ステップS22において、CPU10は、ステップS21で算出された直線に接触する地形オブジェクトがあるか否かを判定する。すなわち、地形オブジェクトを構成するポリゴンのうちに上記直線に接触するものがあるか否かを判定する。ステップS22の判定結果が肯定である場合、ステップS23〜S25の処理が実行される。一方、ステップS22の判定結果が否定である場合、CPU10はステップS23〜S25の処理をスキップして第1影描画処理を終了する。
ステップS23において、CPU10は、ステップS21で算出された直線と、それに接触する地形オブジェクトとの交点の位置を算出する。ステップS23によって、第1の影が投影される位置が算出されたこととなる。算出された交点の位置を示すデータは、第1交点位置データ66としてメインメモリに記憶される。
ステップS23の後に実行されるステップS24およびS25においては、地形オブジェクトに第1の影が付されたゲーム画像が生成される。ここで、ゲーム空間内のオブジェクトに影を付す方法はどのような方法であってもよいが、本実施形態ではテクスチャを用いて影を付す。以下、ステップS24およびS25の処理の詳細を説明する。
ステップS24において、CPU10は、第1の影の画像を生成する。第1の影の画像は、第1の影の形状および色(具体的には、黒色の濃さ)を決定することによって生成することができる。第1の影の形状は、プレイヤオブジェクトを重力方向に向かって投影面(地形オブジェクト)に投影した形状となるように算出される。つまり、第1の影の形状は、重力方向からプレイヤオブジェクトを見た場合の外形形状となる。また、本実施形態では、第1の影の色は予め定められている。ステップS24で生成された第1の影の画像データは、第1影画像データ68としてメインメモリに記憶される。
なお、他の実施形態においては、上記ステップS24においてCPU10は、プレイヤオブジェクトから影が付される位置(ステップS23で算出された交点の位置)までの距離に基づいて第1の影の表示形態を変化させるようにしてもよい。例えば、上記距離が長いほど第1の影の大きさが大きくなるようにしてもよいし、上記距離が長いほど第1の影の色の濃さが薄くなるようにしてもよい。これによれば、プレイヤは上記距離をより理解しやすくなるので、3次元空間におけるプレイヤオブジェクトの位置をより把握しやすくなる。
ステップS25において、CPU10は、ステップS23で算出された交点の位置に第1の影を描画する。すなわち、地形オブジェクトの上記交点の位置に第1の影の画像を重ねて描画する。具体的には、まず、CPU10は、地形オブジェクトについては予め定められた地形オブジェクト用のテクスチャを用いて、ゲーム空間内のオブジェクト(地形オブジェクトおよびプレイヤオブジェクト等)を描画する。次に、ステップS24で生成された第1の影の画像をテクスチャとして用いて地形オブジェクトを描画し、最初に描画された画像に重ねることで、影が付された画像を得る。上記ステップS25の後、CPU10は第1影描画処理を終了する。
なお、上記ステップS25においては、ゲーム装置3は、地形オブジェクト用のテクスチャを用いて地形オブジェクトを描画した後、影の画像をテクスチャとして用いて当該地形オブジェクトを重ねて描画するようにした。ここで、地形オブジェクト上に影を付す処理はどのような処理であってもよく、上記ゲーム処理における方法に限定されない。例えば、他の実施形態においては、ゲーム装置3は、地形オブジェクトに影を付すために、当該地形オブジェクト用のテクスチャと影の画像とを合成する処理を行い、合成したテクスチャを用いて地形オブジェクトを描画するようにしてもよい。また、影の画像をテクスチャとして用いる方法に限らず、影用のポリゴンを地形オブジェクトの上に配置することによって地形オブジェクトの上に影を付すようにしてもよい。
以上に説明した第1影描画処理では、第1の影は、プレイヤオブジェクトが影描画エリア内に存在するか否かにかかわらず常に表示される。また、第1の影は、プレイヤオブジェクトの形状を投影面である地形オブジェクトに投影させた形状である。つまり、第1の影は、3次元空間におけるプレイヤオブジェクトの位置を識別させる目的に加えて、ゲーム空間をより自然に表現する目的で表示されるものである。
図12の説明に戻り、ステップS8の次のステップS9において、CPU10は、現在のフィールド(プレイヤオブジェクトが現在存在しているフィールド)内に設定されている影描画エリアの全てについて第2影描画処理(後述するステップS11)を実行したか否かを判定する。ステップS9の判定結果が肯定である場合、後述するステップS12の処理が実行される。一方、ステップS9の判定結果が否定である場合、すなわち、第2影描画処理をまだ実行していない影描画エリアがある場合、ステップS10の処理が実行される。
ステップS10において、CPU10は、今回のステップS2〜S12の処理ループにおいて第2の影をすでに描画したか否かを判定する。ステップS10の判定結果が肯定である場合、後述するステップS12の処理が実行される。一方、ステップS10の判定結果が否定である場合、すなわち、第2の影がまだ描画されていない場合、ステップS11の処理が実行される。
ステップS11において、CPU10は、第2影描画処理を実行する。第2影描画処理は、投影方向に投影される影である第2の影を描画するための処理である。以下、図14を参照して、第2影描画処理の詳細を説明する。
図14は、図12に示す第2影描画処理(ステップS11)の流れを示すフローチャートである。第2影描画処理においては、まずステップS31において、CPU10は、現在のフィールドに設定されている影描画エリアのうちで、第2影描画処理をまだ実行していない影描画エリアを選択する。ステップS31の後、ステップS32の処理が実行される。
ステップS32において、CPU10は、ステップS31で選択された影描画エリア内にプレイヤオブジェクトが存在するか否かを判定する。ステップS32の判定は、現在エリアデータ63に含まれる影描画エリアデータのうち、ステップS31で選択された影描画エリアに関する影描画エリアデータと、オブジェクト位置データ64とを参照することによって行われる。具体的には、ステップS32の判定は、オブジェクト位置データ64により示される座標値(px,py,pz)が次の式(1)を満たすか否かによって行われる。
ax−sx≦px≦ax+sx かつ
ay−sy≦py≦ay+sy かつ
az−sz≦pz≦az+sz …(1)
上式(1)においては、ステップS31で選択された影描画エリアに関する影描画エリアデータにより示されるエリア位置を(ax,ay,az)とし、エリアサイズを(sx,sy,sz)としている。ステップS32の判定結果が肯定である場合、ステップS33の処理が実行される。一方、ステップS32の判定結果が否定である場合、CPU10は第2影描画処理を終了する。この場合における第2影描画処理においては第2の影が描画されない。
ステップS33において、CPU10は、プレイヤオブジェクトの位置から投影方向を向く直線を算出する。この直線は、ステップS31で選択された影描画エリアに関する影描画エリアデータと、オブジェクト位置データ64とを用いて算出される。具体的には、CPU10は、オブジェクト位置データ64により示される座標から上記影描画エリアデータにより示される投影方向に延びる直線(半直線)を算出する。ステップS33の後、ステップS34の処理が実行される。
ステップS34において、CPU10は、プレイヤオブジェクトの位置から最大距離内の範囲で、ステップS33で算出された直線に接触する地形オブジェクトがあるか否かを判定する。すなわち、地形オブジェクトを構成するポリゴンのうちに上記範囲内で上記直線に接触するものがあるか否かを判定する。なお、上記最大距離は、ステップS31で選択された影描画エリアに関する影描画エリアデータにより示される最大距離である。ステップS34の判定結果が肯定である場合、ステップS35〜S38の処理が実行される。一方、ステップS34の判定結果が否定である場合、CPU10はステップS35〜S38の処理をスキップして第2影描画処理を終了する。この場合における第2影描画処理においては第2の影が描画されない。
ステップS35において、CPU10は、ステップS34で算出された直線と、それに接触する地形オブジェクトとの交点の位置を算出する。なお、上記最大距離内の範囲で、上記直線に接触する地形オブジェクトが複数ある場合には、最も距離が短い地形オブジェクトとの交点の位置を算出する。ステップS35によって、第2の影が投影される位置が算出されたこととなる。算出された交点の位置を示すデータは、第2交点位置データ67としてメインメモリに記憶される。ステップS35の後、ステップS36の処理が実行される。
ステップS36において、CPU10は、第2の影の色の濃さを算出する。この濃さは、プレイヤオブジェクトの位置から、ステップS35で算出された交点までの距離に基づいて算出される。本実施形態において、第2の影は、予め定められた大きさの円形形状であり、第2の影の濃さは、円形内における黒色の画素の数Nとして表される。具体的には、黒色の画素数Nは、次の式(2)に従って算出される。
N=Dmax−(Dmax−Dmin)×Dis/Dismax …(2)
上式(2)において、変数Disは、プレイヤオブジェクトの位置から上記交点までの距離である。また、定数Dismax、定数Dmax、および定数Dminは、予め定められている。定数Dmaxは、上記距離が0の場合における黒色の画素数であり、定数Dminは、上記距離が定数Dismax以上となる場合における黒色の画素数である。上式(2)に従って画素数Nを算出することにより、上記距離が小さいほど画素数Nが大きくなり、上記距離が大きくなるにつれて画素数Nが小さくなる。つまり、上記距離が小さいほど第2の影の色が濃くなり、上記距離が大きくなるにつれて第2の影の色が薄くなる。したがって、本実施形態によれば、プレイヤは、第2の影の濃さによってプレイヤオブジェクトから第2の影が投影される地形オブジェクトまでの距離を直感的に理解することができるので、ゲーム空間におけるプレイヤオブジェクトの位置をより把握しやすくなる。
なお、上記ステップS36においては、CPU10は、上記距離に基づいて第2の影の色の濃さを変化させることによって第2の影の表示形態を変化させるようにしたが、他の実施形態においては、第2の影の大きさを上記距離に基づいて変化させるようにしてもよい。例えば、上記距離が長いほど第1の影の大きさが大きくなるようにしてもよい。また、第2の影の大きさおよび濃さの両方を上記距離に基づいて変化させるようにしてもよい。
ステップS36の次のステップS37において、CPU10は、第2の影の画像を生成する。具体的には、予め定められた大きさの略円形の画素領域内に、ステップS36で算出された画素数Nの数だけ黒色の画素が存在する画像が生成される。なお、生成された画像において、黒色の画素以外の画素の色は透明である。ステップS37で生成された第2の影の画像データは、第2影画像データ69としてメインメモリに記憶される。
ステップS37の次のステップS38において、CPU10は、ステップS35で算出された交点の位置に第2の影を描画する。すなわち、地形オブジェクトの上記交点の位置に第2の影の画像を重ねて描画する。具体的には、CPU10は、地形オブジェクトの上記交点の位置に第2の影が付加されるように、予め定められている地形オブジェクト用のテクスチャと第2の影の画像とを合成する(重ね合わせる)。ステップS38の後、CPU10は第2影描画処理を終了する。
以上に説明した第2影描画処理では、第2の影は、プレイヤオブジェクトが影描画エリア内に存在する場合にのみ表示される。また、第2の影は、プレイヤオブジェクトの形状を投影面である地形オブジェクトに投影させた形状とは無関係であり、予め定められた形状である。第2の影は、3次元空間におけるプレイヤオブジェクトの位置を識別させる目的で表示されるものであるので、リアルな形状とするよりも、第1の影とは異なる形状とすることより第1の影と区別が容易な形状とする方が好ましいからである。また、予め定められた形状とすることによって、オブジェクトの形状を投影面に投影させた形状とする場合よりもゲーム装置3の処理負担を軽減することができる。
図12の説明に戻り、ステップS12において、CPU10は、ゲーム画像を表示する。すなわち、CPU10は、ゲーム空間内に設定される仮想カメラからゲーム空間を見たときの画像が生成され、テレビ2の画面に表示される。このとき、ステップS23(または、ステップS23およびS35)で算出された各交点の位置の地面オブジェクトについては、地面オブジェクト用のテクスチャに影画像が重ねられたテクスチャを用いて地面オブジェクトが描画されるので、当該交点の位置に影が付されたゲーム画像が生成される。
ステップS12の次のステップS13において、CPU10は、ゲームを終了するか否かを判定する。ステップS13の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS13の判定結果が否定である場合、ステップS2の処理が再度実行される。以降、ステップS13でゲームを終了すると判定されるまで、ステップS2〜S13の処理が繰り返し実行される。一方、ステップS13の判定結果が肯定である場合、CPU10は、図12に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
以上のように、上記ゲーム処理によれば、プレイヤオブジェクトが影描画エリア内に存在する場合、プレイヤオブジェクトから重力方向に向かった位置に第1の影が表示されるとともに、プレイヤオブジェクトから(重力方向とは異なる)投影方向に向かった位置に第2の影が表示される(図8参照)。これによって、3次元空間におけるプレイヤオブジェクトの位置をプレイヤに直感的に理解させることができる。
なお、上記ゲーム処理においては、ステップS23およびS35において、直線とそれに接触する地形オブジェクトとの交点の位置を算出するようにした。ここで、他の実施形態では、地形オブジェクトに限らず、プレイヤオブジェクトに最も近い位置で直線と接するオブジェクトと当該直線との交点の位置を算出するようにしてもよい。そして、算出された交点の位置に影を付すようにしてもよい。
また、上記ゲーム処理においては、ゲーム空間をより自然に見せるために、プレイヤオブジェクト以外の他のオブジェクト(例えば、壁オブジェクト52)の影が表示されてもよい。例えば、ゲーム装置3は、上記ステップS6の後のタイミングで、上記他のオブジェクトについて影を描画するステップを実行するようにしてもよい。また、当該ステップは、第1影描画処理(ステップS8)において、他のオブジェクトについても第1の影を生成することによって実行されてもよい。なお、上記他のオブジェクトの影は、第1および第2の影とは異なる方法で生成されてもよく、影の生成方法が第1および第2の影の生成方法とは異なっていてもよいし、影が投影される方向が第1および第2の影が投影される方向とは異なっていてもよい。ただし、上記他のオブジェクトの影は、プレイヤオブジェクトの第1の影と同様、オブジェクトから重力方向に向かった位置に影が付されることが好ましい。なお、他のオブジェクトに影を付す場合であっても、当該他のオブジェクトには第2の影を付す必要はない。つまり、第2の影は、予め定められた所定のオブジェクト(上記実施形態では、プレイヤオブジェクト)のみに付すようにすればよい。このように、プレイヤオブジェクトについてはプレイヤに位置を把握させることを優先して、2方向に2つの影を描くとともに、他のオブジェクトについてはゲーム世界を自然に表現することを優先して、所定の方向に1つの影を描くようにしてもよい。
なお、上記ゲーム処理では、2つの影を生成する対象となるオブジェクトをプレイヤオブジェクトとして説明したが、他の実施形態においては、予め定められた1以上の所定のオブジェクトについて2つの影を生成するようにしてもよい。例えば、プレイヤオブジェクトに加えて(または、プレイヤオブジェクトに代えて)敵オブジェクトについて第1および第2の影を生成して表示するようにしてもよい。また、複数のオブジェクトについて第1および第2の影を生成する場合であっても、当該複数のオブジェクト以外の他のオブジェクトについては第2の影を生成しないようにしてもよい。