2011-12-04 11 views
0

私はVBOを使用して512x512程度の大きなポイント配列を表示する予定です。それを表示するために、各頂点はその最も近い近傍に依存する。他のポイントのようにOpenGL VBOペイントオーダー

glBegin(GL_TRIANGLE_STRIP) 
glVertex(Points5) 
glVertex(Points6) 
glVertex(Points11) 
glVertex(Points12) 
glEnd() 

と:私は、次のコードを使用する必要があります

[ 1, 2, 3, 5, 6, 7 
    8, 9,10,11,12,13, 
14,15,16,17,18,19] 

と私は5番目のポイントを使用してポリゴンを描画したいと思います:たとえば、私は、次の表を持っている場合..

私のバッファは512x512ポイントしか保持していませんが、GL_TRIANGLE_STRIPとVBOを使ってその特定の方法で描画する方法を教えてください。

+2

あなたを混乱させる[この回答](http://stackoverflow.com/a/8293488/734069)のコメントにあなたが持っていたディスカッションについて何かありましたか? Datenwolfはすでにこれを「別々のストリップとして描く」ことをしないように言いました。これはおそらく、あなたのパフォーマンスが即時モードではひどい理由です。 –

+0

Nicol Bolas:まあ私はcouldnt;与えられたコード(あなたのリンク)で、上記のglVertexの例のようにペインティングの方法を指定する部分を見つけません –

答えて

0

最初に個々のクワッドごとに別々の三角形ストリップを描画しないでください!これらの四角形をそれぞれ2つの三角形に分割し、これらの三角形のすべての頂点インデックスを単一のインデックス配列/バッファに入れるだけです(Brett Haleの提案のように)。このようにして、glDrawElements(GL_TRIANGLES, ...)を一度呼び出してメッシュ全体を描画することができます。

インデックス配列が何であるか、または頂点配列/バッファが一般的であるかどうかわからない場合は、このトピックを少し詳しく解説する必要があります。しかし、是非、それぞれのクワッドのための単一のストリップを描く現在のソリューションから離れてください。最初は(送信する頂点の数に関して)大きく聞こえるかもしれませんが、そうではありません。 VBOの利点は、GPUストレージだけでなく、個々のプリミティブごとにドライバコールを必要とせず、現在のソリューションがそのようにしか実行できないということです。

GL_TRIANGLESの代わりにGL_QUADSを使用することもできます。この方法では、四角形ごとに4つのインデックスしか必要としません(三角形を使用する場合は6とは対照的に)。しかし、GL_QUADSが新しいOpenGLバージョン(3+)のコアプロファイルから、またESからも削除されていることに注意してください。だから、GL_TRIANGLESはよりポータブルな解決策かもしれない(とにかくGPUはそれを三角形に分割する)。

2

インデックス(GL_ELEMENT_ARRAY_BUFFER)バッファを使用して、インデックスに関してプリミティブを表現するのが最善の解決策だと思います。 ref

編集:

私はあなたの質問から言うことはできませんが、過度の描画呼び出しを避けるために、縮退三角形ストリップ(縮退三角形を追加することを)検討したい場合があります。

+0

degenrateの三角形のストリップが見た目になるかもしれませんが、それぞれのクワッドは、今のところそれをやりたいと思っているようです。 –

+0

あなたの答えをありがとう、別の質問は、実行中に 私は最初に各ポイントseperatly(CUDA)を計算し、次に、描画(glVertex)プロセス中に私は私の全体のデータ配列構造を再構築する必要があるので、二重塗装スタイル(毎回現ポイントに3点追加 - 塗装スタイルから私の質問を参照) 時間がかかりませんか?なぜなら私は最初にポイントに並べ替える必要があり、次にそれらをペイントする必要があるからです。 –

関連する問題