4

数千のクワッドを描画する必要があり、そのうちのいくつかはビューポートの外に完全に収まる可能性があります。どのクワッドがビューポートの外にあるかを検出し、OpenGL に少なくとも部分的に見えるものだけを描画するように要求するコードを書くことができます。別の方法として、ビューポートと交差するかどうかに関係なく、OpenGL にすべてのクワッドを描画させることもできます。

これらのいずれかが明らかに優れているかどうか (または、OpenGL が使用できるビューポート交差テストを提供するかどうか) を知るには、OpenGL の経験が十分ではありません。ビューポート外での描画はノーオペレーションに近いものですか、それともコストがかかるので避けるべきでしょうか?

4

1 に答える 1

5

それはあなたの状況によります。

描画はバッチで行うのが最適ですが、構造が静的なバッチ (つまり、各バッチ全体が描画される) が望ましいです。したがって、クワッド レベルで選別するべきではありません。しかし、クワッドの大規模なグループのカリングを行うことは歓迎されません。

失われる主なパフォーマンスは、頂点変換 (別名: 頂点シェーダー) です。頂点シェーダーは、他に関係なく、提供するすべての頂点で実行する必要があります。ただし、ハードウェアはビューポートの外にある三角形を破棄するため、フィルレートやその他のパフォーマンスを吸収することはありません。

ただし、頂点 T&L が安ければよいというわけではありません。目に見えない三角形の大きなブロックをレンダリングすると、すべての三角形がカリングされるため、ラスタライザーが停止する可能性があります。つまり、画面外にあることによって間引かれる多くのものを描画すると、実際に表示されている三角形で使用したフィルレートが失われる可能性があります。

したがって、ジオメトリを GPU にむやみに投げつけるのは得策ではありません。

いずれにせよ、2D レンダリングを行っている場合は、四角形の個別のグループを粗くカリングするだけで十分です。タイルマップを画面サイズの部分に分割し、カメラの位置に基づいて最大 4 つまで描画できます。

于 2012-11-04T23:16:12.117 に答える