3

初めての 3D ゲームを作成していますが、いくつかの問題に遭遇しました。

AABBの交差とそこからツリーを構築するというアイデアについて読みましたが、理解できなかったのは、ゲーム中に「キャラクター」が回転すると、軸に沿ったという概念が保持されないということです!

いくつかのライブラリ (oz-collide、OPCODE など) をチェックしましたが、実装が静的オブジェクト用に作成されていることがわかりました。ツリー内の各移動後に更新する必要があります)。

これらのライブラリは超高速であるはずでしたが、おそらくどこかで間違っていました。

説明は何ですか?

4

2 に答える 2

2

悲しいことに、キャラクターがローテーションする場合は、AABB を再計算する必要があり、必ずしもぴったりと合うとは限りません。長方形があり、それを回転させて長方形でなくなると、AABB はオブジェクトよりも大きくなります。

交差テストは非常に単純であるため、AABB は高速ですが、AABB の軸に整列していないオブジェクトで正確な交差が必要な場合に問題が発生することが既にわかっています。

AABB は今でも簡単なテストに役立ちますが、これらのツリーはそのために作成されたのではないかと思います。AABB ツリーを使用すると、より正確なテスト フェーズから大量のオブジェクトをすばやく除外できます。クエリがいくつかの余分なオブジェクトを返す場合、それは大した問題ではありません。回転したキャラクターの場合、これは、キャラクターが実際には地域にいないのに、地域にいると見なされることを意味する場合があります。

AABB ツリーは、テストに合格するたびにツリーをより深く、より詳細に調べるため、これに簡単に役立ちます。

非常に正確な交差が必要な場合は、Oriented Bounding Box (OBB) を使用できます。これは、分離軸定理で実装できます。oz-collide は既に OBB をサポートしているようです。

OBB に関するリソースはたくさんありますが、これが役に立ちました: 分離軸定理に関する GPWiki

これが実装です。

必要に応じて、OBB から AABB を計算できます。

于 2010-11-05T00:36:31.313 に答える
1

OZCollide は可動エンティティに対して機能し、時間に依存しません (速度ベクトルを指定するだけです)。(AABBだけでなく)OBBでも機能します。

オンライン ドキュメントを確認してください: http://www.tsarevitch.org/ozcollide/docs/ リンク切れ

于 2011-02-01T23:07:34.067 に答える