説明

画像処理プログラムおよび画像処理装置

【課題】オブジェクト同士の接触判定における処理負荷をより軽減させることが可能な画像処理プログラムおよび画像処理装置を提供する。
【解決手段】ゲーム装置は、3次元空間における基準方向に対するオブジェクト71等の角度を算出する。次に、複数のオブジェクトに設定されるべき各円柱モデルの底面が基準方向と垂直になるように、当該複数のオブジェクトについて仮想の円柱モデルを設定する。このとき、ゲーム装置は、所定のオブジェクトが基準方向から所定角度よりも傾いているとき、当該所定のオブジェクトについて複数の円柱モデルを設定する。次に、設定した円柱モデル同士が重なっているか否かを判定する。次に、互いに重なっていると判定された2つの円柱モデルに対応する2つのオブジェクトに対して接触による所定の変化を与える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理プログラムおよび画像処理装置に関し、より特定的には、仮想の3次元空間内に登場する複数のオブジェクトに関して接触判定を行うための画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【0002】
従来、仮想の3次元空間内に複数のオブジェクト(プレイヤキャラクタ等)が登場するゲームにおいてオブジェクト同士の接触判定(衝突判定。当たり判定とも言う。)を行う技術として、特許文献1に記載の技術がある。この技術は、接触判定を行うためにオブジェクトに設定される領域として複数の球形領域を用いるものである。すなわち、特許文献1に記載の画像処理装置は、各オブジェクトにそれぞれ複数の球形領域を設定し、各球体の中心座標と半径とを用いて、オブジェクト同士に設定される球形領域同士のめり込み値を算出する。そして、めり込み値が所定の値より大きい場合にオブジェクト同士が接触したと判定する。このように、オブジェクトを複数の球体として近似することによって接触判定を行うことが可能であり、これによって、オブジェクトを四角柱として近似する場合に比べて、接触判定に要するメモリ量が減少させることができ、処理速度の高速化および接触判定の正確化を図ることができる。
【特許文献1】特開平7−230559号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかしながら、上述の従来の技術では、3次元空間における球体同士のめりこみ値を算出するので、3次元空間における2点間の距離を算出する演算処理等、3次元の座標値を用いた演算処理が必要となる。したがって、処理速度の点では、まだ大きな処理負荷がコンピュータに掛かっているといえる。
【0004】
それ故、本発明の目的は、オブジェクト同士の接触判定における処理負荷をより軽減させることが可能な画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【0005】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0006】
第1の発明は、円柱状の接触判定領域(円柱モデル72,72a〜72c)が設定されるオブジェクト(プレイヤオブジェクト71)が少なくとも1つ以上配置される仮想の3次元空間(ゲーム空間)を表示装置(テレビジョン受像機2)に表示させる画像処理装置(ゲーム装置3)のコンピュータ(CPU31)において実行される画像処理プログラム(ゲームプログラム)である。画像処理プログラムは、傾き角度算出ステップ(S4)と、領域数設定ステップ(S5)と、接触判定領域設定ステップ(S6)とを、コンピュータに実行させる画像処理プログラム。傾き角度算出ステップにおいては、コンピュータは、3次元空間に予め設定されている基準方向(矢印D1)に対するオブジェクトの傾きを算出する。領域数設定ステップにおいては、オブジェクトに設定すべき円柱状の接触判定領域の領域数を当該オブジェクトの傾きに応じて設定する。接触判定領域設定ステップにおいては、各接触判定領域のそれぞれの底面が基準方向と垂直となるように、オブジェクトに対して、設定された領域数の接触判定領域を当該オブジェクトの傾きに応じた配置で設定する。
【0007】
また、第2の発明においては、傾き算出ステップにて算出される傾きは、オブジェクトが配置される位置のフィールドと基準方向とのなす角度によって表されてもよい。
【0008】
また、第3の発明においては、傾き算出ステップにて算出される傾きは、基準方向とオブジェクトに予め設定される中心軸とのなす角度によって表されてもよい。
【0009】
また、第4の発明においては、領域数設定ステップにおいて、コンピュータは、オブジェクトが基準方向から所定角度よりも傾いていないとき、当該オブジェクトに設定すべき領域数を1つに設定してもよい。
【0010】
また、第5の発明においては、オブジェクトに設定される領域数の円柱状の接触判定領域の底面の直径の和は、当該オブジェクトが基準方向から所定角度よりも傾いていないときに設定される1つの円柱状の接触判定領域の高さ以上であってもよい。
【0011】
また、第6の発明においては、接触判定領域設定ステップにおいて、コンピュータは、領域数設定ステップにおいて領域数が2つ以上に設定されたとき、オブジェクトに設定される円柱状の各接触判定領域は他の接触判定領域の少なくとも1つに接し、当該各接触判定領域同士が接して形成される接触判定領域の複合体は一つとなるように配置してもよい。
【0012】
また、第7の発明においては、接触判定領域設定ステップは、大きさ変化ステップ(S31)を含んでいてもよい。大きさ変化ステップにおいては、オブジェクトが基準方向から所定角度よりも傾いているとき、当該オブジェクトに設定される接触判定領域の大きさを当該オブジェクトの角度に応じて変化させる。
【0013】
また、本発明は、上記画像処理プログラムを実行することによって実現される機能と同等の機能を有する画像処理装置の形態で提供されてもよい。
【発明の効果】
【0014】
第1の発明によれば、接触判定を行うために各オブジェクトに円柱形の接触判定領域が設定される。ここで、円柱形の各接触判定領域は、それぞれの底面が基準方向と垂直となるように設定される。これによって、画像処理装置は、基準方向に関して垂直な平面に関する判定(後述する第1判定処理)と、基準方向に関する判定(後述する第2判定処理)とに分けて接触判定の処理を実行することができる。したがって、画像処理装置は、一方の判定処理の判定結果が否定となった場合、他方の判定処理を実行する必要がないので球体モデルを用いる従来の方法に比べて接触判定の処理を簡易化および高速化することができる。
【0015】
ここで、所定のオブジェクトが基準方向から傾いている場合、当該オブジェクトに1つの接触判定領域を設定するだけでは、オブジェクトの傾きと接触判定領域の傾きとが一致しない(図5参照)。そのため、オブジェクトが接触判定領域の内部に含まれないので、オブジェクトに関する接触判定を正確に行うことができない。また、上記の場合に、接触判定領域の傾きを所定のオブジェクトの傾きに一致させるとすれば、当該所定のオブジェクトに設定される接触判定領域と、他のオブジェクトに設定される接触判定領域との向きが一致しなくなる(図6参照)。したがって、第1判定処理および第2判定処理によって接触判定を行うことができず、接触判定の計算の処理量が増加してしまう。
【0016】
これに対して、第1の発明によれば、オブジェクトの傾きに応じて接触判定領域の数が設定される(図7参照)。これによって、接触判定領域の向きを変えることなく、所定のオブジェクトの向きに合わせて複数の接触判定領域を配置することができる。したがって、所定のオブジェクトが基準方向から傾いている場合であっても、接触判定の処理を簡易かつ高速に行うことができる。
【0017】
第2の発明によれば、オブジェクトの向きを、基準方向とオブジェクトが配置される位置のフィールドとのなす角度によって計算することができるので、オブジェクトの向きを容易に算出することができる。
【0018】
第3の発明によれば、オブジェクトの向きを、基準方向とオブジェクトに予め設定される中心軸とのなす角度によって計算することができるので、オブジェクトの向きを容易に算出することができる。
【0019】
第4の発明によれば、オブジェクトが基準方向から傾いていないと判断される場合には、1つの接触判定領域が当該オブジェクトに設定される。これによって、複数の接触判定領域を設定する場合に比べて接触判定の処理を簡易化することができる。なお、オブジェクトが基準方向から傾いていない場合には、1つの接触判定領域で当該オブジェクトの形状を近似しても問題はないので、上記発明と同様、接触判定を正確に行うことができる。
【0020】
第5の発明によれば、オブジェクトが基準方向から傾いている場合における各円柱モデルの幅の総和は、当該オブジェクトが基準方向から傾いていない場合における各円柱モデルの高さ以上となる。したがって、各接触判定領域の間に間隔を設けずに接触判定領域を設定することができる。触判定領域各円柱モデルの間に間隔が空いて配置される場合には、所定のオブジェクトに関する接触判定を正確に行うことができないおそれがあるが、本発明によれば、接触判定を正確に行うことができる。
【0021】
第6の発明によれば、1つのオブジェクトに設定される各接触判定領域が、間隔を空けることなく互いに接触するように設定されるので、接触判定を正確に行うことができる。
【0022】
第7の発明によれば、接触判定領域の大きさは、基準方向に対するオブジェクトの角度に応じて変化する。したがって、接触判定領域の大きさをプレイヤオブジェクトの傾きに合わせてより詳細に決定することができるので、接触判定をより正確に行うことができる。
【発明を実施するための最良の形態】
【0023】
以下、本発明の一実施形態に係るゲーム装置およびゲームプログラム、並びに当該ゲーム装置を含むゲームシステムについて説明する。図1は、当該ゲームシステム1の外観図である。なお、本実施形態では、本発明に係る画像処理装置の一例として据置型ゲーム装置を例に挙げて説明するが、画像処理装置はこれに限定されるものではない。例えば携帯型ゲーム装置、アーケードゲーム装置、携帯端末、携帯電話またはパーソナルコンピュータなどのように、ゲームプログラム(画像処理プログラム)を実行するコンピュータを搭載する機器に適用することができる。
【0024】
図1において、ゲームシステム1は、据置型ゲーム装置(以下、単にゲーム装置と記載する)3と、当該ゲーム装置3に接続コードを介して接続される表示装置の一例であるテレビジョン受像機(以下、単にテレビと記載する)2とを含む。ゲーム装置3には、プレイヤによって操作可能な複数の操作スイッチを有するコントローラ6が接続される。また、ゲーム装置3には、本発明に係るゲームプログラムを記憶した情報記憶媒体の一例である光ディスク4が着脱自在に装着される。さらに、ゲーム装置3には、ゲームのセーブデータ等を記憶するフラッシュメモリ等を搭載するカートリッジ5が必要に応じて着脱自在に装着される。ゲーム装置3は、光ディスク4に記憶されたゲームプログラムを実行することによって得られるゲーム画像をテレビ2に表示する。さらに、ゲーム装置3は、カートリッジ5に記憶されたセーブデータを用いて、過去に実行されたゲームの続きを実行したり、過去に実行されたゲーム状態を再現して、ゲーム画像をテレビ2に表示することもできる。そして、ゲーム装置3のプレイヤは、テレビ2に表示されたゲーム画像を見ながらコントローラ6を操作することによってゲームを楽しむことができる。
【0025】
コントローラ6は、上述したように接続コードを介してゲーム装置3に着脱自在に接続される。コントローラ6は、テレビ2に表示されるゲーム空間に登場するプレイヤオブジェクト(プレイヤの操作対象であるオブジェクト(キャラクタ))を主に操作するための操作手段であり、複数の操作スイッチとして、操作ボタン、キー、およびスティック等の入力部を備えている。具体的には、コントローラ6には、プレイヤによって把持されるグリップ部が形成される。また、コントローラ6は、プレイヤの左手の親指等によって操作可能なメインスティック61および十字キー62と、右手の親指等によって操作可能なCスティック67およびAボタン63等を含む。なお、コントローラ6は、上記ボタンの他、Bボタン64、Xボタン65、Yボタン66、およびスタート−ポーズボタンや、プレイヤの右手の人差し指等によって操作可能なRボタンおよびZボタン、プレイヤの左手の人差し指等によって操作可能なLボタンを含む。また、ゲームシステム1は、ゲーム装置3に複数のコントローラ6を接続することによって、複数のプレイヤが同時にゲームをプレイすることができる。
【0026】
次に、図2を参照して、本発明に係るゲーム装置3の構成について説明する。図2は、ゲームシステム1の機能ブロック図である。図2において、ゲーム装置3は、各種プログラムを実行するCPU(セントラルプロセッシングユニット)31を備える。CPU31は、図示しないブートROMに記憶された起動プログラムを実行し、ワークメモリ32等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムをワークメモリ32に一旦読み込んだ後に当該ゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理を行うものである。CPU31には、ワークメモリ32、ビデオRAM(VRAM)33、外部メモリインターフェース(I/F)34、コントローラインターフェース(I/F)35、GPU(Graphics ProceSing Unit)36、および光ディスクドライブ37がバスを介して接続される。
【0027】
ワークメモリ32は、CPU31で使用される記憶領域であって、CPU31の処理に必要なゲームプログラム等を適宜記憶する。例えば、ワークメモリ32は、CPU31によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このワークメモリ32に記憶されたゲームプログラムや各種データ等がCPU31によって実行される。VRAM33は、テレビ2にゲーム画像を表示するためのゲーム画像データを格納する。外部メモリI/F34は、図示しないコネクタにカートリッジ5を嵌合させることによってゲーム装置3とカートリッジ5とを通信可能に接続する。CPU31は、カートリッジ5に設けられたバックアップメモリに外部メモリI/F34を介してアクセスする。コントローラI/F35は、図示しないコネクタによって外部機器とゲーム装置3とを通信可能に接続する。例えば、コントローラ6は、接続コードを介して当該コネクタと嵌合し、コントローラI/F35を介してゲーム装置3と接続される。コントローラ6は、プレイヤによるメインスティック61およびCスティック67の操作や各操作ボタン62〜66等の押圧操作に応じて、操作内容を示す操作データをゲーム装置3に出力する。GPU36は、例えば、3Dグラフィックスの表示に必要なベクトル演算やレンダリング処理等の処理をCPU31からの指示に応じて行う半導体チップで構成され、当該GPU36によってレンダリングされたゲーム画像はテレビ2に表示される。光ディスクドライブ37は、CPU31からの指示に応じて、光ディスク4に記憶されたゲームプログラム、画像データ、サウンドデータなどの各種のデータを読み出す。
【0028】
以下、光ディスク4に格納されたゲームプログラムによってゲーム装置3において実行されるゲーム処理について説明する。まず、本実施形態におけるゲームの概要を説明する。本ゲームは、3次元の仮想のゲーム空間において複数のオブジェクトが登場するアクションゲームである。このゲームでは、プレイヤによって操作されるプレイヤオブジェクト、および、ゲーム装置3によって動作が制御される敵オブジェクト等が登場する。プレイヤオブジェクトおよび敵オブジェクトは、剣や弓等の武器で互いに攻撃し合う。プレイヤオブジェクトは、敵オブジェクトによる攻撃を受けると体力が減っていき、体力が0になるとゲームオーバーとなる。本ゲームでは、プレイヤは、プレイヤオブジェクトを操作して敵オブジェクトを倒すことを目的とする。
【0029】
上記ゲームでは、ゲーム装置3は、ゲーム処理中において、オブジェクト同士が接触したか否かの判定(接触判定)を行う。プレイヤオブジェクトに敵オブジェクトの剣が当たったか否か、プレイヤオブジェクトの剣が敵オブジェクトに当たったか否か等を判定するためである。本実施形態においては、ゲーム装置3は、接触判定を行うために各オブジェクトに円柱のモデルを仮想的に設定する。
【0030】
図3は、プレイヤオブジェクトおよびそれに設定される円柱モデルを示す図である。図3は、仮想ゲーム空間における地面74にプレイヤオブジェクト71が直立している状態を示している。ここで、ゲーム空間における位置を表すための座標系(ワールド座標系)は、x軸およびz軸が地面74と平行となり、かつ、y軸が地面74と垂直となるように設定される。プレイヤオブジェクト71が直立している状態において、プレイヤオブジェクト71には1つの円柱モデル72が設定される。以下では、円柱モデル72のように、プレイヤオブジェクト71の全体に対応するように、プレイヤオブジェクト71に対して1つのみ設定される円柱モデルを「全体モデル」と呼ぶことがある。
【0031】
円柱モデル72は、その底面が基準方向に垂直になるように設定される。基準方向は予め定められており、本実施形態における基準方向はゲーム空間の座標系(ワールド座標系)のy軸正方向である。つまり、円柱モデル72は、地面74に対してその中心軸が垂直になるように設定される。また、図3では示していないが、プレイヤオブジェクト71以外の他のオブジェクトについても円柱モデルが設定される。他のオブジェクトに設定される円柱モデルも円柱モデル72と同様、その底面が基準方向に垂直になるように設定される。
【0032】
図3において、点73は、プレイヤオブジェクト71を基準とした円柱モデル72の位置を決める基準となる点である。以下ではこの点を基準点と呼ぶ。ゲーム装置3は、オブジェクトについて設定される基準点の位置に基づいて、当該オブジェクトに設定すべき円柱モデルの位置を決定する。図3の例では、プレイヤオブジェクト71が直立している状態において、基準点73はプレイヤオブジェクト71の足下の位置(例えば、プレイヤオブジェクト71の中心軸と地面との交点の位置)に設定される。この状態において、円柱モデル72は、その下面(下側の底面)の中心位置が基準点73の位置となるように配置される。その結果、図3に示すように、プレイヤオブジェクト71の長手方向に沿って円柱モデル72が設定される。なお、本実施形態において、円柱モデルはオブジェクトに対して仮想的に設定される。つまり、円柱モデルは、ポリゴンによって構築されてゲーム空間に配置されるものではない。また、円柱モデルがテレビ2に表示されることはない。
【0033】
本実施形態においては、ゲーム装置3は、各オブジェクトにそれぞれ設定される各円柱モデルを用いてオブジェクト同士の接触判定を行う。図4は、本実施形態における接触判定を説明するための図である。以下、プレイヤオブジェクト71と3つの石オブジェクト75a〜75cとの接触判定を図4を用いて説明する。上述したように、プレイヤオブジェクト71と同様に、3つの石オブジェクト75a〜75cについても円柱モデルが設定される。すなわち、石オブジェクト75aには円柱モデル76aが設定され、石オブジェクト75bには円柱モデル76bが設定され、石オブジェクト75cには円柱モデル76cが設定される。各石オブジェクト75a〜75cに設定される各円柱モデル76a〜76cも円柱モデル72と同様、その底面が基準方向に垂直になるように設定される。また、ゲーム装置3は、各石オブジェクト75a〜75cの中心位置に基準点に設定し、基準点が中心の位置となるように各円柱モデル76a〜76cを配置する。
【0034】
図4において、円柱モデル72aと円柱モデル76aとは、xz平面に関して重なっている。ここで、「2つの円柱モデルがxz平面に関して重なっている」とは、2つの円柱モデルをxz平面に投影することによって得られる2つの像(円形の像)が接しているか交わっていることを意味する。さらに、円柱モデル72aと円柱モデル76aとは、Y軸方向に関しても重なっている。ここで、「2つの円柱モデルがy軸方向に関して重なっている」とは、2つの円柱モデルのy軸に関する位置が重なっていることを意味する。ゲーム装置3は、2つの円柱モデルがxz平面に関して重なっており、かつ、y軸方向に関して重なっている場合、当該2つの円柱モデルに対応する2つのオブジェクトが接触していると判断する。すなわち、図4では、プレイヤオブジェクト71と石オブジェクト75aとは接触していると判断される。
【0035】
図4において、円柱モデル72aと円柱モデル76bとは、xz平面に関して重なっているが、y軸方向に関して重なっていない。したがって、ゲーム装置3は、プレイヤオブジェクト71と石オブジェクト75bとは接触していないと判断する。また、円柱モデル72aと円柱モデル76cとは、xz平面に関して重なっていない。したがって、ゲーム装置3は、プレイヤオブジェクト71と石オブジェクト75bとは接触していないと判断する。
【0036】
ゲーム装置3は、2つの円柱モデルがxz平面に関して重なっているか否かを判定する処理(第1判定処理)と、2つの円柱モデルがy軸方向に関して重なっているか否かを判定する処理(第2判定処理)とを独立して実行する。詳細は後述するが、第1判定処理は、2つの円柱モデルのxz平面に関する中心間距離を算出することによって行うことができる(後述するステップS23)。つまり、第1判定処理では、各円柱モデルのx座標およびz座標を用いた2次元の計算が実行される。一方、第2判定処理は、2つの円柱モデルのy軸方向に関する位置を算出することによって行うことができる(後述するステップS25)。つまり、第2判定処理では、各円柱モデルのy座標を用いた1次元の計算が実行される。このように、本実施形態においてゲーム装置3は、1次元および2次元の計算によって接触判定を行うことができる。これに対して、接触判定のために球形モデルを用いる従来の方法では、ゲーム装置は3次元の計算を行わなければならない。したがって、本実施形態によれば、接触判定における計算が従来に比べて簡易になり、ゲーム装置3の処理負担を軽減することができる。
【0037】
また、本実施形態では、ゲーム装置3は、ある2つの円柱モデルについて接触判定を行う際、まず上記第1判定処理を実行し、第1判定処理の判定結果が肯定であった場合(2つの円柱モデルがxz平面に関して重なっていると判定された場合)にのみ、上記第2判定処理を実行する。したがって、第1判定処理の判定結果が否定であった場合、ゲーム装置3は第2判定処理を実行しないので、接触判定の処理をより簡単にすることができる。なお、他の実施形態においては、まず第2判定処理を実行し、第1判定処理の判定結果が肯定であった場合にのみ、第1判定処理を実行するようにしてもよい。
【0038】
以上に説明したように、本実施形態では、各オブジェクトについて円柱モデルはすべて同じ向きに設定されるので、上記第1判定処理および第2判定処理によって接触判定を簡単に行うことができる。換言すれば、接触判定を簡単に行うためには、各円柱モデルを同じ向きに設定する必要がある。ここで、オブジェクトが傾いた状態となる場合、例えば、プレイヤオブジェクト71が地面74に対して傾いた状態となる場合を考える。
【0039】
まず、プレイヤオブジェクト71が地面74に対して傾いた状態となる場合において、プレイヤオブジェクト71が地面74に直立した状態と同じように、円柱モデル72を地面74に対して中心軸が垂直になるように設定したと仮定する。図5は、地面に対して傾いた状態のプレイヤオブジェクト71について円柱モデル72を設定した一例を示す図である。図5に示すように、円柱モデル72を地面74に対して中心軸が垂直になるように設定すると、プレイヤオブジェクト71の傾きと円柱モデル72の傾きとが一致しない。そのため、プレイヤオブジェクト71が円柱モデル72の内部に含まれないので、プレイヤオブジェクト71に関する接触判定を正確に行うことができない。
【0040】
また、プレイヤオブジェクト71が地面74に対して傾いた状態となる場合において、プレイヤオブジェクト71と円柱モデル72との傾きを一致させたと仮定する。図6は、地面に対して傾いた状態のプレイヤオブジェクト71について円柱モデル72を設定した他の一例を示す図である。図6に示すように、円柱モデル72の傾きをプレイヤオブジェクト71の傾きに一致させると、プレイヤオブジェクト71に設定される円柱モデル72と、他のオブジェクト(石オブジェクト)75に設定される円柱モデル76との向きが一致しなくなる。したがって、上記第1判定処理および第2判定処理によって接触判定を行うことができず、接触判定の計算の処理量が増加してしまう。
【0041】
図5および図6に示したように、プレイヤオブジェクト71が地面74に対して傾いた状態となる場合には、1つの全体モデル(円柱モデル72)をいずれの向きに設定したとしても問題が生じる。そこで本実施形態では、上記の場合、ゲーム装置3は、プレイヤオブジェクト71に設定される円柱モデルを分割し、複数の円柱モデルを設定する。以下では、プレイヤオブジェクト71に複数設定される円柱モデルを「部分モデル」と呼ぶことがある。部分モデルは、プレイヤオブジェクト71の所定部分に対応する円柱モデルである。
【0042】
図7は、地面74に垂直な壁77にプレイヤオブジェクト71が横向きに立っている状態を示す図である。ここでは、例えば、壁77を歩くことができる魔法のブーツをプレイヤオブジェクト71が履いた場合や、ゲームの設定上において重力の方向が変わった場合等に、プレイヤオブジェクト71が横向きに壁77に立つことができるものとする。
【0043】
図7に示すように、プレイヤオブジェクト71が地面74に対して傾いた状態となる場合、3つの円柱モデル72a〜72cが部分モデルとして設定される。以下では、円柱モデル72aを第1部分モデルと呼び、円柱モデル72bを第2部分モデルと呼び、円柱モデル72cを第3部分モデルと呼ぶことがある。なお、本実施形態では、この場合において設定される円柱モデルの数を3つとしたが、部分モデルの数は2つ以上であればいくつであっても構わない。なお、本実施形態においては各円柱モデル72a〜72cは同じ大きさであるが、それぞれ異なる大きさであっても構わない。各円柱モデル72a〜72cは、図3に示した円柱モデル72と同様、底面が基準方向に垂直となるように設定される。また、各円柱モデル72a〜72cは、プレイヤオブジェクト71に沿って配置される。つまり、プレイヤオブジェクト71が地面74に対して横向きの状態であるので、各円柱モデル72a〜72cは、地面74に対して横向きに(平行に)配置される。これによって、プレイヤオブジェクト71が各円柱モデル72a〜72cのいずれかの内部に含まれるように各円柱モデル72a〜72cを設定することができる。したがって、複数の各円柱モデル72a〜72cを用いてプレイヤオブジェクト71に関する接触判定を正確に行うことができる。
【0044】
なお、プレイヤオブジェクト71が地面74に対して傾いた状態となる場合においても、プレイヤオブジェクト71が直立している場合と同様、各円柱モデル72a〜72cの位置は、基準点73a〜73cに基づいて決定される。すなわち、円柱モデル(第1部分モデル)72aの位置は基準点73aに基づいて決定され、円柱モデル(第2部分モデル)72bの位置は基準点73bに基づいて決定され、円柱モデル(第3部分モデル)72cの位置は基準点73cに基づいて決定される。また、プレイヤオブジェクト71が地面74に対して傾いた状態となる場合、各円柱モデル72a〜72cは、円柱の中心位置が基準点73の位置となるように配置される。プレイヤオブジェクト71に対する基準点73の位置は、各円柱モデル72a〜72cを用いてプレイヤオブジェクト71に関する接触判定を正確に行うべく、プレイヤオブジェクト71が各円柱モデル72a〜72cのいずれかの内部に含まれるように設定される。
【0045】
図8は、斜面78に対して垂直にプレイヤオブジェクト71が立っている状態を示す図である。図8において、矢印D1は基準方向を示し、矢印D2はプレイヤオブジェクト71の向きを示している。なお、本実施形態において、プレイヤオブジェクト71の向きは、プレイヤオブジェクト71の長手方向の向きであって、プレイヤオブジェクト71の下(足の側)から上(頭の側)を向く向きである。本実施形態では、基準方向とプレイヤオブジェクト71の長手方向の向きとのなす角度に基づいて、プレイヤオブジェクト71に設定される円柱モデルの個数が決定される。円柱モデルの個数の決定方法の詳細は後述する(図10、図11のステップS5参照)。ここでは、図8に示す状態では、プレイヤオブジェクト71が壁77に立っている場合と同様、プレイヤオブジェクト71には複数の円柱モデル72a〜72cが設定されるものとする。
【0046】
また、プレイヤオブジェクト71に設定される基準点の位置、および、基準点に対して円柱モデルを配置する位置は、基準方向とプレイヤオブジェクト71の向きとのなす角度に基づいて決定される。基準点の位置および円柱モデルの配置位置の決定方法の詳細については後述する(図10、図11のステップS6参照)。図8に示す状態では、円柱モデル72a〜72cは、その下面の中心位置が基準点の位置となるように配置される。各基準点73a〜73cの位置は、接触判定が正確に行われるようにするため、プレイヤオブジェクト71が各円柱モデル72a〜72cのいずれかの内部に含まれるように設定される。
【0047】
なお、図8においては、プレイヤオブジェクト71に設定される各円柱モデル72a〜72c同士が重なっている。本実施形態では、接触判定の処理において、ゲーム装置3は、単一のオブジェクトに設定される複数の円柱モデル同士については接触判定を行わない。接触判定を行う必要がないからである。
【0048】
以上のように、本実施形態によれば、ゲーム装置3は、円柱形のモデルを用いてオブジェクト同士の接触判定を行う。これによって、球形のモデルを用いる場合に比べて接触判定の処理を簡易に行うことができる。さらに、本実施形態においては、細長い概観(縦長または横長の外観)を有するオブジェクト(プレイヤオブジェクト71)については、当該オブジェクトの向きに応じて、1つの全体モデルを設定するか、複数の部分モデルを設定するかを使い分ける。これによって、各オブジェクトに設定される円柱モデルの向きを一定としながら、細長い外観を有するオブジェクトに対して正確に接触判定を行うことができる。
【0049】
次に、ゲーム処理において用いられる主なデータについて図9を用いて説明する。図9は、ゲーム装置3のワークメモリ32に記憶される主なデータを示す図である。図9に示すように、ワークメモリ32には、ゲームプログラム80およびゲームデータ81が記憶される。ゲームプログラム80は、後述するゲーム処理(図11参照)をゲーム装置3に実行させるためのゲームプログラムである。
【0050】
ゲームデータ81には、プレイヤオブジェクトデータ82、第1および第2オブジェクトデータ92aおよび92b、ならびに、モデル決定テーブルデータ93等が含まれる。図9では、第1オブジェクトデータ92aおよび第2オブジェクトデータ92bという2つのオブジェクトに関するデータのみを示しているが、ワークメモリ32には、ゲーム空間に登場する各オブジェクトに関するデータが記憶される。なお、ワークメモリ32には、図9に示すデータの他、各キャラクタ(プレイヤキャラクタや敵キャラクタ)の画像データやゲーム空間に関するデータ(地形データ等)等、ゲーム処理に必要なデータが記憶される。
【0051】
プレイヤオブジェクトデータ82は、プレイヤオブジェクト71に関するデータである。具体的には、プレイヤオブジェクトデータ82には、オブジェクト位置データ83、姿勢データ84、全体モデルデータ85、第1〜第3部分モデルデータ90a〜90c、および接触オブジェクトデータ91が含まれる。オブジェクト位置データ83は、プレイヤオブジェクト71のゲーム空間内における位置を示す。ここでは、プレイヤオブジェクト71の位置は、上記ワールド座標系を用いて表現される。具体的には、プレイヤオブジェクト71の位置は、プレイヤオブジェクト71の足下の地面の位置とされる。姿勢データ84は、プレイヤオブジェクト71の向き(姿勢)を示す。ここでは、プレイヤオブジェクト71の長手方向の軸(中心軸)に沿った方向を示すベクトルのデータが姿勢データ84としてワークメモリ32に記憶される。プレイヤオブジェクト71の長手方向の軸に沿った方向とは、具体的には、プレイヤオブジェクト71の足下から頭への方向である。
【0052】
全体モデルデータ85は、プレイヤオブジェクト71に設定される全体モデル(円柱モデル72)に関するデータである。具体的には、全体モデルデータ85には、基準位置データ86、配置位置データ87、半径データ88、および高さデータ89が含まれる。
【0053】
基準位置データ86は、全体モデルに対応する基準点の位置を示すデータである。なお、基準点の位置は、プレイヤオブジェクト71の所定点を原点とした座標系を用いて、プレイヤオブジェクト71に対する位置として表される。
【0054】
配置位置データ87は、基準点に対して全体モデルをどの位置に配置するかを示すデータである。具体的には、配置位置データ87は、「中心」、「下面」、または「上面」のいずれかを示す。配置位置データ87が「中心」を示す場合、全体モデルである円柱モデルは、その中心が基準点の位置となるように配置される。配置位置データ87が「下面」を示す場合、全体モデルである円柱モデルは、その下面の中心が基準点の位置となるように配置される。配置位置データ87が「上面」を示す場合、全体モデルである円柱モデルは、その上面の中心が基準点の位置となるように配置される。
【0055】
半径データ88は、全体モデルである円柱モデルの底面の半径の長さを示すデータである。高さデータ89は、全体モデルである円柱モデルの高さを示すデータである。全体モデルデータ85に含まれる半径データ88および高さデータ89の内容は、ゲームプログラム80において予め定められている。つまり、各オブジェクトに設定される全体モデルの高さは、予め定められている。
【0056】
第1部分モデルデータ90aは、プレイヤオブジェクト71に設定される各部分モデルのうちの上記第1部分モデル(円柱モデル72a)に関するデータである。同様に、第2部分モデルデータ90bは、プレイヤオブジェクト71に設定される各部分モデルのうちの上記第2部分モデル(円柱モデル72b)に関するデータである。第3部分モデルデータ90cは、プレイヤオブジェクト71に設定される各部分モデルのうちの第3部分モデル(円柱モデル72c)に関するデータである。
【0057】
なお、図9には示していないが、第1部分モデルデータ90aは、全体モデルデータ85と同様のデータを含む。すなわち、第1部分モデルデータ90aは、円柱モデル72aに関する基準位置データ、配置位置データ、半径データ、および高さデータを含む。また、第2および第3部分モデルデータ90bおよび90cは、第1部分モデルデータ90aと同様、基準位置データ、配置位置データ、半径データ、および高さデータを含む。
【0058】
接触オブジェクトデータ91は、プレイヤオブジェクト71と接触したと判定される他のオブジェクトを示すデータである。すなわち、プレイヤオブジェクト71と他のオブジェクトとが接触している間、当該他のオブジェクトを示すデータが接触オブジェクトデータ91としてワークメモリ32に記憶される。
【0059】
第1オブジェクトデータ92aは、ゲーム空間に登場する所定の第1オブジェクト関するデータである。第1オブジェクトデータ92aは、プレイヤオブジェクトデータ82と同様、オブジェクト位置データ、姿勢データおよび全体モデルデータを含む。第1オブジェクトデータ92aに含まれるオブジェクト位置データは、第1オブジェクトのゲーム空間内における位置を示す。第1オブジェクトデータ92aに含まれる姿勢データは、第1オブジェクトの姿勢を示す。第1オブジェクトデータ92aに含まれる全体モデルデータは、第1オブジェクトに設定される全体モデルに関するデータである。さらに、第1オブジェクトは、部分モデルデータを含んでいてもよいし、全体モデルデータのみを含むものであってもよい。つまり、ゲーム空間に登場するすべてのオブジェクトについて部分モデルが設定される必要はなく、ゲーム装置3は、一部のオブジェクトについては、オブジェクトの向き(姿勢)がどの向きであっても1つの全体モデルを設定するようにしてもよい。なお、第2オブジェクトデータ92b等の他のオブジェクトデータも第1オブジェクトデータと同様のデータ構造を有する。
【0060】
モデル決定テーブルデータ93は、オブジェクトに設定すべき円柱モデルの数および位置を決定するためのモデル決定テーブルを示す。図10は、モデル決定テーブルの一例を示す図である。図10に示すモデル決定テーブルは、プレイヤオブジェクト71に円柱モデルを設定する場合に用いるテーブルである。モデル決定テーブルは、プレイヤオブジェクト71の基準方向に対する角度θと、プレイヤオブジェクト71に設定すべき円柱モデルの個数と、円柱モデルに対応する基準点の位置(基準位置)と、基準点に対して円柱モデルを配置する位置(配置位置)とを対応付けるテーブルである。具体的には、プレイヤオブジェクト71が地面74に対して直立している場合(θ=0°の場合)、プレイヤオブジェクト71には1つの円柱モデル(全体モデル)が設定され、基準点の位置は位置P1に決定され、円柱モデルはその下面の中心が基準点の位置となるように配置される。また、上記角度θが0°<θ≦45°範囲にある場合、プレイヤオブジェクト71には3つの円柱モデル(部分モデル)が設定される。そして、各基準点の位置は位置P2〜P4に決定される。より具体的には、第1部分モデル(図10では「第1」と記載)に対応する基準点の位置は位置P2に決定され、第2部分モデル(図10では「第2」と記載)に対応する基準点の位置は位置P3に決定され、第3部分モデル(図10では「第3」と記載)に対応する基準点の位置は位置P4に決定される。そして、各円柱モデルはその下面の中心が基準点の位置となるように配置される。また、上記角度θが45°<θ<135°範囲にある場合、プレイヤオブジェクト71には3つの円柱モデル(部分モデル)が設定され、各基準点の位置は位置P5〜P7に決定され、各円柱モデルはその中心が基準点の位置となるように配置される。上記角度θが135°≦θ<180°範囲にある場合、プレイヤオブジェクト71には3つの円柱モデル(部分モデル)が設定され、各基準点の位置は位置P8〜P10に決定され、各円柱モデルはその上面の中心が基準点の位置となるように配置される。上記角度θがθ=180°となる場合(プレイヤオブジェクト71が天井に逆さまに立っている場合)、プレイヤオブジェクト71には1つの円柱モデル(全体モデル)が設定され、基準点の位置は位置P11に決定され、円柱モデルはその上面の中心が基準点の位置となるように配置される。
【0061】
なお、図10においては、角度θが0°または180°の場合のみ、プレイヤオブジェクト71には全体モデルが設定されることとしたが、0°≦θ<θ’(θ’は所定の定数)の場合にはプレイヤオブジェクト71に全体モデルが設定されるようにしてもよい。つまり、ゲーム装置3は、基準方向に対してプレイヤオブジェクト71が若干傾いた姿勢であっても、全体モデルを用いるようにしてもよい。また、本実施形態では、モデル決定テーブルは1種類のみが記憶されるものとしたが、ゲーム装置3は、オブジェクトの種類や状態に応じて異なるモデル決定テーブルを用意しておいてもよい。
【0062】
次に、ゲームプログラム80を実行することによってゲーム装置3において行われるゲーム処理の詳細を、図11および図12を用いて説明する。図11は、ゲーム装置3において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU31は、図示しないブートROMに記憶されている起動プログラムを実行し、ワークメモリ32等の各ユニットが初期化される。そして、カートリッジ5に格納されたゲームプログラム80がワークメモリ32に読み込まれ、CPU31によってゲームプログラム80の実行が開始される。図8に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図11および図12においては、ゲーム処理のうち、プレイヤオブジェクトと他のオブジェクトとがゲーム中に接触したか否かを判定する処理について詳細に示し、本願発明と関連しない他のゲーム処理については詳細な説明を省略する。また、図11および図12に示すゲーム処理では、プレイヤオブジェクト以外のオブジェクトについては部分オブジェクトは設定されないものとする。
【0063】
ステップS1において、仮想の3次元のゲーム空間が構築され、ゲーム空間の一部を表示するための仮想カメラの初期状態における位置および向き(視線方向)が決定される。また、構築されたゲーム空間の初期位置に各オブジェクトが配置される。つまり、CPU31は、当該各オブジェクトの初期位置を示すデータが、各オブジェクトのオブジェクトデータに含まれるオブジェクト位置データとしてワークメモリ32に記憶される。
【0064】
続くステップS2において、各オブジェクトに円柱モデルが設定される。なお、ステップS2では各オブジェクトには全体モデルが設定されるものとする。すなわち、CPU31は、全体モデルデータに含まれる各データ(基準位置データ、配置位置データ、半径データ、および高さデータ)の内容を設定する。なお、ステップS2で設定される各データの内容は、ゲームプログラム80において予め定められている。
【0065】
以上のステップS2の後のステップS3以降の処理において、コントローラ6を用いたゲーム操作が受け付けられ、ゲームが進行する。なお、ステップS3〜S11の処理ループは、1回の処理ループが1フレームの間に実行される。
【0066】
ステップS3において、各オブジェクトの動作の制御が行われる。例えば、プレイヤオブジェクトの動作は、プレイヤによるコントローラ6の操作に従って制御される。また、敵オブジェクトの動作は、ゲームプログラム80に含まれている所定のアルゴリズムに従ってCPU31によって制御される。その他、例えば敵オブジェクトが石オブジェクトを投げた場合には、当該石オブジェクトの動作は、石オブジェクトが投げられたときの速度や仮想的に設定される重力等に従ってCPU31によって制御される。ステップS3の処理によって、オブジェクトが動作することによってオブジェクトのゲーム空間における位置や姿勢が変化する場合、CPU31は、当該オブジェクトのオブジェクトデータ(第1オブジェクトデータ92a等)に含まれるオブジェクト位置データの内容を、変化後の位置を示すデータに更新し、当該オブジェクトデータに含まれるオブジェクト姿勢データの内容を、変化後の姿勢を示すデータに更新する。例えば、プレイヤオブジェクトの位置および姿勢が変更された場合、プレイヤオブジェクトデータ82のオブジェクト位置データ83および姿勢データ84の内容が更新される。
【0067】
ステップS4において、プレイヤオブジェクトの上記基準方向を基準とした角度が算出される。具体的には、CPU31は、プレイヤオブジェクト71の位置における地面と基準方向とのなす角度を算出する。なお、プレイヤオブジェクト71の位置とは、上述のように、プレイヤオブジェクト71の足下の地面の位置であり、オブジェクト位置データ83により示される。したがって、CPU31は、オブジェクト位置データ83により示される位置の地面の角度を、ゲーム空間の地形データを参照して算出し、算出した角度と基準方向とのなす角度を算出する。なお、他の実施形態においては、ステップS4において、ワークメモリ32に記憶されている姿勢データ84を参照し、当該姿勢データにより示される方向と、予め定められている上記基準方向との角度を算出するようにしてもよい。
【0068】
ステップS5において、プレイヤオブジェクトに設定すべき円柱モデルの数が、ステップS4で算出された角度に基づいて決定される。本実施形態においては、CPU31は、ワークメモリ32に記憶されているモデル決定テーブルを用いて円柱モデルの数を決定する。すなわち、モデル決定テーブルにおいて上記角度に対応付けられている円柱モデルの数を特定する。例えば、プレイヤオブジェクトが地面に垂直な壁77に横向きに立っている場合(図5参照)、角度θ=90°となるので、円柱モデルの数は3つに決定される。
【0069】
ステップS6において、プレイヤオブジェクトに対して円柱モデルを設定する位置が決定される。本実施形態においては、CPU31は、円柱モデルを設定する位置を、上記モデル決定テーブルを用いて決定する。すなわち、CPU31は、モデル決定テーブルにおいて上記角度に対応付けられている基準位置および配置位置を特定する。そして、特定した基準位置を示すデータを基準位置データ86としてワークメモリ32に記憶するとともに、特定した配置位置を示すデータを配置位置データ87としてワークメモリ32に記憶する。さらに、CPU31は、ワークメモリ32に記憶された基準位置データ86および配置位置データ87の内容に従って円柱モデルの位置を決定する。例えば、プレイヤオブジェクトが地面に垂直な壁77に横向きに立っている場合(図5参照)、角度θ=90°となるので、3つの円柱モデルにそれぞれ対応する基準点の位置は位置P5〜位置P7にそれぞれ決定され、3つの円柱モデルはその中心が基準点の位置となるように配置される。
【0070】
ステップS7においては、接触判定処理が実行される。接触判定処理は、2つのオブジェクト(ここでは、プレイヤオブジェクトと他のオブジェクト)が接触しているか否かを判定するための処理である。以下、接触判定処理の詳細について図12を用いて説明する。
【0071】
図12は、図11に示すステップS7の詳細な処理の流れを示すフローチャートである。なお、図12で示される処理、プレイヤオブジェクトと他のオブジェクトとの接触について判定するための処理であるが、他のオブジェクト同士の接触を判定する処理も図12と同様に行うことができる。接触判定処理においてはまずステップS21において、CPU31は、プレイヤオブジェクトに設定された円柱モデルのうちの1つを選択する。なお、ステップS21の処理は、ステップS21〜S30の処理ループが繰り返される間に繰り返し実行される。この間におけるステップS21では、CPU31は、まだ選択されていない円柱モデルを選択する。
【0072】
ステップS22において、CPU31は、他のオブジェクトに設定された円柱モデルのうちの1つを選択する。なお、ステップS22の処理は、ステップS21〜S30の処理ループが繰り返される間に繰り返し実行される。この間におけるステップS22では、CPU31は、まだ選択されていない円柱モデルを選択する。
【0073】
ステップS23では、ステップS21およびS22で選択された2つの円柱モデルのxz平面に関する距離が算出される。ここで算出される距離は、2つの円柱モデルの中心間距離である。具体的には、一方の円柱モデルの位置を示す座標を(x1,y1,z1)とし、他方の円柱モデルの位置を示す座標を(x2,y2,z2)としたとき、上記距離dは、次の式に従って算出される。
d=((x1−x2)2 +(z1−z2)2 1/2
なお、円柱モデルの位置とは、円柱モデルに対応する基準点の位置である。また、プレイヤオブジェクト71を基準とした座標系を用いて基準点の位置が表される場合、CPU31は、基準点の位置を示す座標値を、ワールド座標系を用いた座標値に変換してから上式の計算を実行する。
【0074】
ステップS24においては、ステップS21およびS22で選択された2つの円柱モデルがxz平面に関して重なっているか否かが判定される。この判定処理は、ステップS23で算出された距離dと、ステップS21で選択された円柱モデルの半径r1と、ステップS22で選択された円柱モデルの半径r2とを用いて行うことができる。なお、当該半径r1およびr2は、全体モデルデータまたは部分モデルデータに含まれる半径データとしてワークメモリ32に記憶されている。具体的には、CPU31は、次の式が満たされるか否かによって、2つの円柱モデルがxz平面に関して重なっているか否かを判定する。
r1+r2≧d
すなわち、r1+r2≧dとなる場合、2つの円柱モデルはxz平面に関して重なっていると判定され、r1+r2<dとなる場合、2つの円柱モデルはxz平面に関して重なっていないと判定される。ステップS24の判定において、2つの円柱モデルはxz平面に関して重なっていると判定される場合、ステップS25の処理が実行される。一方、2つの円柱モデルはxz平面に関して重なっていないと判定される場合、ステップS28の処理が実行される。
【0075】
ステップS25において、ステップS21およびS22で選択された2つの円柱モデルについて、それぞれ、円柱モデルの高さ方向の幅が算出される。この幅は、ワールド座標系におけるy座標値の範囲として表され、円柱モデルの高さと、円柱モデルに対応する基準点の位置(基準位置)と、円柱モデルの基準位置に対する配置位置とに基づいて算出することができる。例えば、ワールド座標系を用いて表される基準位置の座標値を(x3,y3,z3)とし、円柱モデルの高さをhとする。このとき、配置位置が「下面」であれば、上記幅は、y3≦y≦y3+hとなる。配置位置が「中心」であれば、幅は、y3−h/2≦y≦y3+2/hとなる。配置位置が「上面」であれば、幅は、y3≦y≦y3+hとなる。以上のようにして、ステップS21およびS22で選択された2つの円柱モデルについて、y座標値の取り得る範囲が算出される。ステップS25の次にステップS26の処理が実行される。
【0076】
ステップS26において、ステップS21およびS22で選択された2つの円柱モデルがy軸方向に関して重なっているか否かが判定される。この判定処理は、ステップS25で算出された幅の範囲値を用いて行うことができる。具体的には、CPU31は、ステップS25で算出された2つの範囲が重複するか否かによって、2つの円柱モデルがy軸方向に関して重なっているか否かを判定する。例えば、2つの範囲が“1≦y≦5”と“4≦y≦6”であった場合、当該2つの範囲は重複するので、2つの円柱モデルがy軸方向に関して重なっていると判定される。一方、2つの範囲が“1≦y≦5”と“7≦y≦9”であった場合、当該2つの範囲は重複しないので、2つの円柱モデルがy軸方向に関して重なっていないと判定される。ステップS26において、2つの円柱モデルがy軸方向に関して重なっていると判定される場合、ステップS27の処理が実行される。一方、ステップS26において、2つの円柱モデルがy軸方向に関して重なっていないと判定される場合、ステップS28の処理が実行される。
【0077】
ステップS27においては、ステップS21およびS22で選択された2つの円柱モデルがそれぞれ設定される2つのオブジェクト同士が接触していると判断される。具体的には、CPU31は、ワークメモリ32に記憶されているプレイヤオブジェクトデータ82に含まれる接触オブジェクトデータ91の内容を更新する。より具体的には、ステップS22で選択された円柱モデルが設定されるオブジェクトを示すデータを、上記接触オブジェクトデータ91として追加する。ステップS27の次にステップS29の処理が実行される。
【0078】
一方、ステップS28においては、ステップS21およびS22で選択された2つの円柱モデルがそれぞれ設定される2つのオブジェクトは接触していないと判断される。具体的には、CPU31は、ステップS22で選択された円柱モデルが設定されるオブジェクトを示すデータが上記接触オブジェクトデータ91に含まれている場合、当該オブジェクトを示すデータを削除する。ステップS28の次にステップS29の処理が実行される。
【0079】
ステップS29において、プレイヤオブジェクト以外の他のオブジェクトに設定される全ての円柱モデルを上記ステップS22で選択したか否かが判定される。まだ選択していない円柱モデルが存在する場合、ステップS22の処理が再度実行される。ステップS29の処理は、ステップS21で選択された円柱モデルとその他の円柱モデルとの接触判定が完了したか否かを判定するために実行される。以降、ステップS29における判定結果が肯定となるまで、ステップS22〜S29の処理ループが繰り返される。一方、すでに全ての円柱モデルを選択している場合、ステップS30の処理が実行される。
【0080】
ステップS30において、プレイヤオブジェクトに設定される全ての円柱モデルを上記ステップS21で選択したか否かが判定される。まだ選択していない円柱モデルが存在する場合、ステップS21の処理が再度実行される。ステップS30の処理は、プレイヤオブジェクトに設定される全ての円柱モデルについて接触判定が完了したか否かを判定するために実行される。以降、ステップS30における判定結果が肯定となるまで、ステップS21〜S30の処理ループが繰り返される。一方、すでに全ての円柱モデルを選択している場合、CPU31は接触判定処理を終了する。
【0081】
図11の説明に戻り、ステップS7の接触判定処理の次のステップS8において、プレイヤオブジェクトに接触している他のオブジェクトが存在するか否かが判定される。この判定は、ワークメモリ32に記憶されているプレイヤオブジェクトデータ82の接触オブジェクトデータ91に基づいて行うことができる。すなわち、CPU31は、接触オブジェクトデータ91に他のオブジェクトを示すデータが含まれているか否かを判定する。そして、接触オブジェクトデータ91に他のオブジェクトを示すデータが含まれている場合、プレイヤオブジェクトに接触している他のオブジェクトが存在すると判定する。逆に、接触オブジェクトデータ91に他のオブジェクトを示すデータが含まれていない場合、プレイヤオブジェクトに接触している他のオブジェクトが存在しないと判定する。ステップS8の判定において、プレイヤオブジェクトに接触している他のオブジェクトが存在すると判定される場合、ステップS9の処理が実行される。一方、プレイヤオブジェクトに接触している他のオブジェクトが存在しないと判定される場合、ステップS9の処理がスキップされてステップS10の処理が実行される。
【0082】
ステップS9においては、プレイヤオブジェクトとそれに接触している他のオブジェクトとの接触に応じた動作の制御が行われる。例えば、プレイヤオブジェクトと石オブジェクトが接触している場合であれば、CPU31は、(プレイヤによる操作とは無関係に)石に当たってのけぞる動作をプレイヤオブジェクトに行わせたり、石オブジェクトがプレイヤオブジェクトに当たって跳ね返るように、石オブジェクトの移動方向を変化させたりする。ステップS9の次にステップS10の処理が実行される。
【0083】
ステップS10において、ゲーム空間内において各オブジェクトが動作する様子がテレビ2に表示される。CPU31は、ステップS3,S4およびS9によって決定された位置および姿勢となった各オブジェクトを仮想カメラから見たゲーム画像を生成し、生成したゲーム画像をテレビ2に表示させる。続くステップS11において、ゲームを終了するか否かが判定される。ステップS11の判定は、例えば、プレイヤキャラクタの体力が0になったか否かや、プレイヤキャラクタが全ての敵キャラクタを倒したか否か等によって行われる。ステップS11の判定において、ゲームを終了すると判定された場合、CPU31は、図11に示すゲーム処理を終了する。一方、ゲームを終了しないと判定された場合、ステップS3の処理が行われ、以降、ステップS11においてゲームを終了すると判定されるまでステップS3〜S11の一連の処理が繰り返される。以上で、ゲーム処理の詳細な説明を終了する。
【0084】
以上のように、本実施形態によれば、所定の基準方向に対するプレイヤオブジェクトの角度を算出し(ステップS4)、当該角度が所定値よりも大きい場合には、プレイヤオブジェクトに対して複数の円柱モデルを設定する(ステップS5)。このように、円柱モデルを用いることによって接触判定を簡単に行うとともに、複数の円柱モデルを用いることによって、プレイヤオブジェクトが基準方向から傾いた姿勢であっても接触判定を正確に行うことができる。
【0085】
また、上記実施形態においては、円柱モデルによってプレイヤオブジェクトの形状を適切に近似するために、オブジェクトに対する円柱モデルの位置をプレイヤオブジェクトの角度θに合わせて変更した(ステップS6)。具体的には、ゲーム装置3は、角度θに応じて基準位置および配置位置を変更するようにした。ここで、オブジェクトに対する円柱モデルの位置を変更するためには、基準位置および配置位置のいずれか一方を変更すれば足りる。したがって、他の実施形態においては、オブジェクトに対する円柱モデルの位置をプレイヤオブジェクトの角度θに合わせて変更するために、基準位置および配置位置のいずれか一方のみを変更するようにしてもよい。
【0086】
なお、上記においては、プレイヤオブジェクトについて全体モデルと部分モデルとを使い分ける場合を例として説明したが、本発明は、仮想の3次元空間に登場するあらゆるオブジェクトについて適用することが可能である。ステップS7の接触判定処理は、プレイヤオブジェクト以外の他のオブジェクトについてもプレイヤオブジェクトと同様に適用することができる。
【0087】
図13は、あるオブジェクト94に設定される全体モデルと分割モデルとを示す図である。なお、図13では、円柱モデルを見やすくする目的で、オブジェクト94を点線で示している。図13において、全体モデル95の高さをHとし、底面の半径をRとする。また、このオブジェクト94に設定される部分モデルの数を3つ(円柱モデル95a〜95c)とし、3つの円柱モデル95a〜95cの底面の半径をr1、r2、およびr3とする。このとき、全体モデルの高さHと円柱モデル95a〜95cの各底面の半径r1〜r3との間には、次の関係が成り立つことが好ましい。
H≦2×(r1+r2+r3)
ここで、上式が満たされない場合、各円柱モデル95a〜95cの間に隙間が空いてしまうので(図13(b)参照)、衝突判定を正確に行うことができなくなるからである。そのため、衝突判定を正確に行うためには、少なくとも上式を満たすように全体モデルおよび部分モデルの大きさを決定する必要がある。さらに、各円柱モデル95a〜95cは、オブジェクト94に設定される他の円柱モデル95a〜95cの少なくとも1つに接するように配置されることが好ましい。これによって、各円柱モデル95a〜95cからなる(円柱モデルの)複合体が1つになり、各円柱モデル95a〜95cの間に隙間が空くことなく、各円柱モデル95a〜95cの内部にオブジェクト95を含めることができ、衝突判定を正確に行うことができる。なお、図13では部分モデルの数が3個の場合について説明したが、部分モデルの数がn個(nは2以上の整数)の場合、各部分モデルの底面の直径の総和が全体モデルの高さ以上となるように全体モデルおよび部分モデルの大きさを設定すればよい。
【0088】
なお、上記実施形態では、プレイヤオブジェクト71が地面74に対して直立している状態では、1つの全体モデルを設定するようにしたが、他の実施形態においては、この状態においても複数の部分モデルを設定するようにしてもよい。このとき、部分モデルの個数は予め定められ、図11に示すステップS5の処理は不要となる。
【0089】
次に、上記実施形態の変形例について図14および図15を用いて説明する。この変形例では、ゲーム装置3は、基準方向に対するプレイヤオブジェクト71の角度に応じて円柱モデルの大きさを変更する。以下、詳細を説明する。
【0090】
図14は、本実施形態の変形例において用いられるモデル決定テーブルの一例を示す図である。図14に示すモデル決定テーブルは、図10に示すモデル決定テーブルの内容に加えて、プレイヤオブジェクト71の基準方向に対する角度θと、円柱モデルの大きさ(底面半径および高さ)との対応付けを表す。ゲーム装置3は、この対応付けに従って、角度に応じて円柱モデルの大きさを決定する。
【0091】
図15は、上記実施形態の変形例におけるゲーム処理の流れを示すフローチャートである。なお、図15において、図11に示すステップと同じ処理を示すステップについては図11と同じステップ番号を付し、詳細な説明は省略する。変形例においては、ステップS6の次にステップS31が実行される点のみ、上記実施形態と異なる。
【0092】
ステップS31においては、プレイヤオブジェクトに設定すべき円柱モデルの大きさが、ステップS4で算出された角度に基づいて決定される。ステップS31の処理は、ワークメモリ32に記憶されているモデル決定テーブルを参照することによって行われる。すなわち、CPU31は、各円柱モデルの大きさを、モデル決定テーブルにおいて上記角度に対応付けられている各円柱モデルの大きさに決定する。図14に示すモデル決定テーブルを例にとって説明すると、角度θが45°<θ<135°範囲にある場合、第1部分モデルの底面半径はr2に決定され、高さはh2に決定される。さらに、第2部分モデルの底面半径はr3に決定され、高さはh3に決定され、第3部分モデルの底面半径はr4に決定され、高さはh4に決定される。このとき、CPU31は、プレイヤオブジェクトデータ82の各部分モデルデータ90a〜90cに含まれる半径データおよび高さデータの内容を、決定後の内容に更新する。なお、ステップS31の次にステップS7の処理が実行される。本変形例におけるステップS7以降の処理は上記実施形態と同様である。
【0093】
以上のように、上記変形例によれば、基準方向に対するプレイヤオブジェクトの角度に応じて円柱モデルの大きさを変えることができるので、円柱モデルの大きさをプレイヤオブジェクトの傾きに合わせてより詳細に決定することができる。なお、上記変形例においては、プレイヤオブジェクトに設定される円柱モデルの大きさを変化させる場合を例として説明したが、本変形例をプレイヤオブジェクト以外の他のオブジェクトについて適用することも可能である。
【0094】
また、上記実施形態では、本発明がゲーム装置およびゲームプログラムとして実現される場合を例として説明したが、本発明は、ゲーム装置およびゲームプログラムに限らず、仮想の3次元空間に登場するオブジェクト同士の接触判定を行うための画像処理装置または画像処理プログラムに適用することが可能である。
【産業上の利用可能性】
【0095】
本発明は、オブジェクト同士の接触判定における処理負荷をより軽減させること等を目的として、例えばゲーム装置やゲームプログラムに利用することができる。
【図面の簡単な説明】
【0096】
【図1】本発明の一実施形態に係るゲーム装置を含むゲームシステムの外観図
【図2】図1に示すゲームシステムの機能ブロック図
【図3】プレイヤオブジェクトおよびそれに設定される円柱モデルを示す図
【図4】本実施形態における接触判定を説明するための図
【図5】地面に対して傾いた状態のプレイヤオブジェクトについて円柱モデルを設定した一例を示す図
【図6】地面に対して傾いた状態のプレイヤオブジェクトについて円柱モデルを設定した他の一例を示す図
【図7】地面に垂直な壁にプレイヤオブジェクトが横向きに立っている状態を示す図
【図8】斜面に対して垂直にプレイヤオブジェクトが立っている状態を示す図
【図9】ゲーム装置のワークメモリに記憶される主なデータを示す図
【図10】モデル決定テーブルの一例を示す図
【図11】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図12】図11に示すステップS7の詳細な処理の流れを示すフローチャート
【図13】あるオブジェクトに設定される全体モデルと分割モデルとを示す図
【図14】本実施形態の変形例において用いられるモデル決定テーブルの一例を示す図
【図15】上記実施形態の変形例におけるゲーム処理の流れを示すフローチャート
【符号の説明】
【0097】
1 ゲームシステム
2 テレビジョン受像機
3 ゲーム装置
4 光ディスク
6 コントローラ
31 CPU
32 ワークメモリ
71 プレイヤオブジェクト
72,72a〜72c,76a〜76c 円柱モデル
73,73a〜73c 基準点
75 石オブジェクト
80 ゲームプログラム

【特許請求の範囲】
【請求項1】
円柱状の接触判定領域が設定されるオブジェクトが配置される仮想の3次元空間を表示装置に表示させる画像処理装置のコンピュータにおいて実行される画像処理プログラムであって、
前記3次元空間に予め設定されている基準方向に対する前記オブジェクトの傾きを算出する傾き角度算出ステップと、
前記オブジェクトに設定すべき円柱状の接触判定領域の領域数を当該オブジェクトの傾きに応じて設定する領域数設定ステップと、
各接触判定領域のそれぞれの底面が前記基準方向と垂直となるように、前記オブジェクトに対して、前記設定された領域数の接触判定領域を当該オブジェクトの傾きに応じた配置で設定する接触判定領域設定ステップとを、前記コンピュータに実行させる画像処理プログラム。
【請求項2】
前記傾き算出ステップにて算出される傾きは、前記基準方向とオブジェクトが配置される位置のフィールドとのなす角度によって表される、請求項1に記載の画像生成プログラム。
【請求項3】
前記傾き算出ステップにて算出される傾きは、オブジェクトに予め設定される中心軸と前記基準方向とのなす角度によって表される、請求項1に記載の画像生成プログラム。
【請求項4】
前記領域数設定ステップにおいて、前記コンピュータは、オブジェクトが前記基準方向から所定角度よりも傾いていないとき、当該オブジェクトに設定すべき領域数を1つに設定する、請求項1に記載の画像処理プログラム。
【請求項5】
オブジェクトに設定される前記領域数の円柱状の接触判定領域の底面の直径の和は、当該オブジェクトが前記基準方向から所定角度よりも傾いていないときに設定される1つの円柱状の接触判定領域の高さ以上である、請求項4に記載の画像処理プログラム。
【請求項6】
前記接触判定領域設定ステップにおいて、前記コンピュータは、前記領域数設定ステップにおいて領域数が2つ以上に設定されたとき、オブジェクトに設定される円柱状の各接触判定領域は他の接触判定領域の少なくとも1つに接し、当該各接触判定領域同士が接して形成される接触判定領域の複合体は一つとなるように配置する、請求項1に記載の画像処理プログラム。
【請求項7】
前記接触判定領域設定ステップは、オブジェクトが前記基準方向から所定角度よりも傾いているとき、当該オブジェクトに設定される接触判定領域の大きさを当該オブジェクトの前記角度に応じて変化させる大きさ変化ステップを含む、請求項1に記載の画像処理プログラム。
【請求項8】
円柱状の接触判定領域が設定されるオブジェクトが少なくとも1つ以上配置される仮想の3次元空間を表示装置に表示させる画像処理装置であって、
前記3次元空間に予め設定されている基準方向に対する前記オブジェクトの傾きを算出する傾き角度算出手段と、
前記オブジェクトに設定すべき円柱状の接触判定領域の領域数を当該オブジェクトの傾きに応じて設定する領域数設定手段と、
各接触判定領域のそれぞれの底面が前記基準方向と垂直となるように、前記オブジェクトに対して、前記設定された領域数の接触判定領域を当該オブジェクトの傾きに応じた配置で設定する接触判定領域設定手段とを備える、画像処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2007−140902(P2007−140902A)
【公開日】平成19年6月7日(2007.6.7)
【国際特許分類】
【出願番号】特願2005−333760(P2005−333760)
【出願日】平成17年11月18日(2005.11.18)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】