(57)【要約】【課題】四面体どうしの接触点を高速に算出すること【解決手段】画像処理装置は、仮想空間における第１の四面体および第２の四面体の位置を取得し、第１の四面体から第２の四面体への向きに延伸する分離軸を取得し、前記第１の四面体の頂点と前記第２の四面体の頂点とを前記分離軸に投影し、前記投影される第１の四面体の頂点と第２の四面体の頂点とが前記分離軸に並ぶ順序に基づいて、接触点の算出手法を選択し、前記選択された算出手法により前記第１の四面体と前記第２の四面体との間の１または複数の接触点を算出し、前記算出された接触点に基づいて画像を描画する。【選択図】図７
2019086876.tif 000002
【特許請求の範囲】
【請求項１】
仮想空間における第１の四面体および第２の四面体の位置を取得する位置取得手段と、
第１の四面体から第２の四面体への向きに延伸する分離軸を取得する分離軸取得手段と、
前記第１の四面体の頂点と前記第２の四面体の頂点とを前記分離軸に投影し、前記投影される第１の四面体の頂点と第２の四面体の頂点とが前記分離軸に並ぶ順序に基づいて、接触点の算出手法を選択する手法選択手段と、
前記選択された算出手法により前記第１の四面体と前記第２の四面体との間の１または複数の接触点を算出する接触点算出手段と、
前記算出された接触点に基づいて画像を描画する画像描画手段と、
を含む画像処理装置。
【請求項２】
請求項１に記載の画像処理装置において、
前記複数の算出手法により、算出される接触点の数が異なる、
画像処理装置。
【請求項３】
請求項１または２に記載の画像処理装置において、
前記複数の算出手法のうち１つでは、前記第１の四面体および前記第２の四面体のうち一方に含まれる頂点と他方に含まれる面との衝突について１つの接触点が算出される、
画像処理装置。
【請求項４】
請求項１または２に記載の画像処理装置において、
前記複数の算出手法のうち１つでは、前記第１の四面体および前記第２の四面体のうち一方に含まれる辺と他方に含まれる面との衝突について２つの接触点が算出される、
画像処理装置。
【請求項５】
請求項１から４のいずれかに記載の画像処理装置において、
前記分離軸取得手段は、前記第１の四面体および前記第２の四面体の形状から幾何的に求められる複数の候補から分離軸を選択する、
画像処理装置。
【請求項６】
請求項５に記載の画像処理装置において、
前記複数の候補は、前記第１の四面体および前記第２の四面体を構成する面の法線の向きの軸を含む、
画像処理装置。
【請求項７】
請求項５または６に記載の画像処理装置において、
前記複数の候補は、前記第１の四面体の辺と第２の四面体の辺とに垂直な向きの軸を含む、
画像処理装置。
【請求項８】
請求項１から７のいずれかに記載の画像処理装置において、
前記第１の四面体は、第１の物体の一部を構成し、
前記第２の四面体は、第２の物体の一部を構成し、
前記算出された接触点に基づいて、前記第１の物体および前記第２の物体の動きを算出する動き算出手段をさらに含み、
前記画像描画手段は、前記第１の物体および前記第２の物体の算出された動きに基づいて、前記第１の物体および前記第２の物体の画像を描画する、
画像処理装置。
【請求項９】
仮想空間における第１の四面体および第２の四面体の位置を取得するステップと、
第１の四面体から第２の四面体への向きに延伸する分離軸を取得するステップと、
前記第１の四面体の頂点と前記第２の四面体の頂点とを前記分離軸に投影し、前記投影される第１の四面体の頂点と第２の四面体の頂点とが前記分離軸に並ぶ順序に基づいて、接触点の算出手法を選択するステップと、
前記選択された算出手法により前記第１の四面体と前記第２の四面体との間の１または複数の接触点を算出するステップと、
前記算出された接触点に基づいて画像を描画するステップと、
を含む画像処理方法。
【請求項１０】
仮想空間における第１の四面体および第２の四面体の位置を取得する位置取得手段、
第１の四面体から第２の四面体への向きに延伸する分離軸を取得する分離軸取得手段、
前記第１の四面体の頂点と前記第２の四面体の頂点とを前記分離軸に投影し、前記投影される第１の四面体の頂点と第２の四面体の頂点とが前記分離軸に並ぶ順序に基づいて、接触点の算出手法を選択する手法選択手段、
前記選択された算出手法により前記第１の四面体と前記第２の四面体との間の１または複数の接触点を算出する接触点算出手段、および、
前記算出された接触点に基づいて画像を描画する画像描画手段、
としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置、画像処理方法およびプログラムに関する。
【背景技術】
【０００２】
例えばゲームなどで、物理シミュレーションに基づく３次元画像を表示することが一般化している。物理シミュレーションの一部として、多面体どうしの衝突判定の処理が行われる。
【０００３】
非特許文献１には、２つの四面体どうしの衝突を高速に判定する手法が開示されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Fabio Ganovelli , Federico Ponchio and Claudio Rocchini, “Fast Tetrahedron-Tetrahedron Overlap Algorithm”, Journal of Graphics Tools Volume 7, 2002
【発明の概要】
【発明が解決しようとする課題】
【０００５】
衝突後の物体の挙動をシミュレーションするために、衝突の有無の判定だけでなく接触点を求めることが必要である。一方、任意の多面体どうしの衝突における接触点の算出は、計算が非常に複雑になる。そこで、発明者は多面体の少なくとも表面に近い領域を四面体に分割し、四面体どうしの衝突を判定することを検討している。
【０００６】
四面体どうしの接触点の算出では、一般的に、２つの四面体の衝突をそれらの四面体を構成する面と面との衝突に分解し、その分解された衝突について接触点を算出することが考えられる。しかし、この方法では、接触点を算出する処理の計算量が多くなり、高速化に限界があった。
【０００７】
本発明は上記課題を鑑みてなされたものであって、その目的は、四面体どうしの接触点を高速に算出する技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明にかかる画像処理装置は、仮想空間における第１の四面体および第２の四面体の位置を取得する位置取得手段と、第１の四面体から第２の四面体への向きに延伸する分離軸を取得する分離軸取得手段と、前記第１の四面体の頂点と前記第２の四面体の頂点とを前記分離軸に投影し、前記投影される第１の四面体の頂点と第２の四面体の頂点とが前記分離軸に並ぶ順序に基づいて、接触点の算出手法を選択する手法選択手段と、前記選択された算出手法により前記第１の四面体と前記第２の四面体との間の１または複数の接触点を算出する接触点算出手段と、前記算出された接触点に基づいて画像を描画する画像描画手段と、を含む。
【０００９】
また、本発明にかかる画像処理方法は、仮想空間における第１の四面体および第２の四面体の位置を取得するステップと、第１の四面体から第２の四面体への向きに延伸する分離軸を取得するステップと、前記第１の四面体の頂点と前記第２の四面体の頂点とを前記分離軸に投影し、前記投影される第１の四面体の頂点と第２の四面体の頂点とが前記分離軸に並ぶ順序に基づいて、接触点の算出手法を選択するステップと、前記選択された算出手法により前記第１の四面体と前記第２の四面体との間の１または複数の接触点を算出するステップと、前記算出された接触点に基づいて画像を描画するステップと、を含む。
【００１０】
また、本発明にかかるプログラムは、仮想空間における第１の四面体および第２の四面体の位置を取得する位置取得手段、第１の四面体から第２の四面体への向きに延伸する分離軸を取得する分離軸取得手段、前記第１の四面体の頂点と前記第２の四面体の頂点とを前記分離軸に投影し、前記投影される第１の四面体の頂点と第２の四面体の頂点とが前記分離軸に並ぶ順序に基づいて、接触点の算出手法を選択する手法選択手段、前記選択された算出手法により前記第１の四面体と前記第２の四面体との間の１または複数の接触点を算出する接触点算出手段、および、前記算出された接触点に基づいて画像を描画する画像描画手段、としてコンピュータを機能させる。
【００１１】
本発明によれば、四面体どうしの接触点を高速に算出することができる。
【００１２】
本発明の一形態では、前記複数の算出手法により、算出される接触点の数が異なってもよい。
【００１３】
本発明の一形態では、前記複数の算出手法のうち１つでは、前記第１の四面体および前記第２の四面体のうち一方に含まれる頂点と他方に含まれる面との衝突について１つの接触点が算出されてもよい。
【００１４】
本発明の一形態では、前記複数の算出手法のうち１つでは、前記第１の四面体および前記第２の四面体のうち一方に含まれる辺と他方に含まれる面との衝突について２つの接触点が算出されてもよい。
【００１５】
本発明の一形態では、前記分離軸取得手段は、前記第１の四面体および前記第２の四面体の形状から幾何的に求められる複数の候補から分離軸を選択してもよい。
【００１６】
本発明の一形態では、前記複数の候補は、前記第１の四面体および前記第２の四面体を構成する面の法線の向きの軸を含んでもよい。
【００１７】
本発明の一形態では、前記複数の候補は、前記第１の四面体の辺と第２の四面体の辺とに垂直な向きの軸を含んでもよい。
【００１８】
本発明の一形態では、前記第１の四面体は、第１の物体の一部を構成し、前記第２の四面体は、第２の物体の一部を構成し、前記画像処理装置は、前記算出された接触点に基づいて、前記第１の物体および前記第２の物体の動きを算出する動き算出手段をさらに含み、前記画像描画手段は、前記第１の物体および前記第２の物体の算出された動きに基づいて、前記第１の物体および前記第２の物体の画像を描画してもよい。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態にかかる画像処理装置のハードウェア構成の一例を示す図である。
【図２】画像処理装置が実現する機能を示すブロック図である。
【図３】画像処理装置が実行する処理を概略的に示すフロー図である。
【図４】衝突判定の対象となるオブジェクトの一例を示す図である。
【図５】互いに衝突するオブジェクトの一例を示す図である。
【図６】接触判定用の四面体を示す図である。
【図７】四面体の衝突を判定する処理を示すフロー図である。
【図８】２つの四面体の頂点と分離軸との関係および分離軸上の頂点の並びを示すビットパターンを示す図である。
【図９Ａ】衝突の種類を示す図である。
【図９Ｂ】衝突の種類を示す図である。
【図９Ｃ】衝突の種類を示す図である。
【図９Ｄ】衝突の種類を示す図である。
【図１０】ビットパターンの他の一例を示す図である。
【図１１】ビットパターンと衝突の種類との対応を示す図である。
【図１２】接触点の算出手法の例を説明する図である。
【発明を実施するための形態】
【００２０】
以下では、本発明の実施形態について図面に基づいて説明する。出現する構成要素のうち同一機能を有するものには同じ符号を付し、その説明を省略する。
【００２１】
図１は、本発明の実施形態にかかる画像処理装置１のハードウェア構成の一例を示す図である。画像処理装置１は、パーソナルコンピュータや家庭用ゲーム機、またはモバイル端末である。画像処理装置１は、プロセッサ１１、記憶部１２、通信部１３、入力部１４、表示制御部１５を含む。
【００２２】
本実施形態にかかる画像処理装置１は、仮想空間内において、多面体からなる物体（オブジェクト）どうしの衝突の有無を判定し、衝突がある場合に接触点を算出する。また、画像処理装置１は、算出された接触点において、衝突にかかる拘束を解決し、物体の動きを決定する。決定された動きに基づいて、物体の画像が描画される。
【００２３】
プロセッサ１１は、記憶部１２に格納されているプログラムに従って動作し、通信部１３や入力部１４、表示制御部１５等を制御する。プロセッサ１１は、いわゆるＣＰＵ（Central Processing Unit）だけでなく、ＧＰＵ（Graphic Processing Unit）も含む。なお、上記プログラムは、フラッシュメモリ等のコンピュータで読み取り可能な記憶媒体に格納されて提供されるものであってもよいし、インターネット等のネットワークを介して提供されるものであってもよい。
【００２４】
記憶部１２は、ＤＲＡＭやフラッシュメモリ等のメモリ素子によって構成されている。記憶部１２は、上記プログラムを格納する。また、記憶部１２は、プロセッサ１１や通信部１３等から入力される情報や演算結果を格納する。なお、記憶部１２は、さらにハードディスクといった記憶装置によっても構成されてよい。
【００２５】
通信部１３は有線ＬＡＮや無線ＬＡＮを構成する集積回路やコネクタ、アンテナなどにより構成されている。通信部１３は、ネットワークを介して他の装置と通信する機能を有する。通信部１３は、プロセッサ１１の制御に基づいて、他の装置から受信した情報をプロセッサ１１や記憶部１２に入力し、他の装置に情報を送信する。
【００２６】
入力部１４は、ユーザの操作を検出するハードウェアからの入力を取得する回路である。入力部１４は、キーボードやコントローラ等の入力デバイスから入力信号を取得し、その入力信号が変換された情報をプロセッサ１１や記憶部１２に入力する。
【００２７】
表示制御部１５はディスプレイ装置やヘッドマウントディスプレイ等の表示出力デバイスを制御する回路を含んでいる。表示制御部１５は、プロセッサ１１の制御に基づいて、表示出力デバイスに画像を表示させる。
【００２８】
次に画像処理装置１が実現する機能および処理を説明する。図２は、画像処理装置１が実現する機能を示すブロック図である。画像処理装置１は機能的に、物体位置決定部５１、衝突判定部５２、移動計算部５８、画像描画部５９を含む。衝突判定部５２は、機能的に、物体ペア探索部５３、四面体決定部５４、分離軸取得部５５、算出手法選択部５６、接触点算出部５７を含む。
【００２９】
物体位置決定部５１は、主に、プロセッサ１１が記憶部１２に記憶されるプログラムを実行し、入力部１４を介してユーザの操作を取得し、その情報を処理し、処理結果を記憶部１２に格納することにより実現される。衝突判定部５２、移動計算部５８、主に、プロセッサ１１が記憶部１２に記憶されるプログラムを実行し、記憶部１２等に格納された情報を処理し、処理結果を記憶部１２に格納することにより実現される。画像描画部５９は、主に、プロセッサ１１が記憶部１２に記憶されるプログラムを実行し、記憶部１２等に格納された情報を処理し、表示出力デバイスが画像を表示するよう表示制御部１５を制御することにより実現される。
【００３０】
物体位置決定部５１は、入力部１４を介して取得される入力デバイスからの信号を取得し、その取得された信号と、前回のフレームにおける仮想空間内の複数の物体（オブジェクト）の位置および動きに基づいて、今回のフレームにおける仮想空間における複数の物体の位置を算出する。
【００３１】
衝突判定部５２は、仮の位置が算出された複数の物体が衝突するか否かを判定し、互いに衝突する２つの物体の接触点を算出する。
【００３２】
物体ペア探索部５３は、仮想空間内に配置された複数の物体のそれぞれについて算出された仮の位置に基づいて、互いに衝突する可能性がある第１の物体３１と第２の物体３２との組を探索する（図４参照）。探索された物体の組は、四面体決定部５４、分離軸取得部５５、算出手法選択部５６、接触点算出部５７、移動計算部５８の処理対象となる。
【００３３】
四面体決定部５４は、探索された組を構成する第１の物体３１および第２の物体３２のそれぞれについて、後続の処理の対象とする四面体を決定する。ここで、物体のそれぞれは、外形を構成する複数のポリゴンを有するが、さらに接触判定用の複数の四面体を含む。接触判定用の複数の四面体は、少なくとも物体の表面を構成するように設けられており、物体の内部に四面体が設けられない空間が存在してもよい。また物体は剛体であってよい。
【００３４】
より具体的には、四面体決定部５４は、第１の物体３１および第２の物体３２を構成する複数の四面体のうちから、衝突の可能性がある第１の四面体４１と第２の四面体４２とを決定する（図６参照）。ここで、四面体決定部５４は、第１の物体３１を構成する複数の四面体から第１の四面体４１を選択し、第２の物体３２を構成する複数の四面体から第２の四面体４２を選択する。
【００３５】
分離軸取得部５５は、第１の四面体４１および第２の四面体４２が衝突するか否かを判定する。また、分離軸取得部５５は、分離軸Ａｓを取得する。分離軸Ａｓは、衝突判定においてその分離軸Ａｓに第１の四面体４１および第２の四面体４２を投影することにより、第１の四面体４１と第２の四面体４２とが衝突しているかの判定が可能となる方向の軸であり、第１の四面体４１から第２の四面体４２への向きに延伸している。
【００３６】
算出手法選択部５６は、第１の四面体４１の頂点と第２の四面体４２の頂点とを分離軸Ａｓに投影し、第１の四面体４１の投影された頂点と第２の四面体４２の投影された頂点とが分離軸Ａｓに並ぶ順序に基づいて、接触点の算出手法を選択する。ここで、接触点の算出手法により、算出される接触点の数が異なる。中には第１の四面体４１および第２の四面体４２のうち一方について算出される接触点の数が１である算出手法もあり、算出される接触点の数が３以上である算出手法もある。接触点の算出手法の詳細については後述する。
【００３７】
接触点算出部５７は、選択された算出手法により第１の四面体４１と第２の四面体４２との間の１または複数の接触点を算出する。
【００３８】
移動計算部５８は、算出された接触点に基づいて、互いに衝突する物体を含む物体の動きを算出し、今回のフレームにおける物体の位置および姿勢を決定する。移動計算部５８は、互いに衝突する第１の物体３１および第２の物体３２については、算出された接触点のそれぞれに衝突にかかる拘束条件を設定し、その拘束条件を解決することで第１の物体３１および第２の物体３２の動きを算出する。
【００３９】
画像描画部５９は、それぞれの物体について算出された動きに基づいて、それらの物体の画像を描画する。
【００４０】
図３は、画像処理装置１が実行する処理を概略的に示すフロー図である。図３に示す処理は、フレーム（そのフレームの期間が経過する）ごとに繰り返し実行される。以下では処理のフローとともに各機能の処理の詳細について説明する。以下の処理は、ＣＰＵとＧＰＵとが協調して動作することにより実行されてよい。
【００４１】
はじめに、物体位置決定部５１は、入力デバイスからの信号と、前回のフレームにおける仮想空間内の複数の物体の位置、姿勢および動きに基づいて、今回のフレームにおける仮想空間における複数の物体の位置および姿勢を取得する（ステップＳ１０１）。そして、物体ペア探索部５３は、衝突の可能性のある物体の組を探索する（ステップＳ１０２）。
【００４２】
図４は、衝突判定の対象となる物体の一例を示す図である。物体ペア探索部５３は、例えば、仮想空間において、各物体（第１の物体３１、第２の物体３２、第３の物体３３）のそれぞれを内包する判定ボックス３４，３５，３６を生成し、判定ボックス３４，３５，３６が重複するか否かを判定することにより、衝突の可能性のある物体の組を見つける。この判定ボックス３４，３５，３６は、一般的にはＡＡＢＢ（Axis-Aligned Bounding Box）と呼ばれており、判定ボックス３４，３５，３６どうしの重複の有無は簡単な計算で算出される。
【００４３】
次に、四面体決定部５４は、探索により見つかった組に属するオブジェクトを構成する四面体のうち、衝突の可能性がある四面体を選択する（ステップＳ１０３）。例えば、四面体決定部５４は、第１の物体３１および第２の物体３２の判定ボックス３４，３５がさらに細かく分割されたＡＡＢＢをＢＶＨ（Bounding Volume Hierarchy）の木構造として作成し、そのＢＶＨのうち衝突に直接かかわるＡＡＢＢと重なる四面体を選択してもよい。また、四面体決定部５４は、物体ペア探索部５３の処理と、四面体を選択する処理を一連の処理として実行してもよい。
【００４４】
図５は、互いに衝突するオブジェクトの一例を示す図である。図６は、接触判定用の四面体の一例を示す図である。図５，図６は説明の容易のため、物体を２次元で記載しているが、実際は物体および四面体は３次元の形状を有する。第１の物体３１と第２の物体３２とが衝突する場合の衝突法線Ｎｃ、第１の物体３１の表面上に設定される接触点Ｐ１，Ｐ２，Ｐ３、第２の物体３２の表面上に設定される接触点Ｑ１，Ｑ２，Ｑ３、貫通深度Ｄｐは、第１の四面体４１と第２の四面体４２とが衝突する場合も同じものとなる。これにより、後述する移動計算部５８の処理では、第１の四面体４１と第２の四面体４２との間で算出された接触点を、第１の物体３１と第２の物体３２との接触点として扱って第１の物体３１と第２の物体３２との衝突を解決する条件（拘束条件）として設定している。
【００４５】
衝突の可能性のある四面体の組が選択されると、衝突判定部５２は、選択された四面体（第１の四面体４１および第２の四面体４２）の衝突の有無を判定し、これらが衝突する場合は接触点を算出する（ステップＳ１０４）。ステップＳ１０４の処理は、分離軸取得部５５、算出手法選択部５６、接触点算出部５７により行われる。処理の詳細については後述する。
【００４６】
接触点が算出されると、移動計算部５８は、接触点においてその衝突を解決するための拘束条件を解くことにより、接触点における第１の物体３１および第２の物体３２の速度変化を算出する（ステップＳ１０５）。そして、移動計算部５８は、算出された速度変化に応じたオブジェクトの位置および姿勢（向き）を算出する（ステップＳ１０６）。なお、移動計算部５８が行う処理は、いわゆる物理計算であり、衝突しない物体の動き、位置及び姿勢についても、物理法則にしたがって計算される。
【００４７】
オブジェクトの位置及び姿勢が算出されると、画像描画部５９は、算出された位置及び姿勢に基づいて、オブジェクトの画像を描画する（ステップＳ１０７）。
【００４８】
次にステップＳ１０４における、四面体の衝突有無の判定および接触点の算出の処理について説明する。図７は、四面体の衝突を判定する処理を示すフロー図である。
【００４９】
はじめに、分離軸取得部５５は、ステップＳ１０３において衝突の可能性のある四面体の組から、実際に互いに接触する四面体の組をみつける（ステップＳ２０１）。四面体はいわゆる凸包であるので、分離軸取得部５５は、例えば、ミンコフスキー差を用いた凸包の内外判定アルゴリズムを用いることにより、組に属する四面体が互いに衝突するかを判定する。四面体の衝突を判定する処理は公知であるので詳細の説明は省略する。
【００５０】
次に、分離軸取得部５５は、候補となる軸から、互いに接触する四面体の組の分離軸Ａｓを選択する（ステップＳ２０２）。分離軸Ａｓの候補となる軸は、第１の四面体４１および第２の四面体４２の形状から幾何的に求められる軸である。例えば、候補の軸は、第１の四面体４１および第２の四面体４２を構成する面の法線の向きの軸を含み、また、第１の四面体４１を構成する辺と第２の四面体４２を構成する辺とに垂直な向きの軸を含む。第１の四面体４１を構成する辺と第２の四面体４２を構成する辺とに垂直な向きの軸は、第１の四面体４１を構成する辺と第２の四面体４２を構成する辺との外積により求められる。
【００５１】
より具体的には、分離軸取得部５５は、これらの候補の軸のうち、その軸にそった第１の四面体４１と第２の四面体４２との重複の長さが最も小さくなる軸を分離軸Ａｓとして選択する。言い換えると、分離軸取得部５５は、最も少ない移動により衝突が解消する軸を分離軸Ａｓとして選択する。図５の例では、分離軸Ａｓは衝突法線Ｎｃであり、その移動量は貫通深度Ｄｐである。
【００５２】
なお、分離軸取得部５５は、他の方法で分離軸Ａｓを取得してもよい。その場合、分離軸取得部５５はこの段階で接触の有無を判定しなくてもよい。
【００５３】
次に、算出手法選択部５６は、組に属する第１の四面体４１の頂点と、第２の四面体４２の頂点とを分離軸Ａｓに投影し（ステップＳ２０３）、投影された第１の四面体４１の頂点と第２の四面体４２の頂点とが分離軸Ａｓに並ぶ順序を取得する（ステップＳ２０４）。
【００５４】
図８は、２つの四面体の頂点と分離軸Ａｓとの関係および分離軸Ａｓ上の頂点の並びを示すビットパターンを示す図である。図８の例では、第１の四面体４１の頂点が分離軸Ａｓ上に点Ａ１〜Ａ４として投影されており、第２の四面体４２の頂点が分離軸Ａｓ上に点Ｂ１〜Ｂ４として投影されている。図８は、第２の四面体４２の左側の面の法線を分離軸Ａｓとする場合の例であるため、点Ｂ１〜Ｂ３は同じ位置に投影される。
【００５５】
より具体的には、算出手法選択部５６は、分離軸Ａｓ上に配置される頂点に対応する符号が並び、その頂点が分離軸Ａｓ上に並ぶ順序を示すパターンを作成する。以下の処理では頂点が第１の四面体４１に属するか、第２の四面体４２に属するかのみが問題となるため、この符号のパターンでは、符号そのものは、その符号に対応する頂点が第１の四面体４１に属するか第２の四面体４２に属するかを示し、符号の順序は、その符号に対応する頂点が分離軸Ａｓ上に配置される順序に対応する。ここで、算出手法選択部５６は、符号として、投影され第１の四面体４１に属する頂点を１、投影され第２の四面体４２に属する頂点を０としてパターンを作成するので、以下ではこの符号のパターンをビットパターンと記載する。図８の例では、２進数で「１１１０００１０」というビットパターンが生成される。なお、投影され第１の四面体４１に属する頂点を０、投影され第２の四面体４２に属する頂点を１としてパターンを作成してもよい。
【００５６】
そして、算出手法選択部５６は、投影された頂点が分離軸Ａｓに並ぶ順序に基づいて、接触点の算出手法を選択する（ステップＳ２０５）。より具体的には、算出手法選択部５６は、符号のパターンに基づいて衝突の種類を判定し、判定された衝突の種類に応じて接触点の算出手法を選択する。
【００５７】
図９Ａから図９Ｄは、衝突の種類を示す図である。本実施形態において分類される衝突の種類は、衝突種別ＶＦ、衝突種別ＥＥ、衝突種別ＥＦ、衝突種別ＦＦ、衝突種別ＶＶ、総突種別ＶＥである。衝突種別ＶＦは図９Ａに示され、ある四面体の頂点（Vertex）と他の四面体の面（Face）とが衝突する場合である。衝突種別ＥＥは、図９Ｂに示され、ある四面体の辺（Edge）と他の四面体の辺とが衝突する場合である。衝突種別ＥＦは図９Ｃに示され、ある四面体の辺と他の四面体の面とが衝突する場合である。衝突種別ＦＦは図９Ｄに示され、ある四面体の面と他の四面体の面とが衝突する場合である。衝突種別ＶＶは、図示しないが、ある四面体の頂点と他の四面体の頂点とが衝突する場合である。衝突種別ＶＥは、図示しないが、ある四面体の頂点と他の四面体の辺とが衝突する場合である。
【００５８】
接触点の算出手法および算出される接触点の数は、衝突の種類によって異なる。衝突種別ＶＦ、衝突種別ＶＶ、総突種別ＶＥに応じて選択される算出手法で算出される接触点の数は１であり、衝突種別ＥＥに応じて選択される算出手法で算出される接触点の数は１であり、衝突種別ＥＦに応じて選択される算出手法で算出される接触点の数は２であり、衝突種別ＦＦに応じて選択される算出手法で算出される接触点の数は３から６である。
【００５９】
衝突の種類とビットパターンとの関係についてさらに説明する。図１０は、ビットパターンの他の一例を示す図である。図１０の（ａ）の例では、ビットパターンの内側に、１つのビット「１」と連続する２つのビット「０」が存在する。これは、第１の四面体４１の１つの頂点と、第２の四面体４２の２つの頂点のグループとが交差していることを示している。このことから、算出手法選択部５６は、（ａ）の例を衝突種別ＶＥと判定する。一方、図１０の（ｂ）の例では、ビットパターンの内側をみても双方の頂点が繰り返し登場しており関係が分かりにくい。しかし、（ｂ）の例でのビットパターンのもっとも外側に、ビット「１」と２つのビット「０」とが存在する。これは、外側には第１の四面体４１の頂点と、第２の四面体４２の辺とが存在すると考えてよい。反対に内側には第１の四面体４１の面と第２の四面体４２の辺とが存在すると考えてよい。このことから、算出手法選択部５６は、（ｂ）の例を衝突種別ＥＦと判定する。
【００６０】
実際の処理では、あらかじめビットパターンと衝突の種類との対応を示すテーブルが作成されており、算出手法選択部５６はテーブルを用いてビットパターンに対応する衝突の種類を判定し算出手法を選択する。
【００６１】
図１１は、ビットパターンと衝突の種類との対応を示す図である。図１１の左側にはビットパターンが記載されており、右側には衝突の種類が記載されている。ビットパターン「１１１１００００」は衝突が発生しない特別なパターンである。図７のフローにしたがって処理がされる場合にはこのビットパターンが生成されることはない。図１１の右側に記載される衝突の種類の記載における、「Ａ  ｖｓ  Ｂ」のＡの記載は第１の四面体４１の衝突する部分を示し、Ｂの記載は第２の四面体４２の衝突する部分を示す。例えば、「Vertex vs Edge」「Edge vs Vertex」は衝突種別ＶＥであり、「Vertex vs Vertex」は衝突種別ＶＶである。
【００６２】
接触点の算出手法が選択されると、接触点算出部５７は選択された算出手法により接触点を算出する（ステップＳ２０６）。例えば衝突種別ＶＦについては、頂点が衝突する四面体の頂点と、衝突法線Ｎｃとから公知の手法で接触点を算出することができる。衝突種別ＥＥについても、同様に公知の手法を用いて接触点を算出することができる。
【００６３】
以下では、衝突種別ＦＦの場合の接触点の算出手法について説明する。図１２は、接触点の算出手法の例を説明する図である。衝突手法ＦＦでは、（ａ）示されるように四面体の面と面とが衝突している。接触点算出部５７は、衝突にかかる第１の四面体４１の面と第２の四面体４２の面とのそれぞれを、分離軸Ａｓに垂直な面（分離平面）に投影する（Ｐ１）。接触点算出部５７は分離平面上で投影された面の辺が交差する点（交差点）を重心座標の形式で求める（ｂ）。そして、接触点算出部５７は求められた交差点を３次元の面に再投影し（Ｐ２）、再投影された点を接触点として算出する。
【００６４】
他の衝突の種類においても、上記手法と類似の手法、または公知の手法により接触点を算出することができる。
【００６５】
このように、衝突の種類を分類し、分類された衝突の種類に応じた接触点の算出手法を適用することで、全体でみて算出する接触点の数および接触点の算出における計算量を削減することができる。また、求められる接触点の数が削減されることで、物体の衝突にかかる拘束を解決する際の計算量も削減することができる。なお、一般的な多面体における衝突の有無の判定および接触点の算出に比べると処理の分岐が少ないので、仮に多面体に比べて計算量そのものが多くても、ＧＰＵのような並列計算が得意なプロセッサにより非常に高速に計算することができる。
【符号の説明】
【００６６】
１  画像処理装置、１１  プロセッサ、１２  記憶部、１３  通信部、１４  入力部、１５  表示制御部、３１  第１の物体、３２  第２の物体、３３  第３の物体、３４，３５，３６  判定ボックス、４１  第１の四面体、４２  第２の四面体、５１  物体位置決定部、５２  衝突判定部、５３  物体ペア探索部、５４  四面体決定部、５５  分離軸取得部、５６  算出手法選択部、５７  接触点算出部、５８  移動計算部、５９  画像描画部、Ａｓ  分離軸、Ｄｐ  貫通深度、Ｎｃ  衝突法線。
【図１】
2019086876.tif 000003
【図２】
2019086876.tif 000004
【図３】
2019086876.tif 000005
【図４】
2019086876.tif 000006
【図５】
2019086876.tif 000007
【図６】
2019086876.tif 000008
【図７】
2019086876.tif 000009
【図８】
2019086876.tif 000010
【図９Ａ】
2019086876.tif 000011
【図９Ｂ】
2019086876.tif 000012
【図９Ｃ】
2019086876.tif 000013
【図９Ｄ】
2019086876.tif 000014
【図１０】
2019086876.tif 000015
【図１１】
2019086876.tif 000016
【図１２】
2019086876.tif 000017