LUXOPHIA / Collisioner

任意のポリゴンモデル同士の衝突判定をオクトツリーで高速化する方法。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Collisioner

任意のポリゴンモデル同士の衝突判定を、八分木(Octree)による空間分割によって高速化する方法。

[YouTube] [Vimeo]

ゲームレベルで要求されるローポリゴンモデル同士の衝突判定であれば、一般的に GJK:Gilbert-Johnson-Keerthi distance algorithm を用いることで実装可能である。


* A fast procedure for computing the distance between complex objects in three-dimensional spaceComputer Graphics at Stanford University

しかし、原理的にメッシュ上を渡り歩くことで衝突位置を検索するので、CADレベルで要求される大規模なポリゴンモデルに対しては非常に効率が悪い。

[SlidePlayer]

* Ericson:the GJK algorithm - Real-Time Collision Detectionrealtimecollisiondetection.net

特に ミンコフスキー差(Minkowski Difference)を利用しているため、凸多面体であることが前提であり、任意の形状を汎用的に扱うためには、予め凹多面体を凸多面体へ分割する前処理が必要となる。


* A simple and efficient approach for 3D mesh approximate convex decompositionResearchGate

そこで、実装上の煩雑さを避けつつ、任意の大規模モデルを扱うために、ポリゴンモデルを一旦ボクセル化し、ボクセル同士の衝突判定問題へ還元する。もちろんポリゴン同士の接触を厳密に計算していないので、判定精度はボクセルの空間解像度に依存してしまうが、八分木(Octree)による階層的な空間分割によって検索を効率化できるので、大規模モデルに対しても効率が良い。


* 八分木Wikipedia

なおボクセルは最初、軸平行立方体として生成されるが、各オブジェクトのローカル座標系に基づいているので、オブジェクトと共に回転やスケーリングの影響を受ける。つまりボクセル同士の衝突判定も、任意の姿勢とサイズの直方体として扱う必要がある。


Delphi Starter

About

任意のポリゴンモデル同士の衝突判定をオクトツリーで高速化する方法。


Languages

Language:C 39.9%Language:Pascal 38.3%Language:PostScript 10.6%Language:Python 5.3%Language:Hack 1.9%Language:GLSL 1.8%Language:PHP 1.1%Language:HTML 1.0%Language:Makefile 0.1%Language:Shell 0.0%