OBBTree

Collision Detectionに挑戦中です。「REAL-TIME COLLISION DETECTION」という本を読みながら進めているのですが、英語も数学も苦手なためいっこうに進む気配がありません。いろいろとめんどうなところはとばしながら、AABB、Sphere、OBBと作ってようやく感覚がつかめてきました。

Real-Time Collision Detection (The Morgan Kaufmann Series In Inteacive 3-D Technolagy)

Real-Time Collision Detection (The Morgan Kaufmann Series In Inteacive 3-D Technolagy)

k-DOPsやPrimitive Testsなんかは飛ばして、第6章の"Bounding Volume Hierarchies"に入りました。略してBVHです。木などを作ってより正確で速いテストを行おうためのものですね。少し読んでみたら眩暈がしてきたので、まずは実装をしてみようとページをめくったのですが……コードがない! いや、全体的なコードは載っているのですが、丸写しすればOK的なコードがないのです。しかたないので、どこかにしらソースコードがあるだろうと思って検索してみたところ、ウマイハナシ OBBで衝突判定な話・前編というところを見つけました。ソースコードだけでなく、親切にも解説付きです。いやぁ、こういう方がいてくれるから僕なんかも趣味でプログラミングができるわけです。本当に感謝感謝。
そんなわけで、さっそく作ってみました。下の図がその結果です。左のものはまあまあいい結果だと思うのですが、右のものだとちょっと無駄にOBBが大きすぎる感じがします。OBBを分割する時に、分割する平面にぶつかってしまうポリゴンをそのままにしているためこういった結果になっているようです。ぶつかったポリゴンを分割するようにすればもっと綺麗にできるらしいのですが、ちょっとそこまではなぁというのが正直なところです。まあ、何か問題があれば対処するという方向で行きたいと思います。