2016-05-24 10 views
4

私は自分自身のRaycastingライブラリーを実装して、それがどのように動作するかを学習しています。出発点として、回転する箱があり、光線を使用して、それが直面するさまざまな障害を検出します。言及する価値がある:私はラインAABB交差法を使用してこれを働かせている。回転したボックスコライダーオブジェクトを持つ線分交差

Rotated Object collision

:それはどのように動作するか、次の画像ショー:私は上記の壁の一つを回転させ、光線の衝突をチェックするために、同じ方法を使用しようとすると

Line Intersection with AABB

私の問題が来ます

私はそれを修正するために、Axis TheoremやCohen-Sutherlandのような別のアルゴリズムを使って解決する可能性のある解決法を探していましたが、AABB交差点に似ていますがOBBを使用するものは見つかりませんでした。オブジェクトが回転しているときにオブジェクトの境界に衝突する2番目の画像で問題を丸める方法私はUnityとC#を使用しています。

答えて

0

回転したオブジェクトのAABBに似たアルゴリズムはありません。回転した壁を確認する前に座標系(世界全体)を回転させて、壁を軸に合わせるようにしてから、結果を再び元の座標系に戻すことができますが、私の意見ではあなたの壁をラインに分解し、ラインラインの交差テストを行うよりも厄介に終わります。

分割軸の定理のようなものを修正することもできます - 光線は凸包ではないため、アルゴリズムを直接使用することはできませんが、同様の原理を使用できます:壁の点を垂直それであなたは、あなたの光線との壁の端の距離を計算することができ、それで壁が光線と重なっているかどうかにかかわらず、計算できます。この情報を使用すると、スクリーンショットにある「影」を計算することもできるはずです。ラインラインの交差点よりも簡単かどうかは、あなた自身で見なければなりません!

関連する問題