7

インデックス付きトライアングルまたはトライアングル ストリップ間のレンダリング パフォーマンスについてはかなり話題になっています。しかし、十分に考慮されていないケースがあると思います。

インデックス付きの三角形は、OpenGl では次のようにレンダリングされます。

glDrawElements(GL_TRIANGLES, ...);

しかし、何らかの理由で、多くの人がストリップを次の方法でのみレンダリングすると考えています。

glDrawArrays(GL_TRIANGLE_STRIP, ...);

GPU 変換キャッシュが GL_TRIANGLES モードでレンダリングされるのに便利なようにメッシュを最適化する非常に優れたインデクサー (Forsyth、Tipsify など) がいくつかあります。理想的には、三角形ごとに 0.5 レンダリングされた頂点などを達成できます。

しかし、なぜこれをしないのですか?

glDrawElements(GL_TRIANGLE_STRIP, ...);

つまり、ストリップ レンダリングの低いインデックス帯域幅と、上記のインデクサーが提供する効率的な GPU 変換キャッシュの使用を組み合わせるということです。少し変更を加えるだけで、ストリップを最適化して Tcache に適したストリップ インデクサーを使用することは良い考えであると言うのは正しいでしょうか?

おそらく0.5の目標には達しないでしょうが、少なくとも0.6はおそらく?また、インデックス帯域幅が大幅に増加することも忘れないでください (GL_TRIANGLES に対して 3 分の 1 になる可能性があります)。

4

1 に答える 1

-1

glDrawElements は、呼び出し時に CPU から GPU にデータを渡す必要があります。具体的には、最後のパラメーターはそのデータへのポインターです。

glDrawArrays は、呼び出し時に GPU にデータを渡す必要はありません。これがおそらく、頂点/インデックス データをカードに格納するときに glDrawElements が通常考慮されない理由です。

于 2014-07-22T21:22:32.910 に答える