1

変換とバウンディング ボックスを保持するノードを含むシーン グラフと、viewProjection マトリックスから各フレームを構築するビュー フラスタムがあります。ただし、ボックスには、ボックスのローカル空間に 4 つの頂点の座標があります。視錐台と同じ空間にそれらを取得するために、それらを変換して、視錐台との交差を確認できますか?それらをワールド空間に持ち込もうとしましたが、50 個のワールド マトリックスがあるので、それは奇妙でした(私はインスタンス化され、各インスタンスには独自のワールド/トランスフォーム マトリックスがあります)

4

1 に答える 1

0

通常、BBと錐台を単語空間で衝突させたいと思います。生のアルゴ:

mtxViewProjTranspose = MtxTranspose(mtxView * mtxProj);
frustumViewWorld = frustumView * mtxViewProjTranspose;
foreach(i)
{
    bbWorld[i] = bb[i] * mtxWorld;
    bCull[i] = collide(BBWorld[i], frustumViewWorld );
}

また、ビュースペースでそれを行うことができます(しかし、それはあまり良くありません):

mtxProjTranspose = MtxTranspose(mtxProj);
frustumViewViewSpace = frustumView * mtxProjTranspose;
    foreach(i)
    {
        bbView[i] = bb[i] * mtxWorld[i] * mtxView;  // More calculations here
        bCull[i] = collide(bbView[i], frustumViewViewSpace );
    }

バウンディングボックス(4つの頂点)をワールドスペースに変換するのがおかしいと思う場合は、メッシュ自体に何千もの頂点がある場合に、それを行うのがいかに奇妙かを考えてください。=)私が理解しているように、衝突検出は、この単純な乗算よりもはるかに高価です。だが:

  • 衝突のリストを短くするには、錐台をワールドスペースに変換し、錐台と衝突する価値のあるノードとそうでないノードを大まかに確認します。したがって、BBを翻訳する必要もありません。これは、シーンの実装によって異なります。
  • GPUは通常メッシュVBでこれを行うため、HLSL、ゲームスタイル、およびターゲットエンドユーザーハードウェアのスキルに応じて、 GPUでBBトランスフォームを移動できます(またはできません)(計算シェーダー、SM 4.0でも使用可能ですが、いくつかの制限があります)。しかし、それがあなたに入札利益を与えるとは思わない。ただし、後で衝突検出をGPUに移行することも良いトレーニングになります。

その助けを願っています!

于 2012-10-27T21:16:09.183 に答える