3

背景: 基本的にノードとエッジの巨大な 3D グラフを描画するアプリケーションを開発しています。ノードはインスタンス化された立方体として描画され、エッジはGL_LINEジオメトリ シェーダーで描画され、三角形のストリップで構成される 3D ボリューム「ライン」に展開されます。現在、エッジを再描画するたびにこの拡張を実行しています。ただし、私のグラフは完全に静的であるため (ノードは移動できないため、エッジも移動できません)、GL_LINE定義を三角形ストリップに展開する必要があるのは 1 回だけであり、展開された頂点をバッファーにキャプチャし (Tranform Feedback を使用)、そして次に、その時点から、キャプチャされた頂点をglMutliDrawArrays使用して、プリミティブ タイプの を使用してエッジを描画しますGL_TRIANGLE_STRIP

質問:私が描いているこれらのボリューム ラインにはすべて、10 個の頂点が含まれています。ただし、glMultiDrawArrays基本的に各プリミティブの開始点とカウント (要素単位) を記述する開始インデックスとカウント サイズの配列が必要です。サイズが異なるプリミティブはないため、開始インデックスとカウントの不要なリストを作成することになります。プリミティブ再起動が発生するストライド (要素単位) を単純に指定できるようにする OpenGL が提供する機能はありますか?

4

1 に答える 1

3

そのような機能はありませんが、必要に応じて必要ありません。トランスフォーム フィードバックはトライアングル ストリップを出力できません。基本的なプリミティブ (個々の点、線、または三角形)のみを出力します。そのため、 、、またはglBeginTransformFeedbackのみを取ります。GL_POINTSGL_LINESGL_TRIANGLES

すべてのエッジを一度にレンダリングし、フィードバックを介して結果を 1 つのバッファーに収集し、後で を 1 回呼び出すだけで全体をレンダリングするだけglDrawArraysです。

于 2013-03-19T23:00:00.610 に答える