【発明の詳細な説明】 【0001】 【発明が属する技術分野】本発明は、ビデオゲームにおいて粒子オブジェクトの振る舞いを、よりリアリティをもって表現できるようにするための技術に関する。 【0002】 【従来の技術】ビデオゲームでは、仮想三次元空間におけるキャラクタ周辺の環境が、実世界における同様の環境により近似するように表現されることが望まれている。 例えば、雪が降る様子を画面に表示することにより、キャラクタ周辺の環境を表現する場合がある。 この場合、雪が舞い散る様子をよりリアリティをもって表現することで、寒い冬をイメージさせる画面を表示することができるようになる。 【0003】例えば、特開平10−31410号公報では、雪である落下体を複数含む落下オブジェクトを所与の回転方向、回転速度でオブジェクト空間内で落下させ、雪がひらひら舞いながら落ちる様子を表現する技術を開示している。 また、本公報では、落下オブジェクトの速度、速度方向、数を、オブジェクト空間内の場所、 時間情報に基づいて変化させ、これにより場所、時間により変化する横風を表現できる。 【0004】 【発明が解決しようとする課題】ビデオゲームでは、仮想三次元空間内を移動する様々なオブジェクトが画面表示される。 移動するオブジェクトには例えば列車のオブジェクトがある。 現実の世界で列車が移動すると、その列車の周囲に風が発生する。 雪が降っている中を列車が移動すれば、列車周辺の雪は、列車の移動により発生した風の影響を受け、落下方向などが変化する。 ところが、上記公報記載の技術では、雪の落下速度等の制御に関し、他のオブジェクトの動き等は考慮されていない。 ビデオゲームにおいても、三次元空間内の列車などのオブジェクトの移動に応じて、雪の落下方向等を制御することが望まれる。 【0005】よって本発明の目的は、オブジェクトの移動に応じて生じる風に影響を受ける粒子オブジェクトの振る舞いを、よりリアリティをもって表現するための技術を提供することである。 【0006】 【課題を解決するための手段】本発明の第1の態様に係る、仮想三次元空間で処理されるオブジェクトの動きを処理するゲームプログラムを処理する方法は、画面上で1または複数の所定サイズの領域をあらかじめ決められた規則もしくはプレイヤの操作に応じて移動させ、画面上に1または複数のオブジェクトを表示させ、オブジェクトと所定サイズの領域との位置関係を判断し、所定サイズの領域とオブジェクトとの位置関係の変化に応じてオブジェクトの画面上での移動条件を決定し、当該決定された移動条件にしたがってオブジェクトを画面上で移動させるものである。 【0007】上で述べた位置関係を所定サイズの領域の基準点とオブジェクトの基準点との距離に基づいて判断するような構成も可能である。 また、所定サイズの領域が複数存在した場合、複数の所定サイズの領域のうち、 オブジェクトに最も近い領域とオブジェクトとの距離で位置関係を判断するような構成も可能である。 【0008】さらに、オブジェクトが複数存在する場合には、位置関係の判断をオブジェクトごとに行なうような構成も可能である。 さらに、上で述べた移動条件を決定する場合には、移動条件を位置関係の変化に対応させて更新させるような構成も可能である。 【0009】上で述べた移動条件が所定サイズの領域内の位置ごとに相異させて決定されるような構成も可能である。 さらに上で述べた移動条件が位置関係の更新の度に計算されるような構成も可能である。 【0010】さらに上で述べた移動条件の更新をフレーム処理単位に行なうような構成も可能である。 上で述べた移動条件が、所定サイズの領域とオブジェクトとの距離に応じて移動速度を変化させるような構成とすることも可能である。 上で述べた移動条件があらかじめ記憶されているような構成とすることも可能である。 【0011】本発明の第1の態様に係る、仮想三次元空間で処理されるオブジェクトの動きを処理するゲームプログラムを処理する方法をコンピュータに実行させるプログラムを作成することは可能である。 その際、第1の態様に対する上記のような変形は、当該プログラムに対しても応用可能である。 本発明に係るプログラムは、例えばCD−ROM(Compact Disc - Read Only Memor y)、DVD(Digital Versatile Disc)、フロッピー(登録商標)ディスク、メモリカートリッジ、メモリ、 ハードディスクなどの記録媒体又は記憶装置に格納される。 記録媒体又は記憶装置に格納されるプログラムをコンピュータに読み込ませることで以下で述べるゲーム装置を実現できる。 また、記録媒体によって本発明に係るプログラムをソフトウエア製品として装置と独立して容易に配布、販売することができるようになる。 さらに、 コンピュータなどのハードウエアを用いて本発明に係るプログラムを実行することにより、コンピュータ等のハードウエアで本発明の技術が容易に実施できるようになる。 【0012】本発明の第2の態様に係る、仮想三次元空間で処理されるオブジェクトの動きを表示画面上で制御するゲーム装置は、プログラムにしたがってゲームを実行するユニットと、プログラムを全部もしくは一部を格納するメモリと、ユニットで実行されるゲームを表示する表示画面とを備える。 そして、上で述べたユニットは、メモリに格納されたプログラムにしたがって、表示画面上で1または複数の所定サイズの領域をあらかじめ決められた規則もしくはプレイヤの操作に応じて移動させ、表示画面上に仮想三次元空間で処理される1または複数のオブジェクトを表示させ、オブジェクトと所定サイズの領域との位置関係を判断し、所定サイズの領域とオブジェクトとの位置関係の変化に応じてオブジェクトの表示画面上での移動条件を決定し、決定された移動条件にしたがってオブジェクトを表示画面上で移動させる。 【0013】上で述べたユニットを、位置関係を所定サイズの領域の基準点とオブジェクトの基準点との距離に基づいて判断するような構成とすることも可能である。 また、上で述べたユニットを、所定サイズの領域が複数存在した場合、複数の所定サイズの領域のうち、オブジェクトに最も近い領域とオブジェクトとの距離で位置関係を判断するような構成とすることも可能である。 【0014】さらに、上で述べたユニットを、オブジェクトが複数存在する場合、位置関係の判断をオブジェクトごとに行なうような構成とすることも可能である。 【0015】本発明の第1の態様に対する上記のような変形は、本発明の第2の態様に係るゲーム装置に応用可能である。 【0016】 【発明の実施の形態】(実施の形態1)本実施の形態をコンピュータ・プログラムにより実施する場合において当該コンピュータ・プログラムを実行する家庭用ゲーム機101の一例を図1に示す。 家庭用ゲーム機101 は、例えば内部バス119に接続されたCPU(Centra lProcessing Unit)103、ROM(Read Only Memor y)104、RAM(Random Access Memory)105、 HDD(Hard Disk Drive)107、サウンド処理部1 09、グラフィックス処理部111、CD−ROMドライブ113、通信インターフェース115、及びインターフェース部117を備える。 グラフィックス処理部1 11は、フレームバッファ112を備える。 フレームバッファ112はVRAM(Video RAM)と示す場合もある。 【0017】家庭用ゲーム機101のサウンド処理部1 09及びグラフィックス処理部111は表示画面120 及びスピーカ122を有するTVセット121に接続されている。 また、CD−ROMドライブ113には着脱可能なCD−ROM131が装着される。 CD−ROM 131には、本発明にかかるゲームプログラム133及びデータ135が記録されている。 通信インターフェース115はネットワーク151と通信媒体141を介して接続される。 インターフェース部117には、操作ボタンを備えたキーパッド161及びメモリカード171 が接続される。 【0018】CPU103は、ROM104に格納されたプログラム、及びCD−ROM131上に記録されたゲームプログラム133を実行し、家庭用ゲーム機10 1の制御を行う。 RAM105は、CPU103のワークエリアである。 HDD107は、例えばCD−ROM 131上に記録されたゲームプログラム133及びデータ135を保管するための記憶領域である。 メモリカード171は、ゲームプログラム133により参照されるデータを保存するための記憶領域である。 サウンド処理部109は、CPU103により実行されているプログラムがサウンド出力を行うよう指示している場合に、その指示を解釈して、TVセット121にサウンド信号を出力する。 そして、サウンド信号はTVセット121のスピーカ122からサウンドとして出力される。 【0019】グラフィックス処理部111は、CPU1 03から出力される描画命令に従って、画像データを生成してフレームバッファ112に書き込む。 そして、書き込んだ画像データを表示画面120に表示するための信号をTVセット121に出力する。 CD−ROMドライブ113は、CD−ROM131上のゲームプログラム133及びデータ135を読み出す。 通信インターフェース115は、通信媒体141を介してネットワーク151に接続され、他のコンピュータ等との間で行われるデータ通信の入出力制御を行う。 インターフェース部117は、キーパッド161からの入力をRAM105 に出力し、CPU103がキーパッド161からの入力を解釈して演算処理を実施する。 【0020】本実施の形態に係るゲームプログラム13 3及びデータ135は最初例えばCD−ROM131に記録されている。 そして、ゲームプログラム133及びデータ135は実行時にCD−ROMドライブ113により読み出されて、RAM105にロードされる。 なお、CD−ROM131に記録されている本実施の形態に係るゲームプログラム133及びデータ135を、予めCD−ROMドライブ113により読み出し、HDD 107に格納しておくようにしてもよい。 HDD107 に本実施の形態に係るゲームプログラム及びデータ10 8が格納されている場合には、HDD107からRAM 105にゲームプログラム及びデータ108がロードされる。 【0021】CPU103はRAM105にロードされた、本実施の形態に係るゲームプログラム133及びデータ135を処理し、描画命令をグラフィックス処理部111に出力する。 なお、中間的なデータはRAM10 5に記憶される。 グラフィックス処理部111はCPU 103からの描画命令に従って処理を行い、画像データをフレームバッファ112に書き込み、表示画面120 に表示するための信号をTVセット121に出力する。 【0022】以上のような家庭用ゲーム機101において実行される本実施の形態に係るゲームプログラムのアルゴリズム及び使用されるデータについて以下で詳しく述べる。 【0023】図2乃至図4を用いて本実施の形態で使用されるデータについて説明する。 【0024】図2は本実施の形態に係るゲームプログラム133実行中におけるRAM105の状態を示す模式図である。 RAM105には、移動するキャラクタのオブジェクト・データ200と、粒子オブジェクトに関するパーティクルデータ・テーブル300とが記憶されている。 移動するキャラクタのオブジェクト・データ20 0には、オブジェクトのポリゴン等に関するモデルデータ2100と、当該オブジェクトに対応付けられた仮想的な風に関する風データ・テーブル2200とが含まれる。 【0025】図3に風データ・テーブル2200の一例を示す。 風データ・テーブル2200は、対応付けられたオブジェクト毎に設けられる。 オブジェクトに対応して、例えば複数の仮想的な風が設定される。 図3の例では4つの仮想的な風が設定され、仮想的な風には風番号の欄2201に格納される各番号が付される。 仮想的な風には、風の基準位置と、風向きと、風力と、風の影響範囲とが定義される。 よって、風データ・テーブル22 00には、風の基準位置の欄2203と、風向きの欄2 205と、風力の欄2207と、風の影響範囲の欄22 09とが設けられている。 【0026】風の基準位置の欄2203には、対応付けられたオブジェクトの基準となる位置からの相対位置座標が格納される。 風向きの欄2205には、風の向きを表す単位ベクトルが格納される。 風力の欄2207には、風力を表すスカラ値が格納される。 風の影響範囲の欄2209には、球である風の影響範囲の半径が格納される。 【0027】図3においては、風番号1の仮想的な風には、風の基準位置wind_pos1と、風向きwind_dir1と、風力wind_pow1と、風の影響範囲wind_dist1とが定義されている。 また、風番号2の仮想的な風には、風の基準位置wind_pos2と、風向きwind_dir2と、風力wind_pow2 と、風の影響範囲wind_dist2とが定義されている。 風番号3の仮想的な風には、風の基準位置wind_pos3と、風向きwind_dir3と、風力wind_pow3と、風の影響範囲wind _dist3とが定義されている。 風番号4の仮想的な風には、風の基準位置wind_pos4と、風向きwind_dir4と、風力wind_pow4と、風の影響範囲wind_dist4とが定義されている。 【0028】なおオブジェクトに対応付けられる仮想的な風の数は複数でなく単数であってもよい。 【0029】図4にパーティクルデータ・テーブル30 0の一例を示す。 各粒子オブジェクトには、パーティクル番号が付されており、パーティクル番号の欄301に格納される。 各粒子オブジェクトの現在位置座標(prtl _pos)は、位置の欄303に格納される。 各粒子オブジェクトのデフォルトの移動方向(prtcl_dir)を表す単位ベクトルは、方向の欄305に格納される。 各粒子オブジェクトのデフォルトの移動量(prtcl_pow)を表すスカラ値は、力の欄307に格納される。 各粒子オブジェクトの移動方向を求めるために使用される、補間により風向きが変更される場合における補間開始方向(prtc l_windnowdir:単位ベクトル)は、風向変更の開始方向の欄309に格納される。 補間開始方向の初期値は、粒子オブジェクトのデフォルトの移動方向である。 各粒子オブジェクトの移動方向を求めるために使用される、補間により風向きが変更される場合における補間終了方向(prtcl_windnextdir:単位ベクトル)は、風向変更の終了方向の欄311に格納される。 【0030】各粒子オブジェクトの風から受ける風力(prtcl_windpow)を表すスカラ値は、受ける風力の欄313に格納される。 各粒子オブジェクトに対する風向きを変更するための補間処理において使用される最大補間フレーム数(prtcl_windanimfrmmax)は、最大補間フレーム数の欄315に格納される。 最大補間フレーム数の初期値は、例えば16乃至32のうちのランダムな整数である。 各オブジェクトに対する風向きを変更するための補間処理において使用される現在フレーム番号(pr tcl_windanimfrm)は、現在フレーム番号の欄317に格納される。 現在フレーム番号の初期値は0である。 各粒子オブジェクトが現在受けている仮想的な風の現在の風向き(prtcl_winddir)は、現在の風向きの欄319 に格納される。 【0031】図4において、パーティクル番号が1の粒子オブジェクトの位置はpos1であり、移動方向はdir1であり、移動量はpow1である。 また、パーティクル番号が1の粒子オブジェクトの補間開始方向はwindnowdir1であり、補間終了方向はwindnextdir1であり、受ける風力はwindpow1である。 さらにパーティクル番号が1の粒子オブジェクトの最大補間フレーム数はwindanimfrmmax1 であり、現在フレーム番号はwindanimfrm1であり、現在の風向きはwinddir1である。 【0032】パーティクル番号が2の粒子オブジェクトの位置はpos2であり、移動方向はdir2であり、移動量は pow2である。 また、パーティクル番号が2の粒子オブジェクトの補間開始方向はwindnowdir2であり、補間終了方向はwindnextdir2であり、受ける風力はwindpow2である。 さらにパーティクル番号が2の粒子オブジェクトの最大補間フレーム数はwindanimfrmmax2であり、現在フレーム番号はwindanimfrm2であり、現在の風向きはwind dir2である。 【0033】パーティクル番号が3の粒子オブジェクトの位置はpos3であり、移動方向はdir3であり、移動量は pow3である。 また、パーティクル番号が3の粒子オブジェクトの補間開始方向はwindnowdir3であり、補間終了方向はwindnextdir3であり、受ける風力はwindpow3である。 さらにパーティクル番号が3の粒子オブジェクトの最大補間フレーム数はwindanimfrmmax3であり、現在フレーム番号はwindanimfrm3であり、現在の風向きはwind dir3である。 【0034】パーティクル番号が4の粒子オブジェクトの位置はpos4であり、移動方向はdir4であり、移動量は pow4である。 また、パーティクル番号が4の粒子オブジェクトの補間開始方向はwindnowdir4であり、補間終了方向はwindnextdir4であり、受ける風力はwindpow4である。 さらにパーティクル番号が4の粒子オブジェクトの最大補間フレーム数はwindanimfrmmax4であり、現在フレーム番号はwindanimfrm4であり、現在の風向きはwind dir4である。 【0035】粒子オブジェクトの数は、予め固定されていなくともよい。 後に述べるように例えばオブジェクトに接触したことにより消滅させ、プログラムよってランダムに発生させるようにしてもよい。 粒子オブジェクトを消滅させた場合にはパーティクルデータ・テーブル3 00から当該粒子オブジェクトのデータを削除する。 また、新たに発生させた場合には当該新たに発生した粒子オブジェクトのデータをパーティクルデータ・テーブル300に登録する。 【0036】なお本実施の形態に係るゲーム・プログラム133もRAM105に格納されている。 【0037】次に、本実施の形態の概要を図5乃至図7 を用いて説明する。 図5乃至図7は、列車であるオブジェクト400が表示画面120の中央から右方向に移動する場面を表している。 このオブジェクト400は、C PU103の演算処理又はプレイヤによるキーパッド1 61を用いた操作入力に応答して移動する。 また、オブジェクト400には仮想的な風k,l,m及びnが4つ対応付けられている。 オブジェクト400の進行方向を前方とすると、仮想的な風の発生元の位置はオブジェクト400の後方(表示画面120内における左側)に定義されている。 仮想的な風kの影響範囲は二点鎖線で表された範囲Kである。 仮想的な風lの影響範囲は細かい点線で表された範囲Lである。 仮想的な風mの影響範囲は粗い点線で表された範囲Mである。 仮想的な風nの影響範囲は一点鎖線で表された範囲Nである。 各仮想的な風の位置に表された三角形は風の向きを示している。 【0038】図5において、雪を表す粒子オブジェクトa,b,c,d,e及びfは、オブジェクト400の上部から発生され、デフォルトの方向にデフォルトの移動量で移動する。 デフォルトの方向及びデフォルトの移動量は各粒子オブジェクトの下に表された矢印で表される。 但し、粒子オブジェクトaは、仮想的な風k及びl の影響範囲K及びLに入っている。 なお、粒子オブジェクトaに一番近い仮想的な風は仮想的な風kである。 また、粒子オブジェクトbは、仮想的な風kの影響範囲K に入っている。 さらに、粒子オブジェクトdは、移動するとオブジェクト400に接触するので、次のフレームでは消滅する。 【0039】図6は図5に示された状態から数フレーム後の状態を示している。 列車であるオブジェクト400 の先頭部分は表示画面120から外れてしまっている。 仮想的な風k,l,m及びnはオブジェクト400の移動と共に移動している。 オブジェクト400と仮想的な風k,l,m及びnの相対的な位置は変化しない。 【0040】図6において粒子オブジェクトaは全ての仮想的な風の影響範囲に入っているが、最初に影響を受けた仮想的な風kの風向きに応じて移動している。 粒子オブジェクトbも仮想的な風k,l及びnの影響範囲K,L及びNに入っているが、最初に影響を受けた仮想的な風kの風向きに応じて移動している。 粒子オブジェクトcは仮想的な風kの影響範囲Kに入っており、仮想的な風kの風向きに応じて移動している。 なお、粒子オブジェクトの移動方向については本発明に係るプログラムの処理フローにおいて詳しく述べる。 粒子オブジェクトe及びfについてはデフォルトの方向にデフォルトの移動量で移動する。 【0041】図7は図6に示された状態から数フレーム後の状態を示している。 列車であるオブジェクト400 は、後端部を残して表示画面120から外れてしまっている。 仮想的な風k,l,m及びnはオブジェクト40 0の移動と共に移動している。 オブジェクト400と仮想的な風k,l,m及びnの相対的な位置は変化しない。 【0042】図7において粒子オブジェクトaは既に全ての仮想的な風の影響範囲から脱している。 しかし、最後に影響を受けた仮想的な風lの風向きに応じて移動している。 粒子オブジェクトbは、仮想的な風k以外の影響範囲L,M及びNに入っているが、仮想的な風mの影響が残っており、仮想的な風mの風向きに応じた方向に移動している。 粒子オブジェクトcは、全ての仮想的な風の影響範囲に入っているが、最も近い仮想的な風lの風向きに応じた方向に移動している。 粒子オブジェクトeは図7の状態になる前にオブジェクト400に接触して消滅させられている。 粒子オブジェクトfは全ての仮想的な風の影響範囲に入っているが、最初に影響を受けた仮想的な風kの風向きに応じた方向に移動している。 【0043】図5乃至図7にて説明したように、本実施の形態においてはオブジェクトの移動に伴い仮想的な風の影響範囲も移動する。 そして、粒子オブジェクトは影響を受けた仮想的な風の風向きに応じた方向に移動する。 【0044】以上のような前提を元にして以下に本実施の形態にかかる処理フローを説明する。 【0045】CPU103は、起動時に、ROM104 等に記憶されているオペレーティングシステムに基づき、CD−ROMドライブ113を介してCD−ROM 131から画像処理やゲームの実行に必要なゲームプログラム133やデータ135を読み出し、RAM105 に転送させる。 そして、CPU103は、RAM105 に転送されたゲームプログラム133を実行することにより、以下に記載する処理を実現する。 【0046】なお、家庭用ゲーム装置101で行われる制御及び処理の中には、CPU103以外の回路がCP U103と協働して実際の制御及び処理を行っている場合もある。 説明の便宜上、以下では、CPU103が関係する制御及び処理は、CPU103が直接的に実行しているものとして説明する。 【0047】また、画像処理やゲームを実行するために必要なゲームプログラム133やデータ135は、実際にはCPU103からの命令に従って処理の進行状況に応じて順次CD−ROM131から読み出されてRAM 105に転送される。 しかし、以下に示す説明では、発明の理解を容易にするため、CD−ROM131からのデータの読み出しや、RAM105への転送に関する記述は省略している。 【0048】もし画像処理やゲームを実行するために必要なゲームプログラム133やデータ135がHDD1 07に格納されている場合には、CPU103からの命令に従って処理の進行状況に応じて順次HDD107から読み出されてRAM105に転送される。 しかし、以下に示す説明では、上で述べたのと同様の理由で、HD D107からのデータの読み出しや、RAM105への転送に関する記述は省略している。 【0049】図8にオブジェクト及び粒子オブジェクトの表示処理のメイン・フローを示す。 最初に、オブジェクトの移動処理が実施される(ステップS1)。 例えば、ユーザによるキーパッド161の操作に応じて又はプログラムから指示に従って、オブジェクトの移動量を計算し、オブジェクトの位置を決定する。 次に、粒子オブジェクトの移動処理が実施される(ステップS3)。 粒子オブジェクトの移動処理については後に詳しく述べる。 【0050】次にオブジェクトと接触した粒子オブジェクトについては処理対象から除外するための処理が実施される(ステップS5)。 オブジェクトと粒子オブジェクトが接触したか否かについては例えば以下のような処理にて判断する。 【0051】例えば図9に示したように、移動前の粒子オブジェクト501が位置500aから位置500bに移動した時に、オブジェクト400(図5に示す)に接触したか否かを判断する場合を想定する。 この場合、オブジェクト400を内包する直方体のオブジェクト40 0aを想定する。 このオブジェクト400a内において、最も小さいx座標値Vxminと、最も大きいx座標値Vxmaxを見つけ、移動後の粒子オブジェクト502の位置500bのx座標がVxmin以上Vxmax以下であるか判断する。 もし、粒子オブジェクト502の位置500b のx座標がVxmin以上Vxmax以下である場合には、オブジェクト400a内において、最も小さいy座標値Vym inと、最も大きいy座標値Vymaxを見つけ、粒子オブジェクト502の位置500bのy座標がVymin以上Vym ax以下であるか判断する。 【0052】もし、粒子オブジェクト502の位置50 0bのy座標がVymin以上Vymax以下である場合には、 オブジェクト400a内において、最も小さいz座標値Vzminと、最も大きいz座標値Vzmaxを見つけ、粒子オブジェクト502の位置500bのz座標がVzmin以上Vzmax以下であるか判断する。 もし、粒子オブジェクト500の位置500bのz座標がVzmin以上Vzmax以下である場合には、粒子オブジェクト502はオブジェクト400aに接触する。 上で述べたいずれかの条件を満たさない場合には、接触したとはみなされない。 なお、 図9では点Vminはオブジェクト400aにおいてx, y,z座標値が全て最も小さい点であり、点Vmaxはオブジェクト400においてx,y,z座標値が全て最も大きい点である。 オブジェクト400aに接触した場合には、オブジェクト400(図5に示す)にも接触するものと判断する。 【0053】以上のように粒子オブジェクトがオブジェクトに接触していると判断されると、当該粒子オブジェクトは処理の対象外とされ、当該粒子オブジェクトのデータはパーティクルデータ・テーブル300から消去される。 【0054】次にオブジェクトの描画処理が行われる(ステップS7)。 オブジェクトについて光源計算及び透視変換が実施され、結果がフレームバッファ112に書き込まれる。 透視変換は、世界座標系のポリゴンの各頂点の座標値をスクリーン座標系における座標値に変換するものである。 そして透視変換後の画像がフレームバッファ112に描画される。 光源計算は、光源から発せられた仮想的な光線により生じる陰影(輝度)を計算するものである。 【0055】また粒子オブジェクトの描画処理が行われる(ステップS9)。 粒子オブジェクトについて光源計算及び透視変換が実施され、結果がフレームバッファ1 12に書き込まれる。 そして、フレームバッファ112 の内容が表示される(ステップS10)。 【0056】その後ゲーム終了か否かが判断される(ステップS11)。 ゲームを終了させるか否かは、例えばユーザがキーパッド161を操作してゲーム終了を命じたか又はゲームのストーリー上ゲーム終了の条件が満たされたかに基づき判断される。 ゲームを終了させない場合には、ステップS1に戻る。 ゲームを終了させる場合には処理を終了させる。 【0057】次に図10乃至図13を用いて粒子オブジェクト移動処理を説明する。 図8のステップS1におけるオブジェクトの移動処理を行っているので、前フレームのオブジェクトの位置と現フレームのオブジェクトの位置からオブジェクトの移動ベクトルが取得される(ステップS23)。 そして、仮想的な風の位置をオブジェクトの移動に伴い移動させるために、仮想的な風の基準位置wind_posにオブジェクトの移動ベクトルが加算される(ステップS25)。 【0058】次に、粒子オブジェクトのカウンタであるsが1に初期化され(ステップS27)、粒子オブジェクトのカウンタsの値が粒子オブジェクトの個数nを超えたかが判断される(ステップS29)。 もし、全粒子オブジェクトを実施した場合には、処理を終了する。 一方、全ての粒子オブジェクトを処理していない場合には、s番目の粒子オブジェクトについて、prtcl_dir (粒子オブジェクトのデフォルトの移動方向)×prtcl_ pow(粒子オブジェクトのデフォルトの移動量)により粒子オブジェクトのデフォルトの移動ベクトルが計算される(ステップS31)。 【0059】そして粒子オブジェクトの位置prtcl_pos に移動ベクトルが加算される(ステップS33)。 加えて、重力が存在する場合には、粒子オブジェクトの位置 prtcl_posに重力ベクトルが加算される(ステップS3 5)。 ここで端子Aを介して図11に移行する。 【0060】図11ではまず粒子オブジェクトの位置pr tcl_posと仮想的な風の基準位置wind_posから最も近い仮想的な風の探索が行われる(ステップS37)。 ステップS37では、例えば粒子オブジェクトの位置と各仮想的な風の基準位置との距離が順番に求められ、最も小さい値を有する仮想的な風との距離及び当該仮想的な風の番号が保持される。 これにより、全ての仮想的な風について処理した時点で、最も近い仮想的な風を探し出すことができる。 【0061】次に、最も近い仮想的な風との距離がその影響範囲wind_dist以下であるかが判断される(ステップS39)。 すなわち、現在処理されている粒子オブジェクトが最も近い仮想的な風の影響範囲に包含されているか否かが判断される。 もし、現在処理されている粒子オブジェクトが最も近い仮想的な風の影響範囲に入っていなければ、端子Bを介して図12の処理に移行する。 一方、現在処理されている粒子オブジェクトが最も近い仮想的な風の影響範囲に入っていれば、現在フレーム番号prtcl_windanimfrmが最大補間フレーム数prtcl_winda nimfrmmax以上となっているかが判断される(ステップS41)。 もし、prtcl_windanimfrmが最大補間フレーム数prtcl_windanimfrmmax未満である場合には、端子C を介して図12の処理に移行する。 ここで、図5に示した例のように、雪のオブジェクトを画面の上方から下方へ移動させる場合、オブジェクトを画面上方で発生させた直後は、仮想的な風の影響範囲に入っていない。 その後、仮想的な風の影響範囲に入るが、仮想的な風の影響範囲に入ったフレームでは、最大補間フレーム数に現在フレーム番号が達していない。 そこで、図12の処理を先に説明する。 【0062】図12では、端子Bを介してステップS5 3に移行して、ステップS55乃至ステップS63の処理を一度でも行ったことがあるか判断される。 例えば、 初めての処理において最も近い仮想的な風の影響範囲に入っていなければ、ステップS55の補間処理を一度も行っていないということになる。 このような場合には、 粒子オブジェクトのカウンタであるsを1インクリメントし(ステップS54)、端子Dを介して図10のステップS29に戻る。 【0063】一方、ステップS55の補間処理を一度でも実行したことがある場合や、prtcl_windanimfrmが最大補間フレーム数prtcl_windanimfrmmax未満である場合(端子Dの場合)には、当該粒子オブジェクトが影響を受ける現在の風向きprtcl_winddirを計算する(ステップS55)。 prtcl_winddirは、以下のような式で計算される。 prtcl_winddir=prtcl_windnowdir+ (prtcl_windnextdir−prtcl_windnowdir) /prtcl_windanimfrmmax×prtcl_windanimfrm (1) 【0064】(1)式は、補間開始方向prtcl_windnowd irから補間終了方向prtcl_windnextdirまでを最大補間フレームに渡って補間することを示している。 prtcl_wi ndnowdirの初期値は、粒子オブジェクトのデフォルトの移動方向prtcl_dirであり、prtcl_windnextdirの初期値は影響を受ける仮想的な風の風向きwind_dirである。 【0065】次に、現在フレーム番号prtcl_windanimfr mを1インクリメントする(ステップS57)。 ステップS57はステップS63までの間に行われればよく、 順番を入れ替えることができる。 そして、粒子オブジェクトの位置prtcl_posを変更する(ステップS59)。 粒子オブジェクトの位置prtcl_posは以下の式にて計算される。 prtcl_pos=prtcl_pos+prtcl_winddir×prtcl_windpow (2) 但し、影響を受ける仮想的な風からの力prtcl_windpow の初期値は、以下の式にて計算される。 prtcl_windpow=(1.0−(風との距離/wind_dist))×wind_pow (3) (3)式において「風との距離」とは、s番目の粒子オブジェクトの位置prtcl_posと、その粒子オブジェクトに最も近い仮想的な風との距離である。 【0066】(3)式は影響を受ける仮想的な風からの力を、仮想的な風の基準位置からの距離に比例して小さくすることを示している。 すなわち仮想的な風の基準位置と粒子オブジェクトの位置が近ければ近いほど仮想的な風の風力に近づき、遠くなれば遠くなるほど小さくなる。 【0067】粒子オブジェクトの位置を計算するのに用いた、影響を受ける仮想的な風からの力prtcl_windpow はフレームが進む毎に弱められる。 すなわちステップS 61において、次回の計算のためにprtcl_windpowは0.99倍されている。 但し、0.99は一例であって1未満の他の値を用いてもよい。 【0068】そして、他の粒子オブジェクトへの処理に移行すべく、粒子オブジェクトのカウンタsの値を1インクリメントする(ステップS63)。 端子Dを介して図10のステップS29に戻る。 【0069】以上述べたようにステップS55乃至ステップS63で行われる処理は、同じ粒子オブジェクトについて図11のステップS41でprtcl_windanimfrm≧p rtcl_windanimfrmmaxと判断されるまで繰り返される。 ステップS41でprtcl_windanimfrm≧prtcl_windanimf rmmaxと判断された場合には、現在フレーム番号prtcl_w indanimfrmを0にリセットする(ステップS43)。 そして、補間開始方向prtcl_windnowdirに今までの補間終了方向prtcl_windnextdirを代入する(ステップS4 5)。 また、補間終了方向prtcl_windnextdirに、最も近い仮想的な風の風向きwind_dirを所定の範囲でランダムに変更した方向を代入する(ステップS47)。 【0070】そして、影響を受ける仮想的な風からの力 prtcl_windpowを上で述べた(1)式で計算し直す(ステップS49)。 また、最大補間フレーム数prtcl_wind animfrmmaxに例えば16乃至32のランダムな整数を代入する(ステップS51)。 この後ステップS43乃至S51にて設定した新たな条件の下、端子Bを介して接続される図12の処理を実施する。 【0071】ここで図13乃至図19を用いて、一つの粒子オブジェクトの移動について簡単な例を示しておく。 【0072】図13には粒子オブジェクト500が1つ存在しており、仮想的な風も1つ存在している。 仮想的な風の基準位置w0は、対応付けられたオブジェクトの移動に伴い位置w1に移動したとする。 仮想的な風の影響範囲は、仮想的な風の新たな基準位置w1を中心とし且つ距離wind_distを半径とする球となり、図13では点線で表される。 【0073】最初に、図10のステップS31乃至S3 5の処理にて、粒子オブジェクト500のデフォルトの移動ベクトル及び重力ベクトルが粒子オブジェクト50 0の位置p0に加算される。 移動ベクトル及び重力ベクトルが加算されると、粒子オブジェクト500の位置はp1に移動する。 【0074】次に図11のステップS37及びS39で粒子オブジェクト500の位置p1が最も近い仮想的な風の影響範囲に入っているか判断される。 図13では影響範囲を表す点線の範囲に、粒子オブジェクト500の位置p1は含まれており、当該仮想的な風の影響を受けると判断される。 初めて粒子オブジェクト500が仮想的な風の影響範囲に入ったとすると、現在フレーム番号 prtcl_windanimfrmは0であり、且つ最大補間フレーム数prtcl_windanimfrmmaxは上で述べた例では16から3 2のランダムな整数である。 よって、図11のステップS41では端子Cを介して図12に移行する。 なお、説明を簡単にするために、以下では最大補間フレーム数pr tcl_windanimfrmmaxは3であるとする。 【0075】端子Cを介して図12の処理に移行すると、ステップS55において現在受けている仮想的な風の風向きprtcl_winddirを計算する。 図14に示すように、水平方向に補間終了方向prtcl_windnextdirが設定されており、垂直方向に補間開始方向prtcl_windnowdir が設定されている場合には、補間終了方向prtcl_windne xtdirの始点と補間開始方向prtcl_windnowdirの始点を同一にし、補間終了方向prtcl_windnextdirの終点と補間開始方向prtcl_windnowdirの終点を結んだ線分を計算する。 そして、当該線分を最大補間フレーム数prtcl_wi ndanimfrmmaxで均等に分割した点を各々終点とし、補間開始方向prtcl_windnowdir及び補間終了方向prtcl_wind nextdirの始点を始点とする各ベクトルv1,v2が求められる。 最初の表示フレームでは現在受けている風の風向きprtcl_winddirはベクトルv0(=prtcl_windnowdi r)となり、二番目の表示フレームでprtcl_winddirはベクトルv1となり、三番目のフレームでprtcl_winddirはベクトルv2となる。 v1及びv2は単位ベクトルではないので、単位ベクトルにすることも可能である。 【0076】次に現在フレーム番号prtcl_windanimfrm を1インクリメントした後(prtcl_windanimfrm= 1)、粒子オブジェクト500の表示すべき位置p2を決定する(ステップS59)。 ステップS59では、ステップS55で求められた現在受けている仮想的な風の風向きprtcl_winddir(=v0=prtcl_windnowdir)と、 初期的には仮想的な風の基準位置w1と粒子オブジェクト500の位置p1との距離に応じて変化する、影響を受ける仮想的な風からの力prtcl_windpowとを用いて、 粒子オブジェクト500の表示すべき位置p2を計算する。 (3)式で影響を受ける仮想的な風からの力prtcl_ windpowは計算されるが、本例では簡単のためwind_pow =1であるものとする。 そうすると、図15に示すように、粒子オブジェクト500の表示すべき位置p2は、 ベクトルv0上で且つベクトルv0の始点寄りの位置となる。 これは、(3)式の(1.0−(風との距離/wind_dis t))の部分から生ずる。 【0077】これにて最初の表示フレームにおける粒子オブジェクト500の位置p2が決定された。 次のフレームのための処理として図12のステップS61(影響を受ける仮想的な風からの力を弱める処理)及び次の粒子オブジェクトのための処理としてステップS63(本例では粒子オブジェクトは1つであるから実質的にスキップできる)が行われる。 【0078】第2の表示フレームにおける処理を図16 及び図17を用いて説明する。 図16では、仮想的な風は位置w1からさらに位置w2まで、対応付けられたオブジェクトと共に移動している。 粒子オブジェクト500 の位置は位置p2にデフォルトの移動ベクトル及び重力ベクトルが加算される。 移動ベクトル及び重力ベクトルが加算されると、粒子オブジェクト500の位置はp3 に移動する。 【0079】仮想的な風の影響範囲は、位置w2からwin d_dist離れた範囲にまで及ぶ。 よって、今回もステップS37及びS39(図11)において、粒子オブジェクト500は当該仮想的な風の影響範囲に入っていると判断される。 また、最初の表示フレームのための処理において現在フレーム番号prtcl_windanimfrmは1インクリメントされており、1である。 最大補間フレーム数prtc l_windanimfrmmax=3であるから、ステップS41において端子Cを介して図12の処理に移行する。 【0080】図12のステップS55では図14で述べたような計算が行われて、本表示フレームではベクトルv1が影響を受ける仮想的な風の風向きprtcl_winddirとして得られる。 ステップS57では現在フレーム番号pr tcl_windanimfrmが1インクリメントされ、prtcl_winda nimfrm=2となる。 ステップS59では、前の表示フレームにおけるステップS61の計算で弱められた、影響を受ける仮想的な風からの力prtcl_windpowと、ステップS55で求められたprtcl_winddirを用いて表示すべき粒子オブジェクト500の位置p4が計算される。 図17に示したように、粒子オブジェクト500の位置p 4は、ステップS55において求められたベクトルv1上にあり、且つベクトルv1の始点寄りに存在している。 【0081】これにて第2の表示フレームにおける粒子オブジェクト500の位置p4が決定された。 ステップS61ではさらにprtcl_windpowが小さくされる。 【0082】第3の表示フレームにおける処理を図18 を用いて説明する。 図18では、仮想的な風は位置w2 からさらに位置w3まで、対応付けられたオブジェクトと共に移動している。 粒子オブジェクト500の位置は位置p4にデフォルトの移動ベクトル及び重力ベクトルが加算される。 移動ベクトル及び重力ベクトルが加算されると、粒子オブジェクト500の位置はp5に移動する。 【0083】仮想的な風の影響範囲は、位置w3からwin d_dist離れた範囲にまで及ぶ。 よって、今回もステップS37及びS39(図11)において、粒子オブジェクト500は当該仮想的な風の影響範囲に入っていると判断される。 また、最初の表示フレームのための処理において現在フレーム番号prtcl_windanimfrmは1インクリメントされて2である。 最大補間フレーム数prtcl_wind animfrmmax=3であるから、ステップS41において端子Cを介して図12の処理に移行する。 【0084】図12のステップS55では図14で述べたような計算が行われて、本表示フレームではベクトルv2が影響を受ける仮想的な風の風向きprtcl_winddirとして得られる。 ステップS57では現在フレーム番号pr tcl_windanimfrmが1インクリメントされ、prtcl_winda nimfrm=3となる。 ステップS59では、前の表示フレームにおけるステップS61の計算で弱められた、影響を受ける仮想的な風からの力prtcl_windpowと、ステップS55で求められたprtcl_winddirを用いて表示すべき粒子オブジェクト500の位置p6が計算される。 粒子オブジェクト500の位置p6は、ステップS55において求められたベクトルv2上にあり、且つベクトルv2の始点寄りに存在している。 ベクトルv1とベクトルv2の長さが同じであれば、p3とp4の距離はp5とp6 の距離よりも長くなる。 これは前の表示フレームにおけるステップS61の計算にてprtcl_windpowが小さくされているからである。 【0085】これにて第3の表示フレームにおける粒子オブジェクト500の位置p6が決定された。 ステップS61ではさらにprtcl_windpowが小さくされる。 【0086】第4の表示フレームにおける処理は第1乃至第3の表示フレームにおける処理とは多少異なる。 図10のステップS31乃至S35の処理は前とは変わらないが、最も近い仮想的な風の影響範囲に入っていると図11のステップS37及びS39の処理で判断された場合には、ステップS41でprtcl_windanimfrm=prtcl _windanimfrmmax=3であるから、端子Cを介して図1 2の処理に移行するのではなく、ステップS43に移行する。 ステップS43では現在フレーム番号が0に初期化される。 そして、補間開始方向prtcl_windnowdirに補間終了方向prtcl_windnextdirを代入する(ステップS 45)。 図13乃至図18で説明した例では、図19 (a)に示したように新たなprtcl_windnowdirは水平方向を向いていた旧prtcl_windnextdirと同じになる。 【0087】次に、ステップS45で新たな補間終了方向prtcl_windnextdirを決定する。 ステップS37で最も近い仮想的な風が特定できているので、特定されている仮想的な風の風向きwind_dirを用いて補間終了方向pr tcl_windnextdirを決定する。 但し、wind_dirをそのまま使用しないで、wind_dirを中心とした所定のランダム範囲から補間終了方向prtcl_windnextdirを決定する。 【0088】図13乃至図18で説明した例では、第4 の表示フレームにおいても粒子オブジェクト500に最も近い仮想的な風は変わらないので、図19(b)に示すようにwind_dir(=旧prtcl_windnextdir)を中心としたランダム範囲内において、新たなprtcl_windnextdi rが決定される。 第4の表示フレーム以降は、図19 (c)に示したような補間終了方向prtcl_windnextdir が用いられるようになる。 【0089】次に、影響を受ける仮想的な風からの力pr tcl_windpowも、新たな最も近い仮想的な風について(3)式に基づき計算される。 そしてステップS51で最大補間フレーム数も16乃至32のうちのランダムな整数に再設定される。 以下、端子Bを介して図12の処理に移行する。 第4の表示フレーム以降も、図13乃至図18において説明した処理を新たなprtcl_windnowdi r,prtcl_windnextdir,prtcl_windpow,prtcl_windani mfrm,prtcl_windanimfrmmaxを用いて計算する。 【0090】このように、実施の形態1では、仮想三次元空間内のオブジェクトが、プレイヤの操作入力または、予め決められた規則に基づいて移動されると、そのオブジェクトに対応付けられた仮想的な風の影響範囲が移動する。 また、雪を表す粒子オブジェクトと風の影響範囲との位置関係に基づいて、粒子オブジェクトの移動条件が決定される。 すなわち、粒子オブジェクトと風の影響範囲との位置関係が変化すれば、それに応じて粒子オブジェクトの移動条件も変化する。 そして、粒子オブジェクトは、移動条件にしたがって移動する。 【0091】現実の世界で風が発生した場合、その風の強さは場所によって異なる。 また、移動する物体(たとえば、列車)の移動によって発生する風は、その発生場所が逐次移動する。 実施の形態1によれば、風の影響範囲と雪を表す粒子オブジェクトとの関係に応じて、粒子オブジェクトの移動方向や移動速度を変えることができる。 したがって、場所によって強さの異なる風により雪が舞い散るような画像表示を、コンピュータに実行させることができる。 また、風の影響範囲を、時間進行に伴い移動させることができる。 そのため、発生場所が移動する風の影響により雪が舞い散るような画像表示を、コンピュータに実行させることができる。 【0092】(実施の形態2)実施の形態1に示した図10乃至図12の処理フローは様々な変形が可能である。 実施の形態1では、一度最も近い仮想的な風が見つかると、例え最も近い仮想的な風が他の仮想的な風に変わっても、ステップS55乃至S63の処理を現在フレーム番号prtcl_windanimfrmが最大補間フレーム数prtcl _windanimfrmmax以上になるまで繰り返すような処理フローとなっている。 しかし以下に示すように、2度目以降の補間処理において最も近い仮想的な風が他の仮想的な風に変化した場合には、他の仮想的な風に影響を受けるような処理フローに変更することも可能である。 【0093】実施の形態2における処理フローを以下に説明する。 実施の形態2のメイン・フローは図8に示されている限りにおいて同じである。 すなわち最初に、オブジェクトの移動処理が実施される(ステップS1)。 例えば、ユーザによるキーパッド161の操作に応じて又はプログラムから指示に従って、オブジェクトの移動量を計算し、オブジェクトの位置を決定する。 次に、粒子オブジェクトの移動処理が実施される(ステップS 3)。 粒子オブジェクトの移動処理については後に詳しく述べる。 【0094】次にオブジェクトと接触した粒子オブジェクトについては処理対象から除外するための処理が実施される(ステップS5)。 粒子オブジェクトがオブジェクトに接触していると判断されると、当該粒子オブジェクトは処理の対象外とされ、当該粒子オブジェクトのデータはパーティクルデータ・テーブル300から消去される。 【0095】次にオブジェクトの描画処理が行われる(ステップS7)。 オブジェクトについて光源計算及び透視変換が実施され、結果がフレームバッファ112に書き込まれる。 また粒子オブジェクトの描画処理が行われる(ステップS9)。 粒子オブジェクトについて光源計算及び透視変換が実施され、結果がフレームバッファ112に書き込まれる。 そして、フレームバッファ11 2の内容が表示される(ステップS10)。 【0096】その後ゲーム終了か否かが判断される(ステップS11)。 ゲームを終了させるか否かは、例えばユーザがキーパッド161を操作してゲーム終了を命じたか又はゲームのストーリー上ゲーム終了の条件が満たされたかに基づき判断される。 ゲームを終了させない場合には、ステップS1に戻る。 ゲームを終了させる場合には処理を終了させる。 【0097】次に図10、図12及び図20を用いて粒子オブジェクト移動処理を説明する。 最初に、図8のステップS1におけるオブジェクトの移動処理を行っているので、前フレームのオブジェクトの位置と現フレームのオブジェクトの位置からオブジェクトの移動ベクトルが取得される(ステップS23)。 そして、仮想的な風の位置をオブジェクトの移動に伴い移動させるために、 仮想的な風の基準位置wind_posにオブジェクトの移動ベクトルを加算する(ステップS25)。 【0098】次に、粒子オブジェクトのカウンタであるsが1に初期化され(ステップS27)、粒子オブジェクトのカウンタsの値が粒子オブジェクトの個数nを超えたかが判断される(ステップS29)。 もし、全粒子オブジェクトの処理を実施した場合には、処理を終了する。 一方、全ての粒子オブジェクトを処理していない場合には、s番目の粒子オブジェクトについて、prtcl_di r(粒子オブジェクトのデフォルトの移動方向)×prtcl _pow(粒子オブジェクトのデフォルトの移動量)により粒子オブジェクトのデフォルトの移動ベクトルを計算する(ステップS31)。 【0099】そして粒子オブジェクトの位置prtcl_pos に移動ベクトルを加算する(ステップS33)。 加えて、重力が存在する場合には、粒子オブジェクトの位置 prtcl_posに重力ベクトルを加算する(ステップS3 5)。 ここで端子Aを介して図20に移行する。 【0100】図20では、初めての補間を実施中であるかが判断される(ステップS71)。 初めての補間を実施中とは、図12におけるステップS55を少なくとも一度は実施しており且つ現在フレーム番号prtcl_windan imfrmが一度も最大補間フレーム数prtcl_windanimfrmma xに達していない状態を意味する。 よって、一度もステップS55を実施していないような最初の処理においてはステップS73に移行する。 そして、粒子オブジェクトの位置prtcl_posと仮想的な風の基準位置wind_posから最も近い仮想的な風の探索が行われる(ステップS7 3)。 ステップS73では、粒子オブジェクトの位置と各仮想的な風の基準位置との距離を順番に求め、最も小さい値を有する仮想的な風の距離及び当該仮想的な風の番号を保持しておけば、全ての仮想的な風について処理した時点で、最も近い仮想的な風を探し出すことができる。 【0101】次に、最も近い仮想的な風との距離がその影響範囲wind_dist以下であるかが判断される(ステップS75)。 もし、現在処理されている粒子オブジェクトが最も近い仮想的な風の影響範囲に入っていなければ、端子Bを介して図12の処理に移行する。 一方、現在処理されている粒子オブジェクトが最も近い仮想的な風の影響範囲に入っていれば、最も近い仮想的な風が他の仮想的な風に変化したかが判断される(ステップS7 7)。 もし、影響を受ける最も近い仮想的な風に変化がある場合には、ステップS55における補間を、新たに影響を受けるようになった最も近い仮想的な風を基に行うため、現在フレーム番号prtcl_windanimfrmが最大補間フレーム数prtcl_windanimfrmmaxに達したことにする(ステップS79)。 一方、影響を受ける最も近い仮想的な風に変化がない場合には、ステップS81に移行する。 初めて仮想的な風の影響範囲に入った場合にも、影響を受ける最も近い仮想的な風に変化がないと判断される。 【0102】ステップS77の後又はステップS79の後に、現在フレーム番号prtcl_windanimfrmが最大補間フレーム数prtcl_windanimfrmmax以上となっているかが判断される(ステップS81)。 もし、prtcl_windanim frmが最大補間フレーム数prtcl_windanimfrmmax未満である場合には、端子Cを介して図12の処理に移行する。 ステップS55の処理を一度も実施していない場合には、当然最大補間フレーム数に現在フレーム番号が達していないので、図12の処理を先に説明する。 【0103】図12では、端子Bを介してステップS5 3に移行して、ステップS55の補間処理を一度でも行ったことがあるか判断される。 例えば、初めての処理において最も近い仮想的な風の影響範囲に入っていなければ、ステップS53において補間処理を一度も行っていないということになる。 このような場合には、粒子オブジェクトのカウンタであるsが1インクリメントされ(ステップS54)、端子Dを介して図10のステップS29に戻る。 【0104】一方、補間処理を一度でも実行したことがある場合や、prtcl_windanimfrmが最大補間フレーム数p rtcl_windanimfrmmax未満である場合(端子Dの場合) には、当該粒子オブジェクトが受ける現在の風向きprtc l_winddirが計算される(ステップS55)。 prtcl_win ddirは、(1)式に従って計算される。 (1)式は、補間開始方向prtcl_windnowdirから補間終了方向prtcl_wi ndnextdirまでを最大補間フレームに渡って補間することを示している。 prtcl_windnowdirの初期値は、粒子オブジェクトのデフォルトの移動方向prtcl_dirであり、p rtcl_windnextdirの初期値は影響を受ける仮想的な風の風向きwind_dirである。 【0105】次に、現在フレーム番号prtcl_windanimfr mが1インクリメントされる(ステップS57)。 そして、粒子オブジェクトの位置prtcl_posが変更される(ステップS59)。 粒子オブジェクトの位置prtcl_po sは(2)式にて計算される。 【0106】但し、影響を受ける仮想的な風からの力pr tcl_windpowの初期値は、(3)式にて計算される。 (3)式は影響を受ける仮想的な風からの力prtcl_wind dirを仮想的な風の基準位置からの距離に比例して小さくすることを示している。 【0107】粒子オブジェクトの位置を計算するのに用いた、影響を受ける仮想的な風からの力prtcl_windpow は弱められる。 すなわちステップS61において、次回の計算のためにprtcl_windpowは0.99倍されている。 但し、0.99は一例であって1未満の他の値を用いてもよい。 【0108】そして、他の粒子オブジェクトへの処理に移行すべく、粒子オブジェクトのカウンタsの値が1インクリメントされる(ステップS63)。 端子Dを介して図10のステップS29に戻る。 【0109】以上述べたようにステップS55乃至ステップS63の処理は、同じ粒子オブジェクトについて図11のステップS41で現在フレーム番号prtcl_windan imfrmが最大補間フレーム数prtcl_windanimfrmmaxに達したと判断されるまで繰り返される。 【0110】もし、最初の補間処理が終了したと判断される、すなわちprtcl_windanimfrmがprtcl_windanimfrm maxに到達した場合、処理はステップS71からステップS73に移行して、再度最も近い仮想的な風を探す。 もし、粒子オブジェクトが最も近い仮想的な風の影響範囲外である場合には端子Bを介して図12の処理に移行する。 【0111】一方、粒子オブジェクトが最も近い仮想的な風の影響範囲内である場合には、影響を受ける最も近い仮想的な風が変化したかが判断される(ステップS7 7)。 仮想的な風の基準位置及び粒子オブジェクトは移動するので、変化する可能性がある。 もし、影響を受ける最も近い仮想的な風に変化があった場合には、現在フレーム番号prtcl_windanimfrmを最大補間フレーム数prt cl_windanimfrmmaxに達したものと設定する(ステップS79)。 影響を受ける最も近い仮想的な風に変化がなければ、ステップS81に移行する。 【0112】そしてステップS81ではprtcl_windanim frm≧prtcl_windanimfrmmaxか判断する。 prtcl_windani mfrm≧prtcl_windanimfrmmaxと判断された場合には、現在フレーム番号prtcl_windanimfrmが0にリセットされる(ステップS83)。 そして、補間開始方向prtcl_wi ndnowdirに今までの補間終了方向prtcl_windnextdirが代入される(ステップS85)。 また、補間終了方向pr tcl_windnextdirに、最も近い仮想的な風の風向きwind_ dirを所定の範囲でランダムに変更した方向が代入される(ステップS87)。 【0113】そして、影響を受ける仮想的な風からの力 prtcl_windpowが上で述べた(1)式で計算し直される(ステップS89)。 また、最大補間フレーム数prtcl_ windanimfrmmaxに例えば16乃至32のランダムな整数が代入される(ステップS91)。 この後ステップS8 3乃至S91にて設定した新たな条件の下、端子Bを介して接続される図12の処理を実施する。 【0114】図13乃至図19で説明した例は、実施の形態2でも同様である。 但し、仮想的な風の数が複数の場合には、prtcl_windanimfrmが最初にprtcl_windanimf rmmaxになった後は、prtcl_windnowdirとprtcl_windnex tdirとが頻繁に変更される可能性がある。 【0115】以上述べたように、本実施の形態により、 仮想三次元空間内における仮想的な風の影響範囲を、当該風に予め対応付けられたオブジェクトの移動に伴い移動し(ステップS23及びS25)、各粒子オブジェクトが、移動された仮想的な風の影響範囲に基づき仮想的な風から影響を受けるか否か判断する(ステップS37 及びS39)。 そして、影響を与える仮想的な風の風向きに応じて、影響を受けると判断された粒子オブジェクトの位置を決定し(ステップS55及びステップS5 9)、決定された粒子オブジェクトの位置に、影響を受けると判断された粒子オブジェクトを表示する(ステップS10)。 【0116】このようにすれば、オブジェクトの移動に伴い仮想的な風も移動し、移動した風に影響を受ける粒子オブジェクトが仮想的な風の風向きに応じて移動する。 よって、あたかもオブジェクトの移動により風が発生したように画面に表示されるため、より現実の世界に近い表現を行うことができるようになる。 【0117】また、影響を受けると判断された粒子オブジェクトの位置を、影響を与える仮想的な風の風向き及び風の強さに応じて決定したり、重力を考慮して決定したりする。 これにより、強い風や弱い風をも表現でき、 また例えば雪が舞い散っても最終的には地面に落ちてくるような様子を画面に表示することができるようになる。 なお、風の強さを仮想的な風が対応付けられているオブジェクトの移動速度等に関連付けるような態様も可能である。 【0118】さらに、影響を受けると判断された粒子オブジェクトの位置を、(3)式に表されるように、影響を与える仮想的な風の風向き及び当該仮想的な風の基準位置と影響を受けると判断された粒子オブジェクトとの距離に基づく風の強さに応じて決定すれば、単純な風の強さだけでなく、例えば仮想的な風の基準位置から遠い粒子オブジェクトは当該仮想的な風からあまり影響を受けないということを画面上に表現することができるようになる。 【0119】さらに加えて、影響を受けると判断された粒子オブジェクトの位置を、仮想的な風と影響を受けると判断された粒子オブジェクトとの距離に基づく風の強さを表示フレーム毎に弱めるような構成を採用したり、 ランダムに最大補間フレーム数を決定したりすると、粒子オブジェクトの例である雪が舞い落ちる様子をよりリアリスティックに表現できるようになる。 【0120】加えて、影響を受けると判断された粒子オブジェクトの位置を、(1)式で表現されるように、影響を与える仮想的な風の風向きと粒子オブジェクトが前に受けた力の向きとを所定表示フレームに渡って補間させ、当該補間により得られる方向に応じて、当該影響を受けると判断された粒子オブジェクトの位置を決定すれば、粒子オブジェクトの例である雪の舞い散り方が微妙に変化するため、よりリアリスティックな画像を生成できるようになる。 【0121】(他の実施の形態) (1)図12の処理の最初にステップS53において補間処理を一度でも行ったことがあるか判断しているが、 この判断を行わなくともよい。 例えば、仮想的な風から影響を受けていない場合には、影響を受けた仮想的な風のからの力prtcl_windpowを0にすればよい。 又は、 (3)式が負の値となる場合には0とするような扱いでもよい。 現在フレーム番号prtcl_windanimfrmや、prtcl _winddir等の値は変化してしまうが、粒子オブジェクトは仮想的な風の影響では移動しないため、特別な影響はない。 【0122】(2)図8のステップS7とステップS9 は順番を入れ替えても表示内容に変化は無い。 【0123】(3)実施の形態1及び2では重力の存在を前提としているが、重力が存在しないような状態を想定することも可能である。 例えば煙オブジェクトの場合には、重力に従って下に落ちるわけではなく、上方向に移動する。 【0124】(4)図1は一例であって、様々な変更が可能である。 通信インターフェース115を備えるか否かは任意である。 本発明は直接サウンド処理には関係しないので、サウンド処理部109を備えている必要は無い。 【0125】また、CD−ROMは記録媒体の一例であって、ROMのような内部メモリ、CD−ROM、DV D−ROM、メモリカートリッジ、フロッピーディスク、磁気ディスク、DVD−RAM等の他の記録媒体であってもよい。 その場合にはCD−ROMドライブ11 3を、対応する媒体で読み出し可能なドライブにする必要がある。 【0126】さらに、以上は本発明をコンピュータ・プログラムにより実装した場合であるが、コンピュータ・ プログラムと電子回路などの専用の装置の組み合せ、又は電子回路などの専用の装置のみによっても実装することは可能である。 【0127】以上、本発明を実施の形態に基づいて具体的に説明したが、本発明は上記実施の形態に限定されるものではない。 要旨を逸脱しない範囲で適宜変更可能である。 例えば、上記実施の形態では、家庭用ゲーム機をプラットフォームとして本発明を実現した場合について述べたが、本発明は通常のコンピュータ、アーケードゲーム機などをプラットフォームとして実現しても良い。 また、携帯情報端末、カーナビゲーション・システム等をプラットフォームにして実現することも考えられる。 【0128】また、本発明を実現するためのプログラムやデータは、コンピュータやゲーム機に対して着脱可能なCD−ROM等の記録媒体により提供される形態に限定されない。 すなわち、本発明を実現するためのプログラムやデータを、図1に示す通信インターフェース11 5、通信回線141を介して接続されたネットワーク1 51上の他の機器側のメモリに記録し、プログラムやデータを通信回線141を介して必要に応じて順次RAM 105に格納して使用する形態であってもよい。 【0129】(表示例)図21に本発明に従って粒子オブジェクトである雪を降らせた状態の表示例を示す。 雪a乃至hには、見やすくするために矢印を付している。 これら雪a乃至hはオブジェクトである列車400の紙面奥への移動に伴い発生する仮想的な風により影響を受けている。 キャラクタ600は列車400を追いかけて走っているが、キャラクタ600にも仮想的な風を定義して雪の移動に影響を与えるような設定をすることも可能である。 【0130】 【発明の効果】以上述べたように本発明によれば、オブジェクトの移動に応じて生じる風に影響を受ける他のオブジェクトの振る舞いを、よりリアリティをもって表現することができるようになる。 【図面の簡単な説明】 【図1】家庭用ゲーム機のブロック構成図である。 【図2】本発明に係るゲームプログラム実行時におけるRAMの状態を示す模式図である。 【図3】風データ・テーブルの一例を示す図である 【図4】パーティクルデータ・テーブルの一例を示す図である。 【図5】本発明の原理を説明するための模式図(その1)である。 【図6】本発明の原理を説明するための模式図(その2)である。 【図7】本発明の原理を説明するための模式図(その3)である。 【図8】本発明の処理のメインフローを示すフローチャートである。 【図9】オブジェクトの粒子オブジェクトが接触したか判定するための処理を説明するための模式図である。 【図10】実施の形態1及び2における粒子オブジェクト移動処理のフローチャート(その1)である。 【図11】実施の形態1における粒子オブジェクト移動処理のフローチャート(その2)である。 【図12】実施の形態1及び2における粒子オブジェクト移動処理のフローチャート(その3)である。 【図13】1つの粒子オブジェクトと1つの仮想的な風が存在する場合において、当該粒子オブジェクトがどのように移動するかを説明するための模式図(その1)である。 【図14】補間開始方向prtcl_windnowdirと補間終了方向prtcl_windnextdirの補間を説明するための模式図である。 【図15】1つの粒子オブジェクトと1つの仮想的な風が存在する場合において、当該粒子オブジェクトがどのように移動するかを説明するための模式図(その2)である。 【図16】1つの粒子オブジェクトと1つの仮想的な風が存在する場合において、当該粒子オブジェクトがどのように移動するかを説明するための模式図(その3)である。 【図17】1つの粒子オブジェクトと1つの仮想的な風が存在する場合において、当該粒子オブジェクトがどのように移動するかを説明するための模式図(その4)である。 【図18】1つの粒子オブジェクトと1つの仮想的な風が存在する場合において、当該粒子オブジェクトがどのように移動するかを説明するための模式図(その5)である。 【図19】新たな補間開始方向と新たな補間終了方向を説明するための模式図である。 【図20】実施の形態2における粒子オブジェクト移動処理のフローチャート(その2)である。 【図21】本発明を使用した場合における表示画面例を示す。 【符号の説明】 101 家庭用ゲーム機 103 CPU 104 ROM 105 RAM 107 HDD 109 サウンド処理部 112 フレームバッファ 111 グラフィックス処理部 113 CD−ROMドライブ 115 通信インターフェース 117 インターフェース部 119 内部バス 121 TVセット 120 表示画面 131 CD−ROM 141 通信媒体 151 ネットワーク 161 キーパッド 17 1 メモリカード 200 オブジェクト・データ 2100 モデルデータ 2200 風データ・テーブル 300 パーティクルデータ・テーブル |