0

そして、ここで別の質問があります。

前のものの後、私はついにkDopシステムと関連するすべてを完成させました。(kDopの階層ツリーなど。)すべてが正常に機能します。

ここで、デバッグ目的で衝突を画面に描画し、作業の結果を確認したいと思います。(特定のモードで行った階層的な選択が適切かどうかを確認するには)

AABB / Sphereの場合、問題はありません。作成は非常に簡単です。問題はkDOPにあります...

私は持っています :


(1,0,0)(0,1,0)(0,0,1)(1,1,1)(-1,1,1)(1、-1,1)(1,1 -1)(1,1,0)(1,0,1)、(0,1,1)、(1、-1,0)、(1,0、-1)、(0,1、- 1)
および軸を使用して計算された最小/最大値。

これらのデータを使用して一連のポリゴン(実際には単純なメッシュ)を作成するにはどうすればよいですか?(私は実装を気にしません、私はそれを実装できるように理論​​的に理解したいだけです)

答えてくれてありがとう!!!

編集:私はすでに軸を持っているので、メッシュの法線を簡単に計算できます。問題は頂点位置の計算です...

編集2:私はネット上で有用と思われるこのコードを見つけました(または少なくともデバッグメッシュを作成するためにそれが言っているドキュメントでは)が、頂点の位置を見つけるためにそれを使用する方法がわかりません:

    real Kdop::getDistanceOfPlaneToOrigin(int k) const {
        if (k < 0 || k >= mK) {
            return 0.0f;
        }
        if (k >= mK/2) {
            return (real) (mDistances[k] * -1.0);
        }
        return mDistances[k];
    }

編集3:法線と点(原点、平面が通過すると確信している)があると思ったので、操作に関連するすべての平面を作成できます...今はもっと何かが必要です...。

4

2 に答える 2

1

一般に、各頂点は3つの平面の交点です。さらに、描画する各頂点は、残りのすべての平面の正しい側にある必要があります。これは問題の厄介な組み合わせの説明かもしれませんが、kDopでは、少なくとも固定サイズの問題です...

それについてもう少し賢くするために、あなたはいくつかの線形計画法の数学を見る必要があります。具体的には、有効な頂点(つまり、残りの平面の正しい側にある3つの平面の交差)ができたら、各エッジに沿って次の有効な頂点にスライドできます。この方法で、有効な頂点とエッジのグラフ全体を再帰的に探索できます。グラフの幅優先探索を実行し、探索した頂点を追跡します。可能性を使い果たしたら(有限、覚えておいてください)。描きたいものがあります。

ああ、そして平面に基づいて実際の頂点を計算するには、このmathworldページをチェックしてください。

[編集:]-実際、冗長な平面がないことが確実にわかっている場合(つまり、完全にkDopの外にある平面がない場合)、検索を大幅に簡略化できる可能性があります。その場合、kDopは標準構造であり、各ポリゴンの隣接ポリゴンの構成は固定されています。その場合は、平面を接続し、固定された頂点のセットを計算して、それらを使用して標準の図形を描画するだけです。手作業ですべての詳細を簡単に(多少面倒な場合でも)解決できます。

ただし、縮退したケースに注意することをお勧めします。たとえば、方向付けられた立方体をkDopに配置して、ファセットのほとんどがゼロサイズになるようにする場合です。

[edit2:]-さらに検討すると、構成が完全に修正されていない可能性があると思います。たとえば、近くに4つの飛行機があるとします。そして、それらの深さに基づいて、それらの間のエッジは、次のように、何らかの方向に進む可能性があります。

plane A     |    plane B
            |
           / \
          /   \
         /     \
________/       \
        |        \
        |         \
plane C | plane D  \

        vs.

plane A |    plane B
        |
        |
________|
         \
          \
          |\
          | \
          |  \
          |   \
          |    \
          |     \
          |      \
          |       \
          |        \
plane C   | plane D \

ただし、セットアップをいくらか簡略化できると思います。頂点が有効かどうかを確認する必要がありますが、特定の平面構成を考慮することで、確認する頂点の数と平面の数の両方を減らすことができます。

于 2010-02-01T19:07:32.523 に答える
0

マーチングキューブアルゴリズムを見ましたか?(http://en.wikipedia.org/wiki/Marching_cubes

そのまま使えるかどうかはわかりませんが、インスピレーションを得ることができるかもしれません。

于 2010-01-31T20:56:19.600 に答える