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