4

背景:

私はOGLを初めて使用します。私のアプリケーションは 2D のみに関係しています。すべてのオブジェクトは視線方向に対して垂直であり、正射影を使用します。システムのパフォーマンスは、さらにバッチ処理が必要であることを示す draw* 呼び出しの数によって制限されていることがわかりました。

描画する必要があるオブジェクトは 1 つだけですが、それは重なり合う可能性のある何千もの三角形で構成されています。特定のアプリケーションでジオメトリを事前に計算し、三角形の透明度がさまざまであるため、三角形を前後に並べることができます。頂点属性は、フラグメント プログラムで使用されるアルファを含む色 (のみ) で構成されます。

私がやったこと:

すべてのプリミティブは三角形で、色は面全体で一定であるため、各三角形の 3 つの頂点に同じ色を割り当てます。すべての三角形のすべての頂点とそれらの色を 1 つの VBO (16 ビット; それほど多くの頂点はありません) に入れました。インデックス バッファーは三角形を前後に並べ、1 つの描画呼び出しを発行します。アルファ ブレンディング (SRC_ALPHA、ONE_MINUS_SRC_ALPHA) を使用します。

結果:

私が所有してテストしている唯一のマシンで、結果が正しくブレンドされ、レンダリングされていることがわかります。他の人には試していません。私はかなり長い間検索してきましたが、決定的な答えを求めて無駄でした. ところで、唯一の参照は、「プリミティブのシーケンス」について言及されている VBO 拡張仕様にありますが、プリミティブがオーバーラップしたときに何が起こるかについては触れていません。

質問:

これは保証された動作ですか?つまり、即時モードで glBegin(...) および glEnd(...) 内で複数の呼び出しを発行した場合と同じ結果になりますか (これは標準で保証されています)。

注: 深度バッファーとステンシル バッファーはオフになっています。

4

1 に答える 1

3

プリミティブが指定された順序でレンダリングされることは、OpenGL 仕様によって保証されています。コマンドから取得された各プリミティブはglDraw*、コンポーネントの頂点で指定された順序でレンダリングされます。

そうです: 三角形を順番に並べると、その順番でレンダリングされます。

于 2012-05-11T11:53:14.377 に答える