(57)【特許請求の範囲】
【請求項１】
円柱状の接触判定領域が設定されるオブジェクトが配置される仮想の３次元空間を表示装置に表示させる画像処理装置のコンピュータにおいて実行される画像処理プログラムであって、
前記３次元空間に予め設定されている基準方向に対する前記オブジェクトの傾きを算出する傾き角度算出ステップと、
前記オブジェクトに設定すべき円柱状の接触判定領域の領域数を当該オブジェクトの傾きに応じて設定する領域数設定ステップと、
各接触判定領域のそれぞれの底面が前記基準方向と垂直となるように、前記オブジェクトに対して、前記設定された領域数の接触判定領域を当該オブジェクトの傾きに応じた配置で設定する接触判定領域設定ステップとを、前記コンピュータに実行させる画像処理プログラム。
【請求項２】
前記傾き算出ステップにて算出される傾きは、前記基準方向とオブジェクトが配置される位置のフィールドとのなす角度によって表される、請求項１に記載の画像生成プログラム。
【請求項３】
前記傾き算出ステップにて算出される傾きは、オブジェクトに予め設定される中心軸と前記基準方向とのなす角度によって表される、請求項１に記載の画像生成プログラム。
【請求項４】
前記領域数設定ステップにおいて、前記コンピュータは、オブジェクトが前記基準方向から所定角度よりも傾いていないとき、当該オブジェクトに設定すべき領域数を１つに設定する、請求項１に記載の画像処理プログラム。
【請求項５】
オブジェクトに設定される前記領域数の円柱状の接触判定領域の底面の直径の和は、当該オブジェクトが前記基準方向から所定角度よりも傾いていないときに設定される１つの円柱状の接触判定領域の高さ以上である、請求項４に記載の画像処理プログラム。
【請求項６】
前記接触判定領域設定ステップにおいて、前記コンピュータは、前記領域数設定ステップにおいて領域数が２つ以上に設定されたとき、オブジェクトに設定される円柱状の各接触判定領域は他の接触判定領域の少なくとも１つに接し、当該各接触判定領域同士が接して形成される接触判定領域の複合体は一つとなるように配置する、請求項１に記載の画像処理プログラム。
【請求項７】
前記接触判定領域設定ステップは、オブジェクトが前記基準方向から所定角度よりも傾いているとき、当該オブジェクトに設定される接触判定領域の大きさを当該オブジェクトの前記角度に応じて変化させる大きさ変化ステップを含む、請求項１に記載の画像処理プログラム。
【請求項８】
円柱状の接触判定領域が設定されるオブジェクトが少なくとも１つ以上配置される仮想の３次元空間を表示装置に表示させる画像処理装置であって、
前記３次元空間に予め設定されている基準方向に対する前記オブジェクトの傾きを算出する傾き角度算出手段と、
前記オブジェクトに設定すべき円柱状の接触判定領域の領域数を当該オブジェクトの傾きに応じて設定する領域数設定手段と、
各接触判定領域のそれぞれの底面が前記基準方向と垂直となるように、前記オブジェクトに対して、前記設定された領域数の接触判定領域を当該オブジェクトの傾きに応じた配置で設定する接触判定領域設定手段とを備える、画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理プログラムおよび画像処理装置に関し、より特定的には、仮想の３次元空間内に登場する複数のオブジェクトに関して接触判定を行うための画像処理プログラムおよび画像処理装置に関する。
【背景技術】
【０００２】
従来、仮想の３次元空間内に複数のオブジェクト（プレイヤキャラクタ等）が登場するゲームにおいてオブジェクト同士の接触判定（衝突判定。当たり判定とも言う。）を行う技術として、特許文献１に記載の技術がある。この技術は、接触判定を行うためにオブジェクトに設定される領域として複数の球形領域を用いるものである。すなわち、特許文献１に記載の画像処理装置は、各オブジェクトにそれぞれ複数の球形領域を設定し、各球体の中心座標と半径とを用いて、オブジェクト同士に設定される球形領域同士のめり込み値を算出する。そして、めり込み値が所定の値より大きい場合にオブジェクト同士が接触したと判定する。このように、オブジェクトを複数の球体として近似することによって接触判定を行うことが可能であり、これによって、オブジェクトを四角柱として近似する場合に比べて、接触判定に要するメモリ量が減少させることができ、処理速度の高速化および接触判定の正確化を図ることができる。
【特許文献１】特開平７−２３０５５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上述の従来の技術では、３次元空間における球体同士のめりこみ値を算出するので、３次元空間における２点間の距離を算出する演算処理等、３次元の座標値を用いた演算処理が必要となる。したがって、処理速度の点では、まだ大きな処理負荷がコンピュータに掛かっているといえる。
【０００４】
それ故、本発明の目的は、オブジェクト同士の接触判定における処理負荷をより軽減させることが可能な画像処理プログラムおよび画像処理装置を提供することである。
【課題を解決するための手段】
【０００５】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００６】
第１の発明は、円柱状の接触判定領域（円柱モデル７２，７２ａ〜７２ｃ）が設定されるオブジェクト（プレイヤオブジェクト７１）が少なくとも１つ以上配置される仮想の３次元空間（ゲーム空間）を表示装置（テレビジョン受像機２）に表示させる画像処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ３１）において実行される画像処理プログラム（ゲームプログラム）である。画像処理プログラムは、傾き角度算出ステップ（Ｓ４）と、領域数設定ステップ（Ｓ５）と、接触判定領域設定ステップ（Ｓ６）とを、コンピュータに実行させる画像処理プログラム。傾き角度算出ステップにおいては、コンピュータは、３次元空間に予め設定されている基準方向（矢印Ｄ１）に対するオブジェクトの傾きを算出する。領域数設定ステップにおいては、オブジェクトに設定すべき円柱状の接触判定領域の領域数を当該オブジェクトの傾きに応じて設定する。接触判定領域設定ステップにおいては、各接触判定領域のそれぞれの底面が基準方向と垂直となるように、オブジェクトに対して、設定された領域数の接触判定領域を当該オブジェクトの傾きに応じた配置で設定する。
【０００７】
また、第２の発明においては、傾き算出ステップにて算出される傾きは、オブジェクトが配置される位置のフィールドと基準方向とのなす角度によって表されてもよい。
【０００８】
また、第３の発明においては、傾き算出ステップにて算出される傾きは、基準方向とオブジェクトに予め設定される中心軸とのなす角度によって表されてもよい。
【０００９】
また、第４の発明においては、領域数設定ステップにおいて、コンピュータは、オブジェクトが基準方向から所定角度よりも傾いていないとき、当該オブジェクトに設定すべき領域数を１つに設定してもよい。
【００１０】
また、第５の発明においては、オブジェクトに設定される領域数の円柱状の接触判定領域の底面の直径の和は、当該オブジェクトが基準方向から所定角度よりも傾いていないときに設定される１つの円柱状の接触判定領域の高さ以上であってもよい。
【００１１】
また、第６の発明においては、接触判定領域設定ステップにおいて、コンピュータは、領域数設定ステップにおいて領域数が２つ以上に設定されたとき、オブジェクトに設定される円柱状の各接触判定領域は他の接触判定領域の少なくとも１つに接し、当該各接触判定領域同士が接して形成される接触判定領域の複合体は一つとなるように配置してもよい。
【００１２】
また、第７の発明においては、接触判定領域設定ステップは、大きさ変化ステップ（Ｓ３１）を含んでいてもよい。大きさ変化ステップにおいては、オブジェクトが基準方向から所定角度よりも傾いているとき、当該オブジェクトに設定される接触判定領域の大きさを当該オブジェクトの角度に応じて変化させる。
【００１３】
また、本発明は、上記画像処理プログラムを実行することによって実現される機能と同等の機能を有する画像処理装置の形態で提供されてもよい。
【発明の効果】
【００１４】
第１の発明によれば、接触判定を行うために各オブジェクトに円柱形の接触判定領域が設定される。ここで、円柱形の各接触判定領域は、それぞれの底面が基準方向と垂直となるように設定される。これによって、画像処理装置は、基準方向に関して垂直な平面に関する判定（後述する第１判定処理）と、基準方向に関する判定（後述する第２判定処理）とに分けて接触判定の処理を実行することができる。したがって、画像処理装置は、一方の判定処理の判定結果が否定となった場合、他方の判定処理を実行する必要がないので球体モデルを用いる従来の方法に比べて接触判定の処理を簡易化および高速化することができる。  
【００１５】
ここで、所定のオブジェクトが基準方向から傾いている場合、当該オブジェクトに１つの接触判定領域を設定するだけでは、オブジェクトの傾きと接触判定領域の傾きとが一致しない（図５参照）。そのため、オブジェクトが接触判定領域の内部に含まれないので、オブジェクトに関する接触判定を正確に行うことができない。また、上記の場合に、接触判定領域の傾きを所定のオブジェクトの傾きに一致させるとすれば、当該所定のオブジェクトに設定される接触判定領域と、他のオブジェクトに設定される接触判定領域との向きが一致しなくなる（図６参照）。したがって、第１判定処理および第２判定処理によって接触判定を行うことができず、接触判定の計算の処理量が増加してしまう。
【００１６】
これに対して、第１の発明によれば、オブジェクトの傾きに応じて接触判定領域の数が設定される（図７参照）。これによって、接触判定領域の向きを変えることなく、所定のオブジェクトの向きに合わせて複数の接触判定領域を配置することができる。したがって、所定のオブジェクトが基準方向から傾いている場合であっても、接触判定の処理を簡易かつ高速に行うことができる。
【００１７】
第２の発明によれば、オブジェクトの向きを、基準方向とオブジェクトが配置される位置のフィールドとのなす角度によって計算することができるので、オブジェクトの向きを容易に算出することができる。  
【００１８】
第３の発明によれば、オブジェクトの向きを、基準方向とオブジェクトに予め設定される中心軸とのなす角度によって計算することができるので、オブジェクトの向きを容易に算出することができる。
【００１９】
第４の発明によれば、オブジェクトが基準方向から傾いていないと判断される場合には、１つの接触判定領域が当該オブジェクトに設定される。これによって、複数の接触判定領域を設定する場合に比べて接触判定の処理を簡易化することができる。なお、オブジェクトが基準方向から傾いていない場合には、１つの接触判定領域で当該オブジェクトの形状を近似しても問題はないので、上記発明と同様、接触判定を正確に行うことができる。
【００２０】
第５の発明によれば、オブジェクトが基準方向から傾いている場合における各円柱モデルの幅の総和は、当該オブジェクトが基準方向から傾いていない場合における各円柱モデルの高さ以上となる。したがって、各接触判定領域の間に間隔を設けずに接触判定領域を設定することができる。触判定領域各円柱モデルの間に間隔が空いて配置される場合には、所定のオブジェクトに関する接触判定を正確に行うことができないおそれがあるが、本発明によれば、接触判定を正確に行うことができる。
【００２１】
第６の発明によれば、１つのオブジェクトに設定される各接触判定領域が、間隔を空けることなく互いに接触するように設定されるので、接触判定を正確に行うことができる。
【００２２】
第７の発明によれば、接触判定領域の大きさは、基準方向に対するオブジェクトの角度に応じて変化する。したがって、接触判定領域の大きさをプレイヤオブジェクトの傾きに合わせてより詳細に決定することができるので、接触判定をより正確に行うことができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の一実施形態に係るゲーム装置およびゲームプログラム、並びに当該ゲーム装置を含むゲームシステムについて説明する。図１は、当該ゲームシステム１の外観図である。なお、本実施形態では、本発明に係る画像処理装置の一例として据置型ゲーム装置を例に挙げて説明するが、画像処理装置はこれに限定されるものではない。例えば携帯型ゲーム装置、アーケードゲーム装置、携帯端末、携帯電話またはパーソナルコンピュータなどのように、ゲームプログラム（画像処理プログラム）を実行するコンピュータを搭載する機器に適用することができる。
【００２４】
図１において、ゲームシステム１は、据置型ゲーム装置（以下、単にゲーム装置と記載する）３と、当該ゲーム装置３に接続コードを介して接続される表示装置の一例であるテレビジョン受像機（以下、単にテレビと記載する）２とを含む。ゲーム装置３には、プレイヤによって操作可能な複数の操作スイッチを有するコントローラ６が接続される。また、ゲーム装置３には、本発明に係るゲームプログラムを記憶した情報記憶媒体の一例である光ディスク４が着脱自在に装着される。さらに、ゲーム装置３には、ゲームのセーブデータ等を記憶するフラッシュメモリ等を搭載するカートリッジ５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムを実行することによって得られるゲーム画像をテレビ２に表示する。さらに、ゲーム装置３は、カートリッジ５に記憶されたセーブデータを用いて、過去に実行されたゲームの続きを実行したり、過去に実行されたゲーム状態を再現して、ゲーム画像をテレビ２に表示することもできる。そして、ゲーム装置３のプレイヤは、テレビ２に表示されたゲーム画像を見ながらコントローラ６を操作することによってゲームを楽しむことができる。
【００２５】
コントローラ６は、上述したように接続コードを介してゲーム装置３に着脱自在に接続される。コントローラ６は、テレビ２に表示されるゲーム空間に登場するプレイヤオブジェクト（プレイヤの操作対象であるオブジェクト（キャラクタ））を主に操作するための操作手段であり、複数の操作スイッチとして、操作ボタン、キー、およびスティック等の入力部を備えている。具体的には、コントローラ６には、プレイヤによって把持されるグリップ部が形成される。また、コントローラ６は、プレイヤの左手の親指等によって操作可能なメインスティック６１および十字キー６２と、右手の親指等によって操作可能なＣスティック６７およびＡボタン６３等を含む。なお、コントローラ６は、上記ボタンの他、Ｂボタン６４、Ｘボタン６５、Ｙボタン６６、およびスタート−ポーズボタンや、プレイヤの右手の人差し指等によって操作可能なＲボタンおよびＺボタン、プレイヤの左手の人差し指等によって操作可能なＬボタンを含む。また、ゲームシステム１は、ゲーム装置３に複数のコントローラ６を接続することによって、複数のプレイヤが同時にゲームをプレイすることができる。
【００２６】
次に、図２を参照して、本発明に係るゲーム装置３の構成について説明する。図２は、ゲームシステム１の機能ブロック図である。図２において、ゲーム装置３は、各種プログラムを実行するＣＰＵ（セントラルプロセッシングユニット）３１を備える。ＣＰＵ３１は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、ワークメモリ３２等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムをワークメモリ３２に一旦読み込んだ後に当該ゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理を行うものである。ＣＰＵ３１には、ワークメモリ３２、ビデオＲＡＭ（ＶＲＡＭ）３３、外部メモリインターフェース（Ｉ／Ｆ）３４、コントローラインターフェース（Ｉ／Ｆ）３５、ＧＰＵ（Ｇｒａｐｈｉｃｓ  ＰｒｏｃｅＳｉｎｇ  Ｕｎｉｔ）３６、および光ディスクドライブ３７がバスを介して接続される。
【００２７】
ワークメモリ３２は、ＣＰＵ３１で使用される記憶領域であって、ＣＰＵ３１の処理に必要なゲームプログラム等を適宜記憶する。例えば、ワークメモリ３２は、ＣＰＵ３１によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このワークメモリ３２に記憶されたゲームプログラムや各種データ等がＣＰＵ３１によって実行される。ＶＲＡＭ３３は、テレビ２にゲーム画像を表示するためのゲーム画像データを格納する。外部メモリＩ／Ｆ３４は、図示しないコネクタにカートリッジ５を嵌合させることによってゲーム装置３とカートリッジ５とを通信可能に接続する。ＣＰＵ３１は、カートリッジ５に設けられたバックアップメモリに外部メモリＩ／Ｆ３４を介してアクセスする。コントローラＩ／Ｆ３５は、図示しないコネクタによって外部機器とゲーム装置３とを通信可能に接続する。例えば、コントローラ６は、接続コードを介して当該コネクタと嵌合し、コントローラＩ／Ｆ３５を介してゲーム装置３と接続される。コントローラ６は、プレイヤによるメインスティック６１およびＣスティック６７の操作や各操作ボタン６２〜６６等の押圧操作に応じて、操作内容を示す操作データをゲーム装置３に出力する。ＧＰＵ３６は、例えば、３Ｄグラフィックスの表示に必要なベクトル演算やレンダリング処理等の処理をＣＰＵ３１からの指示に応じて行う半導体チップで構成され、当該ＧＰＵ３６によってレンダリングされたゲーム画像はテレビ２に表示される。光ディスクドライブ３７は、ＣＰＵ３１からの指示に応じて、光ディスク４に記憶されたゲームプログラム、画像データ、サウンドデータなどの各種のデータを読み出す。
【００２８】
以下、光ディスク４に格納されたゲームプログラムによってゲーム装置３において実行されるゲーム処理について説明する。まず、本実施形態におけるゲームの概要を説明する。本ゲームは、３次元の仮想のゲーム空間において複数のオブジェクトが登場するアクションゲームである。このゲームでは、プレイヤによって操作されるプレイヤオブジェクト、および、ゲーム装置３によって動作が制御される敵オブジェクト等が登場する。プレイヤオブジェクトおよび敵オブジェクトは、剣や弓等の武器で互いに攻撃し合う。プレイヤオブジェクトは、敵オブジェクトによる攻撃を受けると体力が減っていき、体力が０になるとゲームオーバーとなる。本ゲームでは、プレイヤは、プレイヤオブジェクトを操作して敵オブジェクトを倒すことを目的とする。
【００２９】
上記ゲームでは、ゲーム装置３は、ゲーム処理中において、オブジェクト同士が接触したか否かの判定（接触判定）を行う。プレイヤオブジェクトに敵オブジェクトの剣が当たったか否か、プレイヤオブジェクトの剣が敵オブジェクトに当たったか否か等を判定するためである。本実施形態においては、ゲーム装置３は、接触判定を行うために各オブジェクトに円柱のモデルを仮想的に設定する。
【００３０】
図３は、プレイヤオブジェクトおよびそれに設定される円柱モデルを示す図である。図３は、仮想ゲーム空間における地面７４にプレイヤオブジェクト７１が直立している状態を示している。ここで、ゲーム空間における位置を表すための座標系（ワールド座標系）は、ｘ軸およびｚ軸が地面７４と平行となり、かつ、ｙ軸が地面７４と垂直となるように設定される。プレイヤオブジェクト７１が直立している状態において、プレイヤオブジェクト７１には１つの円柱モデル７２が設定される。以下では、円柱モデル７２のように、プレイヤオブジェクト７１の全体に対応するように、プレイヤオブジェクト７１に対して１つのみ設定される円柱モデルを「全体モデル」と呼ぶことがある。
【００３１】
円柱モデル７２は、その底面が基準方向に垂直になるように設定される。基準方向は予め定められており、本実施形態における基準方向はゲーム空間の座標系（ワールド座標系）のｙ軸正方向である。つまり、円柱モデル７２は、地面７４に対してその中心軸が垂直になるように設定される。また、図３では示していないが、プレイヤオブジェクト７１以外の他のオブジェクトについても円柱モデルが設定される。他のオブジェクトに設定される円柱モデルも円柱モデル７２と同様、その底面が基準方向に垂直になるように設定される。
【００３２】
図３において、点７３は、プレイヤオブジェクト７１を基準とした円柱モデル７２の位置を決める基準となる点である。以下ではこの点を基準点と呼ぶ。ゲーム装置３は、オブジェクトについて設定される基準点の位置に基づいて、当該オブジェクトに設定すべき円柱モデルの位置を決定する。図３の例では、プレイヤオブジェクト７１が直立している状態において、基準点７３はプレイヤオブジェクト７１の足下の位置（例えば、プレイヤオブジェクト７１の中心軸と地面との交点の位置）に設定される。この状態において、円柱モデル７２は、その下面（下側の底面）の中心位置が基準点７３の位置となるように配置される。その結果、図３に示すように、プレイヤオブジェクト７１の長手方向に沿って円柱モデル７２が設定される。なお、本実施形態において、円柱モデルはオブジェクトに対して仮想的に設定される。つまり、円柱モデルは、ポリゴンによって構築されてゲーム空間に配置されるものではない。また、円柱モデルがテレビ２に表示されることはない。
【００３３】
本実施形態においては、ゲーム装置３は、各オブジェクトにそれぞれ設定される各円柱モデルを用いてオブジェクト同士の接触判定を行う。図４は、本実施形態における接触判定を説明するための図である。以下、プレイヤオブジェクト７１と３つの石オブジェクト７５ａ〜７５ｃとの接触判定を図４を用いて説明する。上述したように、プレイヤオブジェクト７１と同様に、３つの石オブジェクト７５ａ〜７５ｃについても円柱モデルが設定される。すなわち、石オブジェクト７５ａには円柱モデル７６ａが設定され、石オブジェクト７５ｂには円柱モデル７６ｂが設定され、石オブジェクト７５ｃには円柱モデル７６ｃが設定される。各石オブジェクト７５ａ〜７５ｃに設定される各円柱モデル７６ａ〜７６ｃも円柱モデル７２と同様、その底面が基準方向に垂直になるように設定される。また、ゲーム装置３は、各石オブジェクト７５ａ〜７５ｃの中心位置に基準点に設定し、基準点が中心の位置となるように各円柱モデル７６ａ〜７６ｃを配置する。
【００３４】
図４において、円柱モデル７２ａと円柱モデル７６ａとは、ｘｚ平面に関して重なっている。ここで、「２つの円柱モデルがｘｚ平面に関して重なっている」とは、２つの円柱モデルをｘｚ平面に投影することによって得られる２つの像（円形の像）が接しているか交わっていることを意味する。さらに、円柱モデル７２ａと円柱モデル７６ａとは、Ｙ軸方向に関しても重なっている。ここで、「２つの円柱モデルがｙ軸方向に関して重なっている」とは、２つの円柱モデルのｙ軸に関する位置が重なっていることを意味する。ゲーム装置３は、２つの円柱モデルがｘｚ平面に関して重なっており、かつ、ｙ軸方向に関して重なっている場合、当該２つの円柱モデルに対応する２つのオブジェクトが接触していると判断する。すなわち、図４では、プレイヤオブジェクト７１と石オブジェクト７５ａとは接触していると判断される。
【００３５】
図４において、円柱モデル７２ａと円柱モデル７６ｂとは、ｘｚ平面に関して重なっているが、ｙ軸方向に関して重なっていない。したがって、ゲーム装置３は、プレイヤオブジェクト７１と石オブジェクト７５ｂとは接触していないと判断する。また、円柱モデル７２ａと円柱モデル７６ｃとは、ｘｚ平面に関して重なっていない。したがって、ゲーム装置３は、プレイヤオブジェクト７１と石オブジェクト７５ｂとは接触していないと判断する。
【００３６】
ゲーム装置３は、２つの円柱モデルがｘｚ平面に関して重なっているか否かを判定する処理（第１判定処理）と、２つの円柱モデルがｙ軸方向に関して重なっているか否かを判定する処理（第２判定処理）とを独立して実行する。詳細は後述するが、第１判定処理は、２つの円柱モデルのｘｚ平面に関する中心間距離を算出することによって行うことができる（後述するステップＳ２３）。つまり、第１判定処理では、各円柱モデルのｘ座標およびｚ座標を用いた２次元の計算が実行される。一方、第２判定処理は、２つの円柱モデルのｙ軸方向に関する位置を算出することによって行うことができる（後述するステップＳ２５）。つまり、第２判定処理では、各円柱モデルのｙ座標を用いた１次元の計算が実行される。このように、本実施形態においてゲーム装置３は、１次元および２次元の計算によって接触判定を行うことができる。これに対して、接触判定のために球形モデルを用いる従来の方法では、ゲーム装置は３次元の計算を行わなければならない。したがって、本実施形態によれば、接触判定における計算が従来に比べて簡易になり、ゲーム装置３の処理負担を軽減することができる。
【００３７】
また、本実施形態では、ゲーム装置３は、ある２つの円柱モデルについて接触判定を行う際、まず上記第１判定処理を実行し、第１判定処理の判定結果が肯定であった場合（２つの円柱モデルがｘｚ平面に関して重なっていると判定された場合）にのみ、上記第２判定処理を実行する。したがって、第１判定処理の判定結果が否定であった場合、ゲーム装置３は第２判定処理を実行しないので、接触判定の処理をより簡単にすることができる。なお、他の実施形態においては、まず第２判定処理を実行し、第１判定処理の判定結果が肯定であった場合にのみ、第１判定処理を実行するようにしてもよい。
【００３８】
以上に説明したように、本実施形態では、各オブジェクトについて円柱モデルはすべて同じ向きに設定されるので、上記第１判定処理および第２判定処理によって接触判定を簡単に行うことができる。換言すれば、接触判定を簡単に行うためには、各円柱モデルを同じ向きに設定する必要がある。ここで、オブジェクトが傾いた状態となる場合、例えば、プレイヤオブジェクト７１が地面７４に対して傾いた状態となる場合を考える。
【００３９】
まず、プレイヤオブジェクト７１が地面７４に対して傾いた状態となる場合において、プレイヤオブジェクト７１が地面７４に直立した状態と同じように、円柱モデル７２を地面７４に対して中心軸が垂直になるように設定したと仮定する。図５は、地面に対して傾いた状態のプレイヤオブジェクト７１について円柱モデル７２を設定した一例を示す図である。図５に示すように、円柱モデル７２を地面７４に対して中心軸が垂直になるように設定すると、プレイヤオブジェクト７１の傾きと円柱モデル７２の傾きとが一致しない。そのため、プレイヤオブジェクト７１が円柱モデル７２の内部に含まれないので、プレイヤオブジェクト７１に関する接触判定を正確に行うことができない。
【００４０】
また、プレイヤオブジェクト７１が地面７４に対して傾いた状態となる場合において、プレイヤオブジェクト７１と円柱モデル７２との傾きを一致させたと仮定する。図６は、地面に対して傾いた状態のプレイヤオブジェクト７１について円柱モデル７２を設定した他の一例を示す図である。図６に示すように、円柱モデル７２の傾きをプレイヤオブジェクト７１の傾きに一致させると、プレイヤオブジェクト７１に設定される円柱モデル７２と、他のオブジェクト（石オブジェクト）７５に設定される円柱モデル７６との向きが一致しなくなる。したがって、上記第１判定処理および第２判定処理によって接触判定を行うことができず、接触判定の計算の処理量が増加してしまう。
【００４１】
図５および図６に示したように、プレイヤオブジェクト７１が地面７４に対して傾いた状態となる場合には、１つの全体モデル（円柱モデル７２）をいずれの向きに設定したとしても問題が生じる。そこで本実施形態では、上記の場合、ゲーム装置３は、プレイヤオブジェクト７１に設定される円柱モデルを分割し、複数の円柱モデルを設定する。以下では、プレイヤオブジェクト７１に複数設定される円柱モデルを「部分モデル」と呼ぶことがある。部分モデルは、プレイヤオブジェクト７１の所定部分に対応する円柱モデルである。
【００４２】
図７は、地面７４に垂直な壁７７にプレイヤオブジェクト７１が横向きに立っている状態を示す図である。ここでは、例えば、壁７７を歩くことができる魔法のブーツをプレイヤオブジェクト７１が履いた場合や、ゲームの設定上において重力の方向が変わった場合等に、プレイヤオブジェクト７１が横向きに壁７７に立つことができるものとする。
【００４３】
図７に示すように、プレイヤオブジェクト７１が地面７４に対して傾いた状態となる場合、３つの円柱モデル７２ａ〜７２ｃが部分モデルとして設定される。以下では、円柱モデル７２ａを第１部分モデルと呼び、円柱モデル７２ｂを第２部分モデルと呼び、円柱モデル７２ｃを第３部分モデルと呼ぶことがある。なお、本実施形態では、この場合において設定される円柱モデルの数を３つとしたが、部分モデルの数は２つ以上であればいくつであっても構わない。なお、本実施形態においては各円柱モデル７２ａ〜７２ｃは同じ大きさであるが、それぞれ異なる大きさであっても構わない。各円柱モデル７２ａ〜７２ｃは、図３に示した円柱モデル７２と同様、底面が基準方向に垂直となるように設定される。また、各円柱モデル７２ａ〜７２ｃは、プレイヤオブジェクト７１に沿って配置される。つまり、プレイヤオブジェクト７１が地面７４に対して横向きの状態であるので、各円柱モデル７２ａ〜７２ｃは、地面７４に対して横向きに（平行に）配置される。これによって、プレイヤオブジェクト７１が各円柱モデル７２ａ〜７２ｃのいずれかの内部に含まれるように各円柱モデル７２ａ〜７２ｃを設定することができる。したがって、複数の各円柱モデル７２ａ〜７２ｃを用いてプレイヤオブジェクト７１に関する接触判定を正確に行うことができる。
【００４４】
なお、プレイヤオブジェクト７１が地面７４に対して傾いた状態となる場合においても、プレイヤオブジェクト７１が直立している場合と同様、各円柱モデル７２ａ〜７２ｃの位置は、基準点７３ａ〜７３ｃに基づいて決定される。すなわち、円柱モデル（第１部分モデル）７２ａの位置は基準点７３ａに基づいて決定され、円柱モデル（第２部分モデル）７２ｂの位置は基準点７３ｂに基づいて決定され、円柱モデル（第３部分モデル）７２ｃの位置は基準点７３ｃに基づいて決定される。また、プレイヤオブジェクト７１が地面７４に対して傾いた状態となる場合、各円柱モデル７２ａ〜７２ｃは、円柱の中心位置が基準点７３の位置となるように配置される。プレイヤオブジェクト７１に対する基準点７３の位置は、各円柱モデル７２ａ〜７２ｃを用いてプレイヤオブジェクト７１に関する接触判定を正確に行うべく、プレイヤオブジェクト７１が各円柱モデル７２ａ〜７２ｃのいずれかの内部に含まれるように設定される。
【００４５】
図８は、斜面７８に対して垂直にプレイヤオブジェクト７１が立っている状態を示す図である。図８において、矢印Ｄ１は基準方向を示し、矢印Ｄ２はプレイヤオブジェクト７１の向きを示している。なお、本実施形態において、プレイヤオブジェクト７１の向きは、プレイヤオブジェクト７１の長手方向の向きであって、プレイヤオブジェクト７１の下（足の側）から上（頭の側）を向く向きである。本実施形態では、基準方向とプレイヤオブジェクト７１の長手方向の向きとのなす角度に基づいて、プレイヤオブジェクト７１に設定される円柱モデルの個数が決定される。円柱モデルの個数の決定方法の詳細は後述する（図１０、図１１のステップＳ５参照）。ここでは、図８に示す状態では、プレイヤオブジェクト７１が壁７７に立っている場合と同様、プレイヤオブジェクト７１には複数の円柱モデル７２ａ〜７２ｃが設定されるものとする。
【００４６】
また、プレイヤオブジェクト７１に設定される基準点の位置、および、基準点に対して円柱モデルを配置する位置は、基準方向とプレイヤオブジェクト７１の向きとのなす角度に基づいて決定される。基準点の位置および円柱モデルの配置位置の決定方法の詳細については後述する（図１０、図１１のステップＳ６参照）。図８に示す状態では、円柱モデル７２ａ〜７２ｃは、その下面の中心位置が基準点の位置となるように配置される。各基準点７３ａ〜７３ｃの位置は、接触判定が正確に行われるようにするため、プレイヤオブジェクト７１が各円柱モデル７２ａ〜７２ｃのいずれかの内部に含まれるように設定される。
【００４７】
なお、図８においては、プレイヤオブジェクト７１に設定される各円柱モデル７２ａ〜７２ｃ同士が重なっている。本実施形態では、接触判定の処理において、ゲーム装置３は、単一のオブジェクトに設定される複数の円柱モデル同士については接触判定を行わない。接触判定を行う必要がないからである。
【００４８】
以上のように、本実施形態によれば、ゲーム装置３は、円柱形のモデルを用いてオブジェクト同士の接触判定を行う。これによって、球形のモデルを用いる場合に比べて接触判定の処理を簡易に行うことができる。さらに、本実施形態においては、細長い概観（縦長または横長の外観）を有するオブジェクト（プレイヤオブジェクト７１）については、当該オブジェクトの向きに応じて、１つの全体モデルを設定するか、複数の部分モデルを設定するかを使い分ける。これによって、各オブジェクトに設定される円柱モデルの向きを一定としながら、細長い外観を有するオブジェクトに対して正確に接触判定を行うことができる。
【００４９】
次に、ゲーム処理において用いられる主なデータについて図９を用いて説明する。図９は、ゲーム装置３のワークメモリ３２に記憶される主なデータを示す図である。図９に示すように、ワークメモリ３２には、ゲームプログラム８０およびゲームデータ８１が記憶される。ゲームプログラム８０は、後述するゲーム処理（図１１参照）をゲーム装置３に実行させるためのゲームプログラムである。
【００５０】
ゲームデータ８１には、プレイヤオブジェクトデータ８２、第１および第２オブジェクトデータ９２ａおよび９２ｂ、ならびに、モデル決定テーブルデータ９３等が含まれる。図９では、第１オブジェクトデータ９２ａおよび第２オブジェクトデータ９２ｂという２つのオブジェクトに関するデータのみを示しているが、ワークメモリ３２には、ゲーム空間に登場する各オブジェクトに関するデータが記憶される。なお、ワークメモリ３２には、図９に示すデータの他、各キャラクタ（プレイヤキャラクタや敵キャラクタ）の画像データやゲーム空間に関するデータ（地形データ等）等、ゲーム処理に必要なデータが記憶される。
【００５１】
プレイヤオブジェクトデータ８２は、プレイヤオブジェクト７１に関するデータである。具体的には、プレイヤオブジェクトデータ８２には、オブジェクト位置データ８３、姿勢データ８４、全体モデルデータ８５、第１〜第３部分モデルデータ９０ａ〜９０ｃ、および接触オブジェクトデータ９１が含まれる。オブジェクト位置データ８３は、プレイヤオブジェクト７１のゲーム空間内における位置を示す。ここでは、プレイヤオブジェクト７１の位置は、上記ワールド座標系を用いて表現される。具体的には、プレイヤオブジェクト７１の位置は、プレイヤオブジェクト７１の足下の地面の位置とされる。姿勢データ８４は、プレイヤオブジェクト７１の向き（姿勢）を示す。ここでは、プレイヤオブジェクト７１の長手方向の軸（中心軸）に沿った方向を示すベクトルのデータが姿勢データ８４としてワークメモリ３２に記憶される。プレイヤオブジェクト７１の長手方向の軸に沿った方向とは、具体的には、プレイヤオブジェクト７１の足下から頭への方向である。
【００５２】
全体モデルデータ８５は、プレイヤオブジェクト７１に設定される全体モデル（円柱モデル７２）に関するデータである。具体的には、全体モデルデータ８５には、基準位置データ８６、配置位置データ８７、半径データ８８、および高さデータ８９が含まれる。
【００５３】
基準位置データ８６は、全体モデルに対応する基準点の位置を示すデータである。なお、基準点の位置は、プレイヤオブジェクト７１の所定点を原点とした座標系を用いて、プレイヤオブジェクト７１に対する位置として表される。
【００５４】
配置位置データ８７は、基準点に対して全体モデルをどの位置に配置するかを示すデータである。具体的には、配置位置データ８７は、「中心」、「下面」、または「上面」のいずれかを示す。配置位置データ８７が「中心」を示す場合、全体モデルである円柱モデルは、その中心が基準点の位置となるように配置される。配置位置データ８７が「下面」を示す場合、全体モデルである円柱モデルは、その下面の中心が基準点の位置となるように配置される。配置位置データ８７が「上面」を示す場合、全体モデルである円柱モデルは、その上面の中心が基準点の位置となるように配置される。
【００５５】
半径データ８８は、全体モデルである円柱モデルの底面の半径の長さを示すデータである。高さデータ８９は、全体モデルである円柱モデルの高さを示すデータである。全体モデルデータ８５に含まれる半径データ８８および高さデータ８９の内容は、ゲームプログラム８０において予め定められている。つまり、各オブジェクトに設定される全体モデルの高さは、予め定められている。
【００５６】
第１部分モデルデータ９０ａは、プレイヤオブジェクト７１に設定される各部分モデルのうちの上記第１部分モデル（円柱モデル７２ａ）に関するデータである。同様に、第２部分モデルデータ９０ｂは、プレイヤオブジェクト７１に設定される各部分モデルのうちの上記第２部分モデル（円柱モデル７２ｂ）に関するデータである。第３部分モデルデータ９０ｃは、プレイヤオブジェクト７１に設定される各部分モデルのうちの第３部分モデル（円柱モデル７２ｃ）に関するデータである。
【００５７】
なお、図９には示していないが、第１部分モデルデータ９０ａは、全体モデルデータ８５と同様のデータを含む。すなわち、第１部分モデルデータ９０ａは、円柱モデル７２ａに関する基準位置データ、配置位置データ、半径データ、および高さデータを含む。また、第２および第３部分モデルデータ９０ｂおよび９０ｃは、第１部分モデルデータ９０ａと同様、基準位置データ、配置位置データ、半径データ、および高さデータを含む。
【００５８】
接触オブジェクトデータ９１は、プレイヤオブジェクト７１と接触したと判定される他のオブジェクトを示すデータである。すなわち、プレイヤオブジェクト７１と他のオブジェクトとが接触している間、当該他のオブジェクトを示すデータが接触オブジェクトデータ９１としてワークメモリ３２に記憶される。
【００５９】
第１オブジェクトデータ９２ａは、ゲーム空間に登場する所定の第１オブジェクト関するデータである。第１オブジェクトデータ９２ａは、プレイヤオブジェクトデータ８２と同様、オブジェクト位置データ、姿勢データおよび全体モデルデータを含む。第１オブジェクトデータ９２ａに含まれるオブジェクト位置データは、第１オブジェクトのゲーム空間内における位置を示す。第１オブジェクトデータ９２ａに含まれる姿勢データは、第１オブジェクトの姿勢を示す。第１オブジェクトデータ９２ａに含まれる全体モデルデータは、第１オブジェクトに設定される全体モデルに関するデータである。さらに、第１オブジェクトは、部分モデルデータを含んでいてもよいし、全体モデルデータのみを含むものであってもよい。つまり、ゲーム空間に登場するすべてのオブジェクトについて部分モデルが設定される必要はなく、ゲーム装置３は、一部のオブジェクトについては、オブジェクトの向き（姿勢）がどの向きであっても１つの全体モデルを設定するようにしてもよい。なお、第２オブジェクトデータ９２ｂ等の他のオブジェクトデータも第１オブジェクトデータと同様のデータ構造を有する。
【００６０】
モデル決定テーブルデータ９３は、オブジェクトに設定すべき円柱モデルの数および位置を決定するためのモデル決定テーブルを示す。図１０は、モデル決定テーブルの一例を示す図である。図１０に示すモデル決定テーブルは、プレイヤオブジェクト７１に円柱モデルを設定する場合に用いるテーブルである。モデル決定テーブルは、プレイヤオブジェクト７１の基準方向に対する角度θと、プレイヤオブジェクト７１に設定すべき円柱モデルの個数と、円柱モデルに対応する基準点の位置（基準位置）と、基準点に対して円柱モデルを配置する位置（配置位置）とを対応付けるテーブルである。具体的には、プレイヤオブジェクト７１が地面７４に対して直立している場合（θ＝０°の場合）、プレイヤオブジェクト７１には１つの円柱モデル（全体モデル）が設定され、基準点の位置は位置Ｐ１に決定され、円柱モデルはその下面の中心が基準点の位置となるように配置される。また、上記角度θが０°＜θ≦４５°範囲にある場合、プレイヤオブジェクト７１には３つの円柱モデル（部分モデル）が設定される。そして、各基準点の位置は位置Ｐ２〜Ｐ４に決定される。より具体的には、第１部分モデル（図１０では「第１」と記載）に対応する基準点の位置は位置Ｐ２に決定され、第２部分モデル（図１０では「第２」と記載）に対応する基準点の位置は位置Ｐ３に決定され、第３部分モデル（図１０では「第３」と記載）に対応する基準点の位置は位置Ｐ４に決定される。そして、各円柱モデルはその下面の中心が基準点の位置となるように配置される。また、上記角度θが４５°＜θ＜１３５°範囲にある場合、プレイヤオブジェクト７１には３つの円柱モデル（部分モデル）が設定され、各基準点の位置は位置Ｐ５〜Ｐ７に決定され、各円柱モデルはその中心が基準点の位置となるように配置される。上記角度θが１３５°≦θ＜１８０°範囲にある場合、プレイヤオブジェクト７１には３つの円柱モデル（部分モデル）が設定され、各基準点の位置は位置Ｐ８〜Ｐ１０に決定され、各円柱モデルはその上面の中心が基準点の位置となるように配置される。上記角度θがθ＝１８０°となる場合（プレイヤオブジェクト７１が天井に逆さまに立っている場合）、プレイヤオブジェクト７１には１つの円柱モデル（全体モデル）が設定され、基準点の位置は位置Ｐ１１に決定され、円柱モデルはその上面の中心が基準点の位置となるように配置される。
【００６１】
なお、図１０においては、角度θが０°または１８０°の場合のみ、プレイヤオブジェクト７１には全体モデルが設定されることとしたが、０°≦θ＜θ’（θ’は所定の定数）の場合にはプレイヤオブジェクト７１に全体モデルが設定されるようにしてもよい。つまり、ゲーム装置３は、基準方向に対してプレイヤオブジェクト７１が若干傾いた姿勢であっても、全体モデルを用いるようにしてもよい。また、本実施形態では、モデル決定テーブルは１種類のみが記憶されるものとしたが、ゲーム装置３は、オブジェクトの種類や状態に応じて異なるモデル決定テーブルを用意しておいてもよい。
【００６２】
次に、ゲームプログラム８０を実行することによってゲーム装置３において行われるゲーム処理の詳細を、図１１および図１２を用いて説明する。図１１は、ゲーム装置３において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ３１は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、ワークメモリ３２等の各ユニットが初期化される。そして、カートリッジ５に格納されたゲームプログラム８０がワークメモリ３２に読み込まれ、ＣＰＵ３１によってゲームプログラム８０の実行が開始される。図８に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図１１および図１２においては、ゲーム処理のうち、プレイヤオブジェクトと他のオブジェクトとがゲーム中に接触したか否かを判定する処理について詳細に示し、本願発明と関連しない他のゲーム処理については詳細な説明を省略する。また、図１１および図１２に示すゲーム処理では、プレイヤオブジェクト以外のオブジェクトについては部分オブジェクトは設定されないものとする。
【００６３】
ステップＳ１において、仮想の３次元のゲーム空間が構築され、ゲーム空間の一部を表示するための仮想カメラの初期状態における位置および向き（視線方向）が決定される。また、構築されたゲーム空間の初期位置に各オブジェクトが配置される。つまり、ＣＰＵ３１は、当該各オブジェクトの初期位置を示すデータが、各オブジェクトのオブジェクトデータに含まれるオブジェクト位置データとしてワークメモリ３２に記憶される。
【００６４】
続くステップＳ２において、各オブジェクトに円柱モデルが設定される。なお、ステップＳ２では各オブジェクトには全体モデルが設定されるものとする。すなわち、ＣＰＵ３１は、全体モデルデータに含まれる各データ（基準位置データ、配置位置データ、半径データ、および高さデータ）の内容を設定する。なお、ステップＳ２で設定される各データの内容は、ゲームプログラム８０において予め定められている。
【００６５】
以上のステップＳ２の後のステップＳ３以降の処理において、コントローラ６を用いたゲーム操作が受け付けられ、ゲームが進行する。なお、ステップＳ３〜Ｓ１１の処理ループは、１回の処理ループが１フレームの間に実行される。
【００６６】
ステップＳ３において、各オブジェクトの動作の制御が行われる。例えば、プレイヤオブジェクトの動作は、プレイヤによるコントローラ６の操作に従って制御される。また、敵オブジェクトの動作は、ゲームプログラム８０に含まれている所定のアルゴリズムに従ってＣＰＵ３１によって制御される。その他、例えば敵オブジェクトが石オブジェクトを投げた場合には、当該石オブジェクトの動作は、石オブジェクトが投げられたときの速度や仮想的に設定される重力等に従ってＣＰＵ３１によって制御される。ステップＳ３の処理によって、オブジェクトが動作することによってオブジェクトのゲーム空間における位置や姿勢が変化する場合、ＣＰＵ３１は、当該オブジェクトのオブジェクトデータ（第１オブジェクトデータ９２ａ等）に含まれるオブジェクト位置データの内容を、変化後の位置を示すデータに更新し、当該オブジェクトデータに含まれるオブジェクト姿勢データの内容を、変化後の姿勢を示すデータに更新する。例えば、プレイヤオブジェクトの位置および姿勢が変更された場合、プレイヤオブジェクトデータ８２のオブジェクト位置データ８３および姿勢データ８４の内容が更新される。
【００６７】
ステップＳ４において、プレイヤオブジェクトの上記基準方向を基準とした角度が算出される。具体的には、ＣＰＵ３１は、プレイヤオブジェクト７１の位置における地面と基準方向とのなす角度を算出する。なお、プレイヤオブジェクト７１の位置とは、上述のように、プレイヤオブジェクト７１の足下の地面の位置であり、オブジェクト位置データ８３により示される。したがって、ＣＰＵ３１は、オブジェクト位置データ８３により示される位置の地面の角度を、ゲーム空間の地形データを参照して算出し、算出した角度と基準方向とのなす角度を算出する。なお、他の実施形態においては、ステップＳ４において、ワークメモリ３２に記憶されている姿勢データ８４を参照し、当該姿勢データにより示される方向と、予め定められている上記基準方向との角度を算出するようにしてもよい。
【００６８】
ステップＳ５において、プレイヤオブジェクトに設定すべき円柱モデルの数が、ステップＳ４で算出された角度に基づいて決定される。本実施形態においては、ＣＰＵ３１は、ワークメモリ３２に記憶されているモデル決定テーブルを用いて円柱モデルの数を決定する。すなわち、モデル決定テーブルにおいて上記角度に対応付けられている円柱モデルの数を特定する。例えば、プレイヤオブジェクトが地面に垂直な壁７７に横向きに立っている場合（図５参照）、角度θ＝９０°となるので、円柱モデルの数は３つに決定される。
【００６９】
ステップＳ６において、プレイヤオブジェクトに対して円柱モデルを設定する位置が決定される。本実施形態においては、ＣＰＵ３１は、円柱モデルを設定する位置を、上記モデル決定テーブルを用いて決定する。すなわち、ＣＰＵ３１は、モデル決定テーブルにおいて上記角度に対応付けられている基準位置および配置位置を特定する。そして、特定した基準位置を示すデータを基準位置データ８６としてワークメモリ３２に記憶するとともに、特定した配置位置を示すデータを配置位置データ８７としてワークメモリ３２に記憶する。さらに、ＣＰＵ３１は、ワークメモリ３２に記憶された基準位置データ８６および配置位置データ８７の内容に従って円柱モデルの位置を決定する。例えば、プレイヤオブジェクトが地面に垂直な壁７７に横向きに立っている場合（図５参照）、角度θ＝９０°となるので、３つの円柱モデルにそれぞれ対応する基準点の位置は位置Ｐ５〜位置Ｐ７にそれぞれ決定され、３つの円柱モデルはその中心が基準点の位置となるように配置される。
【００７０】
ステップＳ７においては、接触判定処理が実行される。接触判定処理は、２つのオブジェクト（ここでは、プレイヤオブジェクトと他のオブジェクト）が接触しているか否かを判定するための処理である。以下、接触判定処理の詳細について図１２を用いて説明する。
【００７１】
図１２は、図１１に示すステップＳ７の詳細な処理の流れを示すフローチャートである。なお、図１２で示される処理、プレイヤオブジェクトと他のオブジェクトとの接触について判定するための処理であるが、他のオブジェクト同士の接触を判定する処理も図１２と同様に行うことができる。接触判定処理においてはまずステップＳ２１において、ＣＰＵ３１は、プレイヤオブジェクトに設定された円柱モデルのうちの１つを選択する。なお、ステップＳ２１の処理は、ステップＳ２１〜Ｓ３０の処理ループが繰り返される間に繰り返し実行される。この間におけるステップＳ２１では、ＣＰＵ３１は、まだ選択されていない円柱モデルを選択する。
【００７２】
ステップＳ２２において、ＣＰＵ３１は、他のオブジェクトに設定された円柱モデルのうちの１つを選択する。なお、ステップＳ２２の処理は、ステップＳ２１〜Ｓ３０の処理ループが繰り返される間に繰り返し実行される。この間におけるステップＳ２２では、ＣＰＵ３１は、まだ選択されていない円柱モデルを選択する。
【００７３】
ステップＳ２３では、ステップＳ２１およびＳ２２で選択された２つの円柱モデルのｘｚ平面に関する距離が算出される。ここで算出される距離は、２つの円柱モデルの中心間距離である。具体的には、一方の円柱モデルの位置を示す座標を（ｘ１，ｙ１，ｚ１）とし、他方の円柱モデルの位置を示す座標を（ｘ２，ｙ２，ｚ２）としたとき、上記距離ｄは、次の式に従って算出される。
ｄ＝（（ｘ１−ｘ２）2 ＋（ｚ１−ｚ２）2 ）1/2
なお、円柱モデルの位置とは、円柱モデルに対応する基準点の位置である。また、プレイヤオブジェクト７１を基準とした座標系を用いて基準点の位置が表される場合、ＣＰＵ３１は、基準点の位置を示す座標値を、ワールド座標系を用いた座標値に変換してから上式の計算を実行する。
【００７４】
ステップＳ２４においては、ステップＳ２１およびＳ２２で選択された２つの円柱モデルがｘｚ平面に関して重なっているか否かが判定される。この判定処理は、ステップＳ２３で算出された距離ｄと、ステップＳ２１で選択された円柱モデルの半径ｒ１と、ステップＳ２２で選択された円柱モデルの半径ｒ２とを用いて行うことができる。なお、当該半径ｒ１およびｒ２は、全体モデルデータまたは部分モデルデータに含まれる半径データとしてワークメモリ３２に記憶されている。具体的には、ＣＰＵ３１は、次の式が満たされるか否かによって、２つの円柱モデルがｘｚ平面に関して重なっているか否かを判定する。
ｒ１＋ｒ２≧ｄ
すなわち、ｒ１＋ｒ２≧ｄとなる場合、２つの円柱モデルはｘｚ平面に関して重なっていると判定され、ｒ１＋ｒ２＜ｄとなる場合、２つの円柱モデルはｘｚ平面に関して重なっていないと判定される。ステップＳ２４の判定において、２つの円柱モデルはｘｚ平面に関して重なっていると判定される場合、ステップＳ２５の処理が実行される。一方、２つの円柱モデルはｘｚ平面に関して重なっていないと判定される場合、ステップＳ２８の処理が実行される。
【００７５】
ステップＳ２５において、ステップＳ２１およびＳ２２で選択された２つの円柱モデルについて、それぞれ、円柱モデルの高さ方向の幅が算出される。この幅は、ワールド座標系におけるｙ座標値の範囲として表され、円柱モデルの高さと、円柱モデルに対応する基準点の位置（基準位置）と、円柱モデルの基準位置に対する配置位置とに基づいて算出することができる。例えば、ワールド座標系を用いて表される基準位置の座標値を（ｘ３，ｙ３，ｚ３）とし、円柱モデルの高さをｈとする。このとき、配置位置が「下面」であれば、上記幅は、ｙ３≦ｙ≦ｙ３＋ｈとなる。配置位置が「中心」であれば、幅は、ｙ３−ｈ／２≦ｙ≦ｙ３＋２／ｈとなる。配置位置が「上面」であれば、幅は、ｙ３≦ｙ≦ｙ３＋ｈとなる。以上のようにして、ステップＳ２１およびＳ２２で選択された２つの円柱モデルについて、ｙ座標値の取り得る範囲が算出される。ステップＳ２５の次にステップＳ２６の処理が実行される。
【００７６】
ステップＳ２６において、ステップＳ２１およびＳ２２で選択された２つの円柱モデルがｙ軸方向に関して重なっているか否かが判定される。この判定処理は、ステップＳ２５で算出された幅の範囲値を用いて行うことができる。具体的には、ＣＰＵ３１は、ステップＳ２５で算出された２つの範囲が重複するか否かによって、２つの円柱モデルがｙ軸方向に関して重なっているか否かを判定する。例えば、２つの範囲が“１≦ｙ≦５”と“４≦ｙ≦６”であった場合、当該２つの範囲は重複するので、２つの円柱モデルがｙ軸方向に関して重なっていると判定される。一方、２つの範囲が“１≦ｙ≦５”と“７≦ｙ≦９”であった場合、当該２つの範囲は重複しないので、２つの円柱モデルがｙ軸方向に関して重なっていないと判定される。ステップＳ２６において、２つの円柱モデルがｙ軸方向に関して重なっていると判定される場合、ステップＳ２７の処理が実行される。一方、ステップＳ２６において、２つの円柱モデルがｙ軸方向に関して重なっていないと判定される場合、ステップＳ２８の処理が実行される。
【００７７】
ステップＳ２７においては、ステップＳ２１およびＳ２２で選択された２つの円柱モデルがそれぞれ設定される２つのオブジェクト同士が接触していると判断される。具体的には、ＣＰＵ３１は、ワークメモリ３２に記憶されているプレイヤオブジェクトデータ８２に含まれる接触オブジェクトデータ９１の内容を更新する。より具体的には、ステップＳ２２で選択された円柱モデルが設定されるオブジェクトを示すデータを、上記接触オブジェクトデータ９１として追加する。ステップＳ２７の次にステップＳ２９の処理が実行される。
【００７８】
一方、ステップＳ２８においては、ステップＳ２１およびＳ２２で選択された２つの円柱モデルがそれぞれ設定される２つのオブジェクトは接触していないと判断される。具体的には、ＣＰＵ３１は、ステップＳ２２で選択された円柱モデルが設定されるオブジェクトを示すデータが上記接触オブジェクトデータ９１に含まれている場合、当該オブジェクトを示すデータを削除する。ステップＳ２８の次にステップＳ２９の処理が実行される。
【００７９】
ステップＳ２９において、プレイヤオブジェクト以外の他のオブジェクトに設定される全ての円柱モデルを上記ステップＳ２２で選択したか否かが判定される。まだ選択していない円柱モデルが存在する場合、ステップＳ２２の処理が再度実行される。ステップＳ２９の処理は、ステップＳ２１で選択された円柱モデルとその他の円柱モデルとの接触判定が完了したか否かを判定するために実行される。以降、ステップＳ２９における判定結果が肯定となるまで、ステップＳ２２〜Ｓ２９の処理ループが繰り返される。一方、すでに全ての円柱モデルを選択している場合、ステップＳ３０の処理が実行される。
【００８０】
ステップＳ３０において、プレイヤオブジェクトに設定される全ての円柱モデルを上記ステップＳ２１で選択したか否かが判定される。まだ選択していない円柱モデルが存在する場合、ステップＳ２１の処理が再度実行される。ステップＳ３０の処理は、プレイヤオブジェクトに設定される全ての円柱モデルについて接触判定が完了したか否かを判定するために実行される。以降、ステップＳ３０における判定結果が肯定となるまで、ステップＳ２１〜Ｓ３０の処理ループが繰り返される。一方、すでに全ての円柱モデルを選択している場合、ＣＰＵ３１は接触判定処理を終了する。
【００８１】
図１１の説明に戻り、ステップＳ７の接触判定処理の次のステップＳ８において、プレイヤオブジェクトに接触している他のオブジェクトが存在するか否かが判定される。この判定は、ワークメモリ３２に記憶されているプレイヤオブジェクトデータ８２の接触オブジェクトデータ９１に基づいて行うことができる。すなわち、ＣＰＵ３１は、接触オブジェクトデータ９１に他のオブジェクトを示すデータが含まれているか否かを判定する。そして、接触オブジェクトデータ９１に他のオブジェクトを示すデータが含まれている場合、プレイヤオブジェクトに接触している他のオブジェクトが存在すると判定する。逆に、接触オブジェクトデータ９１に他のオブジェクトを示すデータが含まれていない場合、プレイヤオブジェクトに接触している他のオブジェクトが存在しないと判定する。ステップＳ８の判定において、プレイヤオブジェクトに接触している他のオブジェクトが存在すると判定される場合、ステップＳ９の処理が実行される。一方、プレイヤオブジェクトに接触している他のオブジェクトが存在しないと判定される場合、ステップＳ９の処理がスキップされてステップＳ１０の処理が実行される。
【００８２】
ステップＳ９においては、プレイヤオブジェクトとそれに接触している他のオブジェクトとの接触に応じた動作の制御が行われる。例えば、プレイヤオブジェクトと石オブジェクトが接触している場合であれば、ＣＰＵ３１は、（プレイヤによる操作とは無関係に）石に当たってのけぞる動作をプレイヤオブジェクトに行わせたり、石オブジェクトがプレイヤオブジェクトに当たって跳ね返るように、石オブジェクトの移動方向を変化させたりする。ステップＳ９の次にステップＳ１０の処理が実行される。
【００８３】
ステップＳ１０において、ゲーム空間内において各オブジェクトが動作する様子がテレビ２に表示される。ＣＰＵ３１は、ステップＳ３，Ｓ４およびＳ９によって決定された位置および姿勢となった各オブジェクトを仮想カメラから見たゲーム画像を生成し、生成したゲーム画像をテレビ２に表示させる。続くステップＳ１１において、ゲームを終了するか否かが判定される。ステップＳ１１の判定は、例えば、プレイヤキャラクタの体力が０になったか否かや、プレイヤキャラクタが全ての敵キャラクタを倒したか否か等によって行われる。ステップＳ１１の判定において、ゲームを終了すると判定された場合、ＣＰＵ３１は、図１１に示すゲーム処理を終了する。一方、ゲームを終了しないと判定された場合、ステップＳ３の処理が行われ、以降、ステップＳ１１においてゲームを終了すると判定されるまでステップＳ３〜Ｓ１１の一連の処理が繰り返される。以上で、ゲーム処理の詳細な説明を終了する。
【００８４】
以上のように、本実施形態によれば、所定の基準方向に対するプレイヤオブジェクトの角度を算出し（ステップＳ４）、当該角度が所定値よりも大きい場合には、プレイヤオブジェクトに対して複数の円柱モデルを設定する（ステップＳ５）。このように、円柱モデルを用いることによって接触判定を簡単に行うとともに、複数の円柱モデルを用いることによって、プレイヤオブジェクトが基準方向から傾いた姿勢であっても接触判定を正確に行うことができる。
【００８５】
また、上記実施形態においては、円柱モデルによってプレイヤオブジェクトの形状を適切に近似するために、オブジェクトに対する円柱モデルの位置をプレイヤオブジェクトの角度θに合わせて変更した（ステップＳ６）。具体的には、ゲーム装置３は、角度θに応じて基準位置および配置位置を変更するようにした。ここで、オブジェクトに対する円柱モデルの位置を変更するためには、基準位置および配置位置のいずれか一方を変更すれば足りる。したがって、他の実施形態においては、オブジェクトに対する円柱モデルの位置をプレイヤオブジェクトの角度θに合わせて変更するために、基準位置および配置位置のいずれか一方のみを変更するようにしてもよい。
【００８６】
なお、上記においては、プレイヤオブジェクトについて全体モデルと部分モデルとを使い分ける場合を例として説明したが、本発明は、仮想の３次元空間に登場するあらゆるオブジェクトについて適用することが可能である。ステップＳ７の接触判定処理は、プレイヤオブジェクト以外の他のオブジェクトについてもプレイヤオブジェクトと同様に適用することができる。
【００８７】
図１３は、あるオブジェクト９４に設定される全体モデルと分割モデルとを示す図である。なお、図１３では、円柱モデルを見やすくする目的で、オブジェクト９４を点線で示している。図１３において、全体モデル９５の高さをＨとし、底面の半径をＲとする。また、このオブジェクト９４に設定される部分モデルの数を３つ（円柱モデル９５ａ〜９５ｃ）とし、３つの円柱モデル９５ａ〜９５ｃの底面の半径をｒ１、ｒ２、およびｒ３とする。このとき、全体モデルの高さＨと円柱モデル９５ａ〜９５ｃの各底面の半径ｒ１〜ｒ３との間には、次の関係が成り立つことが好ましい。
Ｈ≦２×（ｒ１＋ｒ２＋ｒ３）
ここで、上式が満たされない場合、各円柱モデル９５ａ〜９５ｃの間に隙間が空いてしまうので（図１３（ｂ）参照）、衝突判定を正確に行うことができなくなるからである。そのため、衝突判定を正確に行うためには、少なくとも上式を満たすように全体モデルおよび部分モデルの大きさを決定する必要がある。さらに、各円柱モデル９５ａ〜９５ｃは、オブジェクト９４に設定される他の円柱モデル９５ａ〜９５ｃの少なくとも１つに接するように配置されることが好ましい。これによって、各円柱モデル９５ａ〜９５ｃからなる（円柱モデルの）複合体が１つになり、各円柱モデル９５ａ〜９５ｃの間に隙間が空くことなく、各円柱モデル９５ａ〜９５ｃの内部にオブジェクト９５を含めることができ、衝突判定を正確に行うことができる。なお、図１３では部分モデルの数が３個の場合について説明したが、部分モデルの数がｎ個（ｎは２以上の整数）の場合、各部分モデルの底面の直径の総和が全体モデルの高さ以上となるように全体モデルおよび部分モデルの大きさを設定すればよい。
【００８８】
なお、上記実施形態では、プレイヤオブジェクト７１が地面７４に対して直立している状態では、１つの全体モデルを設定するようにしたが、他の実施形態においては、この状態においても複数の部分モデルを設定するようにしてもよい。このとき、部分モデルの個数は予め定められ、図１１に示すステップＳ５の処理は不要となる。
【００８９】
次に、上記実施形態の変形例について図１４および図１５を用いて説明する。この変形例では、ゲーム装置３は、基準方向に対するプレイヤオブジェクト７１の角度に応じて円柱モデルの大きさを変更する。以下、詳細を説明する。
【００９０】
図１４は、本実施形態の変形例において用いられるモデル決定テーブルの一例を示す図である。図１４に示すモデル決定テーブルは、図１０に示すモデル決定テーブルの内容に加えて、プレイヤオブジェクト７１の基準方向に対する角度θと、円柱モデルの大きさ（底面半径および高さ）との対応付けを表す。ゲーム装置３は、この対応付けに従って、角度に応じて円柱モデルの大きさを決定する。
【００９１】
図１５は、上記実施形態の変形例におけるゲーム処理の流れを示すフローチャートである。なお、図１５において、図１１に示すステップと同じ処理を示すステップについては図１１と同じステップ番号を付し、詳細な説明は省略する。変形例においては、ステップＳ６の次にステップＳ３１が実行される点のみ、上記実施形態と異なる。
【００９２】
ステップＳ３１においては、プレイヤオブジェクトに設定すべき円柱モデルの大きさが、ステップＳ４で算出された角度に基づいて決定される。ステップＳ３１の処理は、ワークメモリ３２に記憶されているモデル決定テーブルを参照することによって行われる。すなわち、ＣＰＵ３１は、各円柱モデルの大きさを、モデル決定テーブルにおいて上記角度に対応付けられている各円柱モデルの大きさに決定する。図１４に示すモデル決定テーブルを例にとって説明すると、角度θが４５°＜θ＜１３５°範囲にある場合、第１部分モデルの底面半径はｒ２に決定され、高さはｈ２に決定される。さらに、第２部分モデルの底面半径はｒ３に決定され、高さはｈ３に決定され、第３部分モデルの底面半径はｒ４に決定され、高さはｈ４に決定される。このとき、ＣＰＵ３１は、プレイヤオブジェクトデータ８２の各部分モデルデータ９０ａ〜９０ｃに含まれる半径データおよび高さデータの内容を、決定後の内容に更新する。なお、ステップＳ３１の次にステップＳ７の処理が実行される。本変形例におけるステップＳ７以降の処理は上記実施形態と同様である。
【００９３】
以上のように、上記変形例によれば、基準方向に対するプレイヤオブジェクトの角度に応じて円柱モデルの大きさを変えることができるので、円柱モデルの大きさをプレイヤオブジェクトの傾きに合わせてより詳細に決定することができる。なお、上記変形例においては、プレイヤオブジェクトに設定される円柱モデルの大きさを変化させる場合を例として説明したが、本変形例をプレイヤオブジェクト以外の他のオブジェクトについて適用することも可能である。
【００９４】
また、上記実施形態では、本発明がゲーム装置およびゲームプログラムとして実現される場合を例として説明したが、本発明は、ゲーム装置およびゲームプログラムに限らず、仮想の３次元空間に登場するオブジェクト同士の接触判定を行うための画像処理装置または画像処理プログラムに適用することが可能である。
【産業上の利用可能性】
【００９５】
本発明は、オブジェクト同士の接触判定における処理負荷をより軽減させること等を目的として、例えばゲーム装置やゲームプログラムに利用することができる。
【図面の簡単な説明】
【００９６】
【図１】本発明の一実施形態に係るゲーム装置を含むゲームシステムの外観図
【図２】図１に示すゲームシステムの機能ブロック図
【図３】プレイヤオブジェクトおよびそれに設定される円柱モデルを示す図
【図４】本実施形態における接触判定を説明するための図
【図５】地面に対して傾いた状態のプレイヤオブジェクトについて円柱モデルを設定した一例を示す図
【図６】地面に対して傾いた状態のプレイヤオブジェクトについて円柱モデルを設定した他の一例を示す図
【図７】地面に垂直な壁にプレイヤオブジェクトが横向きに立っている状態を示す図
【図８】斜面に対して垂直にプレイヤオブジェクトが立っている状態を示す図
【図９】ゲーム装置のワークメモリに記憶される主なデータを示す図
【図１０】モデル決定テーブルの一例を示す図
【図１１】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図１２】図１１に示すステップＳ７の詳細な処理の流れを示すフローチャート
【図１３】あるオブジェクトに設定される全体モデルと分割モデルとを示す図
【図１４】本実施形態の変形例において用いられるモデル決定テーブルの一例を示す図
【図１５】上記実施形態の変形例におけるゲーム処理の流れを示すフローチャート
【符号の説明】
【００９７】
１  ゲームシステム
２  テレビジョン受像機
３  ゲーム装置
４  光ディスク
６  コントローラ
３１  ＣＰＵ
３２  ワークメモリ
７１  プレイヤオブジェクト
７２，７２ａ〜７２ｃ，７６ａ〜７６ｃ  円柱モデル
７３，７３ａ〜７３ｃ  基準点
７５  石オブジェクト
８０  ゲームプログラム
【図１】
0004660357.tif 000002
【図２】
0004660357.tif 000003
【図３】
0004660357.tif 000004
【図４】
0004660357.tif 000005
【図５】
0004660357.tif 000006
【図６】
0004660357.tif 000007
【図７】
0004660357.tif 000008
【図８】
0004660357.tif 000009
【図９】
0004660357.tif 000010
【図１０】
0004660357.tif 000011
【図１１】
0004660357.tif 000012
【図１２】
0004660357.tif 000013
【図１３】
0004660357.tif 000014
【図１４】
0004660357.tif 000015
【図１５】
0004660357.tif 000016