説明

衝突判定プログラムおよび衝突判定装置

【課題】衝突判定に要する計算量の増加を抑えながら、状況に応じた適切な衝突判定を可能とすること。
【解決手段】仮想3次元空間における犬のオブジェクトに対して、犬またはその周囲の状態に応じて、例えば、四つんばいの状態においては中心が犬の胸部にあり半径が30の球体を衝突判定領域として設定し、立ち上がっている状態においては中心が腰部にあり半径が10の球体を衝突判定領域として設定し、仮想3次元空間における他の犬とじゃれ合おうとしている状態においては中心が頭部にあり半径が10の球体を衝突判定領域として設定する。こうして設定した衝突判定領域を利用して他のオブジェクトとの衝突判定を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、2次元画像として表示される仮想空間のオブジェクト同士の衝突を判定する技術に関する。
【背景技術】
【0002】
仮想3次元空間の3次元のオブジェクト群を球体等の立体形状で近似し、当該近似した立体形状(球体等)同士が重複しているか否かでオブジェクト同士の衝突を判定する技術がある。この技術によると、オブジェクトを正確に反映した形状を使用して衝突判定を行う場合に比べて、衝突判定に必要な計算量を軽減することができる。
【0003】
特許文献1には、オブジェクトを楕円面体で近似したものが示されている。特許文献2には、オブジェクトの形状を球体で近似してラフなチェックを行った後、干渉の可能性があるものについては、さらに少なくとも1つの基本的な立体形状で近似して精密なチェックを行う技術が示されている。特許文献3には、オブジェクトの形状を多数の球体で近似したものが示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平10−165648号公報
【特許文献2】特開平7−152807号公報
【特許文献3】特開平7−230559号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1の技術の場合、単なる球体で近似する場合に比べると精度良く衝突判定できる場合があるものの、状況によっては衝突判定を適切に行えない場合も少なくないと考えられる。特許文献2の技術の場合、ラフなチェックに加えて精密なチェックを行う必要があるので、計算量が増加するという問題がある。特許文献3の技術の場合も、1つのオブジェクトにつき多数の球体について衝突判定を行う必要があるので、計算量が増加するという問題がある。
【0006】
それ故に、本発明の主たる目的は、衝突判定に要する計算量の増加を抑えながら、状況に応じた適切な衝突判定を可能とすることである。
【課題を解決するための手段】
【0007】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号、図番号および文言は、本発明の理解を助けるために図面との対応関係の一例を示したものであって、本発明の範囲を何ら限定するものではない。
【0008】
本発明の第1の局面は、表示手段(12)に表示される仮想空間における第1オブジェクト(犬A)と第2オブジェクト(犬B)の衝突を判定するための衝突判定プログラムである。この衝突判定プログラム(41)は、コンピュータ(21)に、更新ステップ(S12)、第1設定ステップ(S16)、第2設定ステップ(S16)、および衝突判定ステップ(S22)を実行させるためのプログラムである。更新ステップは、記憶手段(24)に格納されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報(51)を更新するステップである。第1設定ステップは、前記第1オブジェクトに対して、当該第1オブジェクトの形状とは異なる形状の衝突判定領域であって、当該第1オブジェクトの状態または当該第1オブジェクトの周辺の状態(図7の状態A〜状態F)に応じて大きさ及び/又は位置の異なる衝突判定領域(図8A〜図8F)を設定するステップである。第2設定ステップは、前記第2オブジェクトに対して衝突判定領域を設定するステップである。衝突判定ステップは、前記第1設定ステップで設定された前記第1オブジェクトの衝突判定領域と前記第2設定ステップで設定された前記第2オブジェクトの衝突判定領域とが重複しているか否かを判定することによって当該第1オブジェクトと当該第2オブジェクトの衝突を判定するステップである。なお、仮想空間は2次元であっても3次元であっても良い。また、第1オブジェクトや衝突判定領域についても2次元であっても3次元であってもよい。また、衝突判定領域としては、例えば球体、直方体、円柱、楕円体などの形状のものを利用することができる。また、第1オブジェクトに設定される衝突判定領域は1つであってもよいし複数であってもよい。また、第1オブジェクトの衝突判定領域の「位置」とは、第1オブジェクトに対する相対的な位置を指すものとする。また、第2オブジェクトの衝突判定領域としては、第2オブジェクトとは異なる形状の領域を第2オブジェクトの衝突判定領域として設定してもよいし、第2オブジェクトの形状そのものを第2オブジェクトの衝突判定領域として流用してもよい。
【0009】
本発明の第2の局面は、上記第1の局面において、前記第1設定ステップで前記第1オブジェクトに対して設定される衝突判定領域が、当該第1オブジェクトの形状よりも簡素な形状であることを特徴とする。
【0010】
本発明の第3の局面は、上記第1の局面において、前記第1設定ステップで前記第1オブジェクトに対して設定される衝突判定領域が、1つの球体のみで構成されることを特徴とする。
【0011】
本発明の第4の局面は、上記第1の局面において、前記第1設定ステップでは、前記第1オブジェクト(犬A)に対して、当該第1オブジェクトと別のオブジェクトである第3オブジェクト(フリスビー)とが結合しているとき(図7の状態E、図8E)と結合していないとき(図8A)とで大きさ及び/又は位置の異なる衝突判定領域が設定されることを特徴とする。なお、第1オブジェクトと第3オブジェクトが「結合する」とは、第1オブジェクトと第3オブジェクトが互いに接触または交わった状態で一体となって存在する状態を指すものとする。
【0012】
本発明の第5の局面は、上記第4の局面において、前記第1設定ステップでは、前記第1オブジェクトに対して、当該第1オブジェクトと別のオブジェクトである第3オブジェクトとが結合しているときに、当該第3オブジェクトの少なくとも一部を含むような衝突判定領域が設定されることを特徴とする(図8E)。
【0013】
本発明の第6の局面は、前記第1の局面において、前記第1設定ステップでは、前記第1オブジェクトに対して、当該第1オブジェクトが他のオブジェクトとの接触を許容されている状態のとき(図7の状態D、図8D)には、接触を許容されていない状態のとき(図8A)と比べて小さい衝突判定領域が設定されることを特徴とする。なお、「他のオブジェクトとの接触を許容されている状態」とは、他のオブジェクトに対して通常よりも大きく接近することが許されている状態を指し、例えば、第1オブジェクトが犬である場合には、この犬が他の犬とじゃれ合おうとしている状態を指す。
【0014】
本発明の第7の局面は、前記第1の局面において、前記第1設定ステップでは、前記第1オブジェクトに対して、当該第1オブジェクトの現在位置または当該第1オブジェクトと他のオブジェクトとの位置関係に応じて、大きさ及び/又は位置の異なる衝突判定領域が設定されることを特徴とする。
【0015】
本発明の第8の局面は、前記第1の局面において、前記第1設定ステップは、前記記憶手段から所定の大きさおよび位置に設定された前記第1オブジェクトの基本衝突判定領域を読み出す読み出しステップと、当該読み出した基本衝突判定領域の大きさ及び/又は位置を当該第1オブジェクトの状態または当該第1オブジェクトの周辺の状態に応じて変更する変更ステップとを含むことを特徴とする。なお、変更ステップは、想定される前記第1オブジェクトの状態または当該第1オブジェクトの周辺の状態毎に前記衝突判定領域の大きさおよび位置の変化量(基本衝突判定領域からの変化量)を規定したテーブルを参照して基本衝突判定領域の大きさ及び/又は位置を変更するものであってもよい。また、上記テーブルにおける「基本衝突判定領域からの変化量」は、数値そのもので規定されていてもよいし、変化量を求めるための関数で規定されていてもよい。
【0016】
本発明の第9の局面は、前記1の局面において、前記第1設定ステップでは、想定される前記第1オブジェクトの状態または当該第1オブジェクトの周辺の状態毎に前記衝突判定領域の大きさおよび位置を規定した衝突判定領域テーブル(44、図7)を参照することによって、前記第1オブジェクトの衝突判定領域が設定されることを特徴とする。なお、衝突判定テーブルにおける「衝突判定領域の大きさおよび位置」は、大きさおよび位置を表す値そのもので規定されていてもよいし、大きさおよび位置を求めるための関数で規定されていてもよい。
【0017】
本発明の第10の局面は、前記第1の局面において、前記衝突判定プログラムは、前記コンピュータに、さらに移動ステップ(S30)および出力ステップ(S34)を実行させることを特徴とする。移動ステップは、前記衝突判定ステップで前記第1オブジェクトと前記第2オブジェクトの衝突が検出されたときに、前記記憶手段に格納されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報(51)をさらに更新することによって、前記第1オブジェクトの衝突判定領域と前記第2オブジェクトの衝突判定領域とが重複しないような位置に当該第1オブジェクトおよび当該第2オブジェクトの少なくとも1つを移動させるステップである。出力ステップは、前記記憶手段に格納されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報(51)を参照して前記第1オブジェクトおよび前記第2オブジェクトを含む画像を生成して前記表示手段に出力するステップである。
【0018】
本発明の第11の局面は、表示手段に表示される仮想空間における第1オブジェクトと第2オブジェクトの衝突を判定するための衝突判定装置である。この衝突判定装置(10)は、前記表示手段(12)、記憶手段(24)、更新手段(21、S12)、第1設定手段(21、S16)、第2設定手段(21、S16)、および衝突判定手段(21、S22)を備える。記憶手段は、少なくとも前記第1オブジェクトおよび前記第2オブジェクトの位置情報(51)を記憶する手段である。更新手段は、前記記憶手段に記憶されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報を更新する手段である。第1設定手段は、前記第1オブジェクトに対して、当該第1オブジェクトの形状とは異なる形状の衝突判定領域であって、当該第1オブジェクトの状態または当該第1オブジェクトの周辺の状態(図7の状態A〜状態F)に応じて大きさ及び/又は位置の異なる衝突判定領域(図8A〜図8F)を設定する手段である。第2設定手段は、前記第2オブジェクトに対して衝突判定領域を設定する手段である。衝突判定手段は、前記第1オブジェクトの衝突判定領域と前記第2オブジェクトの衝突判定領域とが重複しているか否かを判定することによって当該第1オブジェクトと当該第2オブジェクトの衝突を判定する手段である。
【発明の効果】
【0019】
上記第1の局面によれば、第1オブジェクトの衝突判定領域の大きさと位置の少なくとも一方が、当該第1オブジェクト又は周囲の状態に応じて変化するので、第1オブジェクト又は周囲の状態に応じて適切な衝突判定を行い得る。
【0020】
上記第2の局面によれば、第1オブジェクトの形状よりも単純な形状を用いて衝突判定を行うので、衝突判定に要する計算量を削減することができる。
【0021】
上記第3の局面によれば、衝突判定に要する計算量を大きく削減することができる。
【0022】
上記第4の局面によれば、第1オブジェクトと第3オブジェクトが結合しているか否かに応じて、第1オブジェクトの衝突判定領域を適切に設定することができる。
【0023】
上記第5の局面によれば、第1オブジェクトと第3オブジェクトが結合しているときに、第3オブジェクトの一部または全部を含むように第1オブジェクトの衝突判定領域が設定されるので、この衝突判定領域を利用して他のオブジェクトとの衝突判定を行うことによって、第3オブジェクトと他のオブジェクトとの間の衝突判定を省略できる。したがって、第1オブジェクトと他のオブジェクトとの間の衝突判定と、第3オブジェクトと他のオブジェクトとの間の衝突判定とを個別に行う必要がなくなり、衝突判定に要する計算量を削減することができる。
【0024】
上記第6の局面によれば、例えば第1オブジェクトと他のオブジェクトとの接触が許容されているにもかかわらず、両オブジェクトが離れた状態でしか表示されないというような不都合を回避できる。
【0025】
上記第7の局面によれば、例えば第1オブジェクトが障害物に挟まれた細い通路に近づいたときなどに、第1オブジェクトの衝突判定領域を適切に設定することができる。
【0026】
上記第8の局面によれば、基本となる衝突判定領域の大きさや位置を適宜に変更することで、上記第1の局面と同様の効果を得ることができる。
【0027】
上記第9の局面によれば、衝突判定領域テーブルを参照することによって衝突判定領域を適切に設定することができる。
【0028】
上記第10の局面によれば、衝突判定の結果に基づいてオブジェクト同士が干渉しないようにそれらの位置を制御しつつ、各オブジェクトを画面に表示することができる。
【図面の簡単な説明】
【0029】
【図1】本発明の一実施形態に係るゲーム装置の外観図
【図2】本発明の一実施形態に係るゲーム装置の内部構成を示すブロック図
【図3】RAMのメモリマップ
【図4】仮想3次元空間における仮想カメラとオブジェクトの配置の一例
【図5】第2のLCDに表示されるゲーム画面の一例
【図6】オブジェクト情報の一例
【図7】衝突判定領域テーブルの一例
【図8A】四つんばいの状態における衝突判定領域の設定例
【図8B】立ち上がっている状態における衝突判定領域の設定例
【図8C】座っている状態における衝突判定領域の設定例
【図8D】他の犬とじゃれ合おうとしている状態における衝突判定領域の設定例
【図8E】フリスビーをくわえている状態における衝突判定領域の設定例
【図8F】狭い通路を通ろうとしている状態における衝突判定領域の設定例
【図9】ゲーム装置の動作を示すフローチャート
【図10】衝突判定領域設定処理の詳細を示すフローチャート
【図11】衝突判定方法および移動ベクトルの計算方法を示す図
【図12】合成移動ベクトルの計算方法を示す図
【発明を実施するための形態】
【0030】
以下、本発明の一実施形態に係るゲーム装置の構成および動作を説明する。
【0031】
図1は、本発明の一実施形態に係るゲーム装置の外観図である。図1において、ゲーム装置10は、第1のLCD(Liquid Crystal Display:液晶表示装置)11および第2のLCD12を含む。ハウジング13は上側ハウジング13aと下側ハウジング13bとによって構成されており、第1のLCD11は上側ハウジング13aに収納され、第2のLCD12は下側ハウジング13bに収納される。第1のLCD11および第2のLCD12の解像度はいずれも256dot×192dotである。なお、本実施形態では表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置など、他の任意の表示装置を利用することができる。また任意の解像度のものを利用することができる。
【0032】
上側ハウジング13aには、後述する1対のスピーカ(図2の30a、30b)からの音を外部に放出するための音抜き孔18a、18bが形成されている。
【0033】
下側ハウジング13bには、入力装置として、十字スイッチ14a、スタートスイッチ14b、セレクトスイッチ14c、Aボタン14d、Bボタン14e、Xボタン14f、Yボタン14g、Lボタン14LおよびRボタン14Rが設けられている。また、さらなる入力装置として、第2のLCD12の画面上にタッチパネル15が装着されている。また、下側ハウジング13bには、電源スイッチ19や、メモリカード17やスティック16を収納するための挿入口も設けられている。
【0034】
タッチパネル15としては、例えば抵抗膜方式や光学式(赤外線方式)や静電容量結合式など、任意の方式のものを利用することができる。タッチパネル15は、その表面をスティック16で触れると、その接触位置に対応する座標データを出力する機能を有している。なお、以下ではプレイヤがタッチパネル15をスティック16で操作するものとして説明を行うが、スティック16の代わりにペン(スタイラスペン)や指でタッチパネル15を操作することももちろん可能である。本実施形態では、タッチパネル15として、第2のLCD12の解像度と同じく256dot×192dotの解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル15の解像度と第2のLCD12の解像度が一致している必要はない。
【0035】
メモリカード17はゲームプログラムを記録した記録媒体であり、下部ハウジング13bに設けられた挿入口に着脱自在に装着される。
【0036】
次に、図2を参照してゲーム装置10の内部構成を説明する。
【0037】
図2において、ハウジング13に収納される電子回路基板20には、CPUコア21が実装される。CPUコア21には、バス22を介して、コネクタ23が接続されるとともに、入出力インターフェース回路(図面ではI/F回路と記す)25、第1GPU(Graphics Processing Unit)26、第2GPU27、RAM24およびLCDコントローラ31が接続される。コネクタ23には、メモリカード17が着脱自在に接続される。メモリカード17は、ゲームプログラムを記憶するROM17aと、バックアップデータを書き換え可能に記憶するRAM17bを搭載する。メモリカード17のROM17aに記憶されたゲームプログラムはRAM24にロードされ、RAM24にロードされたゲームプログラムがCPUコア21によって実行される。RAM24には、ゲームプログラムの他にも、CPUコア21がゲームプログラムを実行して得られる一時的なデータや、ゲーム画像を生成するためのデータが記憶される。I/F回路25には、タッチパネル15、右スピーカ30a、左スピーカ30bおよび図1の十字スイッチ14aやAボタン14d等から成る操作スイッチ部14が接続される。右スピーカ30aと左スピーカ30bは、音抜き孔18a、18bの内側にそれぞれ配置される。
【0038】
第1GPU26には、第1VRAM(Video RAM)28が接続され、第2GPU27には、第2VRAM29が接続される。第1GPU26は、CPUコア21からの指示に応じて、RAM24に記憶されているゲーム画像を生成するためのデータに基づいて第1のゲーム画像を生成し、第1VRAM28に描画する。第2GPU27は、同様にCPUコア21からの指示に応じて第2のゲーム画像を生成し、第2VRAM29に描画する。第1VRAM28および第2VRAM29はLCDコントローラ31に接続されている。
【0039】
LCDコントローラ31はレジスタ32を含む。レジスタ32はCPUコア21からの指示に応じて0または1の値を記憶する。LCDコントローラ31は、レジスタ32の値が0の場合は、第1VRAM28に描画された第1のゲーム画像を第1のLCD11に出力し、第2VRAM29に描画された第2のゲーム画像を第2のLCD12に出力する。また、レジスタ32の値が1の場合は、第1VRAM28に描画された第1のゲーム画像を第2のLCD12に出力し、第2VRAM29に描画された第2のゲーム画像を第1のLCD11に出力する。
【0040】
なお、上記のようなゲーム装置10の構成は単なる一例に過ぎず、本発明は、表示装置を有する任意の情報処理装置に適用することができる。また、本発明のゲームプログラムは、メモリカード17などの外部記憶媒体を通じて情報処理装置に供給されるだけでなく、有線または無線の通信回線を通じて情報処理装置に供給されてもよいし、さらには情報処理装置内部の不揮発性記憶装置に予め記録されていてもよい。
【0041】
図3に、RAM24のメモリマップを示す。RAM24の記憶領域は、大きく分けると、プログラム記憶領域とデータ記憶領域から成る。
【0042】
プログラム記憶領域には、メモリカード17のROM17aからゲームプログラム41がロードされる。このゲームプログラムには、例えば、仮想3次元空間内のオブジェクトを所定のアルゴリズムにしたがって自動制御するプログラムコードや、後述する衝突判定領域を用いた衝突判定処理を所定の衝突判定式を用いて行うプログラムコードなどが含まれている。
【0043】
データ記憶領域には、カメラ設定情報42、オブジェクト情報43、および衝突判定領域テーブル44が格納される。
【0044】
カメラ設定情報42は、仮想3次元空間に配置される仮想カメラに関する種々の設定値から成る情報であって、例えば、仮想カメラの配置座標、傾き(回転角度)、向き(視線方向)、視野角などである。図4に、仮想3次元空間における仮想カメラの配置例を示す。第2のLCD12には、仮想3次元空間に配置されたオブジェクト(図4の例では犬A、犬Bおよび地面)を仮想カメラから見たシーンがゲーム画像として表示される。図5は、図4の仮想カメラに基づいて第2のLCD12に表示されたゲーム画像を示している。仮想カメラに基づいて仮想3次元空間の画像を生成する方法は周知技術であるため、ここではその詳細な説明は省略するが、簡単に説明すると、ワールド座標系で表されている各オブジェクトの頂点座標(より正確にはオブジェクトを構成するポリゴンの頂点座標)を仮想カメラを基準としたカメラ座標系に変換し、さらに透視投影変換を行うことによってそれらの頂点座標がスクリーン座標系に変換される。
【0045】
オブジェクト情報43は、仮想3次元空間に配置されるオブジェクトに関する種々の情報である。このオブジェクト情報43の詳細を図6に示す。本実施形態では、仮想3次元空間に配置され得るオブジェクトとして、犬A、犬B、犬C、フリスビー、壁A、および壁Bが用意されているものとする。本実施形態では、仮想3次元空間に配置された犬は、所定の自動制御アルゴリズムに従って、まるで自分の意志で動いているかのように仮想3次元空間内を自律的に移動するものとする。
【0046】
犬Aのオブジェクト情報43としては、図6に示すように、形状データ、テクスチャデータ、配置座標51、状態データ52、および衝突判定領域データ53から成る。
【0047】
形状データは、オブジェクトの形状に関するデータであって、例えばオブジェクトを構成するポリゴンの頂点座標などである。テクスチャデータは、オブジェクトを構成するポリゴンに貼り付けられる画像データである。
【0048】
配置座標51は、仮想3次元空間における犬Aの配置座標であって、前述の自動制御アルゴリズムに基づいて随時更新される。
【0049】
状態データ52は、犬Aの状態または犬Aの周囲の状態を示すデータである。本実施形態では、犬Aまたはその周囲の状態は、図7に示すように6つの状態(状態A〜F)に区分される。この状態データ52についても、配置座標51と同様に、前述の自動制御アルゴリズムに基づいて随時更新される。
【0050】
衝突判定領域データ53は、犬Aと他のオブジェクトとの接触を判定するために犬Aに設定される衝突判定領域の位置および大きさを表すデータである。本実施形態では、犬A〜犬Cについては、球体の衝突判定領域を用いて衝突判定処理が行われるものとする。そのため、衝突判定領域データ53としては、少なくとも、犬Aの衝突判定領域として用いられる球体の中心座標と半径が記憶されていればよい。
【0051】
犬Bおよび犬Cについても、オブジェクト情報43として犬Aと同様の情報が記憶される。
【0052】
フリスビーのオブジェクト情報43としては、形状データ、テクスチャデータ、配置座標、および衝突判定領域データが記憶されている。形状データ、テクスチャデータおよび配置座標については犬のものと同様である。フリスビーの衝突判定領域としては任意の形状のものを利用することができるが、ここでは一例として円盤状の衝突判定領域を用いるものとする。フリスビーの衝突判定領域データとしては、この円盤状の衝突判定領域の位置および形状を示すデータが記憶される。なお、フリスビーの形状データ自体を衝突判定領域データとして流用することもできる。
【0053】
壁Aおよび壁Bのオブジェクト情報43についても、フリスビーと同様の情報が記憶される。
【0054】
図3に示す衝突判定領域テーブル44は、各犬に対して設定すべき衝突判定領域を決定するために参照されるテーブルである。この衝突判定領域テーブル44の詳細を図7に示す。
【0055】
衝突判定領域テーブル44では、図7に示すように、状態A〜F毎に、衝突判定領域の中心位置・半径がそれぞれ規定されている。
【0056】
例えば、状態A(四つんばいの状態)に対しては、衝突判定領域として、図8Aに示すように中心が犬の胸部に位置し、半径が30である球体が対応付けられている。
【0057】
また、状態B(立ち上がっている状態)に対しては、衝突判定領域として、図8Bに示すように中心が犬の腰部に位置し、半径が10である球体が対応付けられている。このように、犬が立ち上がっている状態のときには四つんばいの状態のときよりも衝突判定領域の大きさを小さくし、さらにその位置を足下に近づけることで、立ち上がっている犬に対して他の犬が適切な距離まで接近することができ、犬の動きに違和感が無くなる。
【0058】
また、状態C(座っている状態)に対しては、衝突判定領域として、図8Cに示すように中心が犬の胸部に位置し、半径が20である球体が対応付けられている。このように、犬が座っている状態のときには四つんばいの状態のときよりも衝突判定領域の大きさを小さくすることで、座っている犬に対して他の犬が適切な距離まで接近することができ、犬の動きに違和感が無くなる。
【0059】
また、状態D(他の犬とじゃれ合おうとしている状態)に対しては、衝突判定領域として、図8Dに示すように中心が犬の胸部に位置し、半径が10である球体が対応付けられている。このように、犬が互いにじゃれ合おうとしている(すなわち通常よりも大きく接近しようとしている)状態のときには四つんばいの状態のときよりも衝突判定領域の大きさを小さくすることで、プレイヤから見て2匹の犬がじゃれ合っているように見える距離まで他の犬に接近することができ、犬の動きに違和感が無くなる。
【0060】
また、状態E(フリスビーをくわえている状態)に対しては、衝突判定領域として、図8Eに示すように中心が犬の頭部に位置し、半径が40である球体が対応付けられている。これにより、例えば、フリスビーと犬Bの衝突判定と、犬Aと犬Bの衝突判定という2つの衝突判定を、犬Aと犬Bの衝突判定だけで代用することができるため、衝突判定に要する計算量を削減することができる。
【0061】
また、状態F(狭い通路に近づいている状態)に対しては、衝突判定領域として、図8Fに示すように中心が犬の胸部に位置し、半径が10である球体が対応付けられている。これにより、見掛けでは通路を通り抜けられそうに見えるにも関わらず、犬が通路の手前でつっかえて立ち止まってしまう、という不自然な状況の発生を防止することができる。
【0062】
以下、図9〜図10のフローチャートを参照して、ゲームプログラム41に基づくCPUコア21の処理の流れを説明する。
【0063】
図9において、ゲームプログラム41の実行が開始されると、CPUコア21はステップS10で、仮想3次元空間において仮想カメラとオブジェクトを初期位置に配置する。
【0064】
ステップS12では、所定の自動制御アルゴリズムに従って各犬の動き(行動パターン)が決定され、決定された動きに従って各犬の位置(配置座標51)や姿勢が適宜更新されることになる。
【0065】
ステップS14では、その時点における犬の姿勢(四つんばい、立ち上がっている、座っている、フリスビーを加えている)や、自動制御アルゴリズムで決定された犬の行動パターン(他の犬とじゃれ合おうとしている、狭い通路を通ろうとしている)に従って各犬の状態を判定し、この判定結果に応じてRAM24の状態データ52を更新する。
【0066】
ステップS16では、ステップS14で判定された各犬の状態に基づいて衝突判定領域設定処理を行う。以下、図10のフローチャートを参照して、この衝突判定領域設定処理の詳細を説明する。
【0067】
図10において、衝突判定領域設定処理が開始されると、CPUコア21はステップS40で、衝突判定領域を設定すべき対象となる犬を選択する。ここでは、犬Aが処理対象として選択されたものとして説明を進める。
【0068】
ステップS42では、処理対象である犬Aの状態データ52をRAM24から読み出す。
【0069】
ステップS44では、RAM24に記憶されている図7の衝突判定領域テーブルを参照して、ステップS42で読み出した状態データ52に対応する衝突判定領域の中心位置および半径を取得し、取得した中心位置および半径に基づいて、犬Aの衝突判定領域データ53を更新する。なお、図7の衝突判定領域テーブルの中心位置は犬に対する相対位置によって規定されているのに対し、RAM24に格納される衝突判定領域データの中心座標はワールド座標系で表されるため、ステップS44では衝突判定領域テーブルの中心位置をワールド座標系に変換するための処理が行われることになる。
【0070】
ステップS46では、犬A〜犬Cの全ての犬について衝突判定領域の設定が終了したかどうかを判断し、全ての犬について設定が完了していれば衝突判定領域設定処理を終了して図9のステップS18に進み、まだ設定が完了していない犬がいる場合にはステップS40に戻って、その犬を処理対象として犬Aと同様の処理を行う。その結果、全ての犬について、RAM24の衝突判定領域データ53が更新されることとなる。
【0071】
図9におけるステップS18では、衝突判定処理の対象となる犬を選択する。ここでは、犬Aが処理対象として選択されたものとして説明を進める。
【0072】
ステップS20では、処理対象である犬Aを除いた他のオブジェクトの中から、この犬Aとの衝突判定を行うべき対象となるオブジェクトを1つ選択する。ここでは、犬Aとの衝突判定を行うべき対象として犬Bが選択されたものとして説明を進める。
【0073】
ステップS22では、ステップS18で選択されたオブジェクト(ここでは犬A)と、ステップS20で選択されたオブジェクト(ここでは犬B)とが衝突したかどうかを判定する。この判定は、具体的には、RAM24に記憶されている犬Aの衝突判定領域データと犬Bの衝突判定領域データを参照して、犬Aの衝突判定領域と犬Bの衝突判定領域とが重複しているかどうか(すなわち交わっているかどうか)を所定の衝突判定式で判定することによって行われる。例えば、図11に示すように、犬Aの衝突判定領域の半径をaとし、犬Bの衝突判定領域の半径をbとし、犬Aの衝突判定領域の中心と犬Bの衝突判定領域の中心の間の距離をcとすると、a+bの値がcよりも大きいときに、犬Aと犬Bは衝突したと判定する。このような判定の結果、ステップS18で選択されたオブジェクト(ここでは犬A)と、ステップS20で選択されたオブジェクト(ここでは犬B)とが衝突したと判定された場合にはステップS24に進み、衝突していないと判定された場合にはステップS26に進む。
【0074】
ステップS24では、ステップS18で選択されたオブジェクトを、ステップS18で選択されたオブジェクト(ここでは犬A)の衝突判定領域とステップS20で選択されたオブジェクト(ここでは犬B)の衝突判定領域とが重複しないような位置に移動させるための移動ベクトルが算出される。例えば、犬Aの衝突判定領域と犬Bの衝突判定領域とが図11に示すような位置関係にあるときには、方向が犬Bの衝突判定領域の中心から犬Aの衝突判定領域の中心に向かう方向であって、大きさがa+b−cであるベクトルを犬Aの移動ベクトルとする。こうして計算された移動ベクトルは、RAM24の適当な記憶領域に一時的に記憶しておく。
【0075】
ステップS26では、全ての他のオブジェクト(ここでは犬Aを除く全てのオブジェクト)と犬Aとの間の衝突判定が終了したかどうかを判断し、終了している場合にはステップS28に進み、終了していない場合にはステップS20に戻って、まだ衝突判定をしていない他のオブジェクトについても同様の処理を繰り返す。ここでは、ステップS20〜S24を繰り返す過程において、図12のように、犬Aの衝突判定領域と犬Cの衝突判定領域が重複していることも検出されたものとして説明を進める。
【0076】
ステップS28では、ステップS20〜S24を繰り返した結果、ステップS24において複数の移動ベクトルが算出された場合に、これらの移動ベクトルを合成する処理を行う。例えば、図12の例では、犬Aの衝突判定領域と犬Bの衝突判定領域の重複を回避するための移動ベクトルBと、犬Aの衝突判定領域と犬Cの衝突判定領域の重複を回避するための移動ベクトルCとを合成して、犬Aを移動すべき方向及び移動量を表す移動ベクトル(合成移動ベクトル)を計算する。
【0077】
ステップS30では、ステップS18で選択されたオブジェクト(ここでは犬A)の配置座標51に、ステップS28で合成された移動ベクトルを加算することによって、他のオブジェクトと衝突しない位置にこのオブジェクト(ここでは犬A)を移動させる。なお、ステップS20〜S24を繰り返した結果、ステップS24において1つの移動ベクトルしか算出されなかった場合には、この移動ベクトルを用いて配置座標51が更新される。また、ステップS24において移動ベクトルが1つも算出されなかった場合には、ここで配置座標51を更新する必要はない。
【0078】
ステップS32では、犬A〜犬Cの全ての犬について衝突判定処理が終了したかどうか(すなわち、ステップS18で全ての犬を衝突判定処理の対象として選択済みかどうか)を判断し、終了していればステップS34に進み、まだステップS18で処理対象として選択されていない犬が存在する場合には、その犬についてステップS18〜S30の処理を実行する。
【0079】
ステップS34では、ステップS30で更新された各犬の配置座標51に基づいて図5に示すようなゲーム画像を生成する。ステップS34で生成されたゲーム画像は、図示しないフレームバッファに一時的に記憶された後、所定のタイミングで第2のLCD12の表示画面に表示される。
【0080】
ステップS36では、プレイヤによってゲーム終了が指示されたかどうかを判断し、ゲーム終了が指示されるまで、ステップS12〜S34の処理を例えば60分の1秒の周期で繰り返し実行する。
【0081】
以上のように、本実施形態によれば、球体の衝突判定領域を利用して犬の衝突判定を行うため、衝突判定に要する計算量が大幅に低減される。また、犬の状態または犬の周囲の状態に応じてその球体の大きさや位置が適宜に変化するため、犬の動きがより自然となる。
【0082】
なお、本実施形態では、仮想3次元空間内のオブジェクトの衝突判定について説明したが、本発明はこれに限らず、2次元の仮想空間内のオブジェクトの衝突判定にも本発明を適用することができる。
【0083】
また、本実施形態では、衝突判定領域として1つのオブジェクトにつき1つの球体を設定する例について説明したが、本発明はこれに限らず、衝突判定領域として1つのオブジェクトにつき複数の球体を設定し、これらの球体のうちの少なくとも1つの大きさ及び/又は位置をそのオブジェクトの状態またはそのオブジェクトの周囲の状態に応じて変化させてもよい。また、衝突判定領域は球体に限らず、オブジェクトの形状よりも簡素な形状であれば任意の形状でよい。球体以外の衝突判定領域の好ましい形状の例としては、楕円体、直方体、円柱が挙げられる。
【0084】
また、本実施形態では、図7に示す6つの状態(状態A〜F)毎に衝突判定領域の位置または大きさを変化させる例について説明したが、本発明はこれに限らない。例えば、あるオブジェクト(仮に第1オブジェクトと称す)の衝突判定領域を設定するときに、第1オブジェクトの現在位置に応じて(例えば図8Fにおいて犬Aが通路の近傍エリアに侵入したかどうかに応じて)その衝突判定領域の位置または大きさを変化させても良いし、第1オブジェクトと他のオブジェクトとの位置関係に応じて(例えば図8Fにおいて犬Aが障害物Aおよび障害物Bの両方に一定の距離以上近づいたかどうかに応じて)その衝突判定領域を変化させても良い。また、第1オブジェクトの近傍の温度(仮想3次元空間に仮想的に設定された温度)に応じてその衝突判定領域を変化させても良い。
【0085】
また、本実施形態では、図7に示すように、各状態に対応する衝突判定領域の大きさが数値によって規定されている例について説明したが、本発明はこれに限らず、衝突判定領域の大きさが関数によって規定されていても良い。例えば、地面から犬の頭の頂点までの距離に比例して衝突判定領域の大きさが変更されても良い。衝突判定領域の中心位置についても同様である。
【0086】
また、本実施形態では、図7に示すように、各状態に対応する衝突判定領域の中心位置および大きさが、実際の値により規定されている例について説明したが、本発明はこれに限らない。例えば四つんばいの状態(図7の状態A)の衝突判定領域を基本衝突判定領域とし、各状態について、この基本衝突判定領域を基準としたときの中心位置のズレ方向・ズレ量および大きさの差分値を規定した衝突判定領域テーブルを用いて衝突判定領域を設定するようにしてもよい。この場合、例えば図7の状態Bに対する衝突判定領域の半径は「−20」と規定されることになる。
【符号の説明】
【0087】
10 ゲーム装置
11 第1のLCD
12 第2のLCD
13 ハウジング
13a 上側ハウジング
13b 下側ハウジング
14 操作スイッチ部
14a 十字スイッチ
14b スタートスイッチ
14c セレクトスイッチ
14d Aボタン
14e Bボタン
14f Xボタン
14g Yボタン
14L Lボタン
14R Rボタン
15 タッチパネル
16 スティック
17 メモリカード
17a ROM
17b RAM
18a、18b 音抜き孔
19 電源スイッチ

【特許請求の範囲】
【請求項1】
表示手段に表示される仮想空間における第1オブジェクトと第2オブジェクトの衝突を判定するための衝突判定プログラムであって、コンピュータに、
記憶手段に格納されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報を更新する更新ステップ、
前記第1オブジェクトに対して、当該第1オブジェクトの形状とは異なる形状の衝突判定領域であって、当該第1オブジェクトの状態または当該第1オブジェクトの周辺の状態に応じて大きさ及び/又は位置の異なる衝突判定領域を設定する第1設定ステップ、
前記第2オブジェクトに対して衝突判定領域を設定する第2設定ステップ、および
前記第1設定ステップで設定された前記第1オブジェクトの衝突判定領域と前記第2設定ステップで設定された前記第2オブジェクトの衝突判定領域とが重複しているか否かを判定することによって当該第1オブジェクトと当該第2オブジェクトの衝突を判定する衝突判定ステップを実行させるための衝突判定プログラム。
【請求項2】
前記第1設定ステップで前記第1オブジェクトに対して設定される衝突判定領域が、当該第1オブジェクトの形状よりも簡素な形状であることを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項3】
前記第1設定ステップで前記第1オブジェクトに対して設定される衝突判定領域が、1つの球体のみで構成されることを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項4】
前記第1設定ステップでは、前記第1オブジェクトに対して、当該第1オブジェクトと別のオブジェクトである第3オブジェクトとが結合しているときと結合していないときとで大きさ及び/又は位置の異なる衝突判定領域が設定されることを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項5】
前記第1設定ステップでは、前記第1オブジェクトに対して、当該第1オブジェクトと別のオブジェクトである第3オブジェクトとが結合しているときに、当該第3オブジェクトの少なくとも一部を含むような衝突判定領域が設定されることを特徴とする、請求項4に記載の衝突判定プログラム。
【請求項6】
前記第1設定ステップでは、前記第1オブジェクトに対して、当該第1オブジェクトが他のオブジェクトとの接触を許容されている状態のときには、接触を許容されていない状態のときと比べて小さい衝突判定領域が設定されることを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項7】
前記第1設定ステップでは、前記第1オブジェクトに対して、当該第1オブジェクトの現在位置または当該第1オブジェクトと他のオブジェクトとの位置関係に応じて、大きさ及び/又は位置の異なる衝突判定領域が設定されることを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項8】
前記第1設定ステップは、前記記憶手段から所定の大きさおよび位置に設定された前記第1オブジェクトの基本衝突判定領域を読み出すステップと、当該読み出した基本衝突判定領域の大きさ及び/又は位置を当該第1オブジェクトの状態または当該第1オブジェクトの周辺の状態に応じて変更するステップとを含むことを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項9】
前記第1設定ステップでは、想定される前記第1オブジェクトの状態または当該第1オブジェクトの周辺の状態毎に前記衝突判定領域の大きさおよび位置を規定した衝突判定領域テーブルを参照することによって、前記第1オブジェクトの衝突判定領域が設定されることを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項10】
前記コンピュータに、さらに
前記衝突判定ステップで前記第1オブジェクトと前記第2オブジェクトの衝突が検出されたときに、前記記憶手段に格納されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報をさらに更新することによって、前記第1オブジェクトの衝突判定領域と前記第2オブジェクトの衝突判定領域とが重複しないような位置に当該第1オブジェクトおよび当該第2オブジェクトの少なくとも1つを移動させる移動ステップ、および
前記記憶手段に格納されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報を参照して前記第1オブジェクトおよび前記第2オブジェクトを含む画像を生成して前記表示手段に出力する出力ステップを実行させることを特徴とする、請求項1に記載の衝突判定プログラム。
【請求項11】
表示手段に表示される仮想空間における第1オブジェクトと第2オブジェクトの衝突を判定するための衝突判定装置であって、
前記表示手段、
少なくとも前記第1オブジェクトおよび前記第2オブジェクトの位置情報を記憶する記憶手段、
前記記憶手段に記憶されている前記第1オブジェクトまたは前記第2オブジェクトの位置情報を更新する更新手段、
前記第1オブジェクトに対して、当該第1オブジェクトの形状とは異なる形状の衝突判定領域であって、当該第1オブジェクトの状態または当該第1オブジェクトの周辺の状態に応じて大きさ及び/又は位置の異なる衝突判定領域を設定する第1設定手段、
前記第2オブジェクトに対して衝突判定領域を設定する第2設定手段、および
前記第1オブジェクトの衝突判定領域と前記第2オブジェクトの衝突判定領域とが重複しているか否かを判定することによって当該第1オブジェクトと当該第2オブジェクトの衝突を判定する衝突判定手段を備えた衝突判定装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8A】
image rotate

【図8B】
image rotate

【図8C】
image rotate

【図8D】
image rotate

【図8E】
image rotate

【図8F】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2009−163770(P2009−163770A)
【公開日】平成21年7月23日(2009.7.23)
【国際特許分類】
【出願番号】特願2009−102055(P2009−102055)
【出願日】平成21年4月20日(2009.4.20)
【分割の表示】特願2005−57658(P2005−57658)の分割
【原出願日】平成17年3月2日(2005.3.2)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】