2009-06-11 19 views
3

私は三角形と四角形のいずれかの多角形を持つメッシュデータ構造を持っています。 OpenGLを使ってこれを描く最も速い方法は何ですか?OpenGL:三角形と四角形を混ぜて描画する最速の方法は?

ゆっくりした方法は、構造全体と各ポリゴンに対して、またはGL_TRIANGLESのいずれかを使用して適切なglBegin() .. glEnd()を作成することです。私は各ポリゴンについてglBegin() .. glEnd()をやらなければならないことを避けたいと思います。

もう1つの方法は、構造体を三角形を含む構造体と四角形を含む構造体の2つの構造体に分割し、それらを別々に渡すことです。これは、私が実際にそれらをすべて単一の構造に保ちたいので、避けたいものです。

クワッドを三角形に三角形分割することは現時点ではオプションではありません。

良い解決策がありますか?

+0

「すべてのポリゴン」では、すべての三角形\四角形を意味するのか、三角形と四角形からなるすべてのメッシュを意味しますか? –

答えて

3

2つのインデックステーブルを作成し、1つは四角形用の1つのテーブル、もう1つは四角形、その後に三角形(またはその逆)を書くことができます。配列のインデックスを使用して描画するには、をglVertexPointerglEnableClientStateのセットで使用して動作させます。

また、実際に速度を上げたい場合は、すべての頂点をVBOとインデックスに配置することができます。この方法で、GPUのRAM上にすべての頂点とインデックスを取得できます。

+1

結果:OpenGLでは、glXXX呼び出しの数を減らすと、一般的にスピードアップが得られます。 可能であれば、_STRIP描画モードも使用する必要があります。 – Dolphin

3

いつでもすべてを三角形に変換することができますが、非常に簡単です。

基本的に擬似コードは次のようになります。

glBegin(GL_TRIANGLES); 
for each (object *a in objectList) 
    if (a->type == TRIANGLE) 
    glVertex3fv(a->vertices); 
    if (a->type == QUAD) 
    { 
    glVertex3f(a->vertices[0]); 
    glVertex3f(a->vertices[1]); 
    glVertex3f(a->vertices[2]); 

    glVertex3f(a->vertices[2]); 
    glVertex3f(a->vertices[1]); 
    glVertex3f(a->vertices[3]); 
    } 
glEnd(); 

あなたは同じように(時計回りまたは反時計回りに)指向それらを保つことに注意する必要があるだろうが、それは動作するはずです!

+0

この問題は、glPolygonMode(GL_LINE)を使用して描画している場合、対角線があることです。 – shoosh

+0

内部エッジを描画しないテクニックがありますが、それは完全に私の心を滑らせます。 –

+3

'glBegin()'と 'glEnd()'を使うとこれは* not *最速の方法になる。 –

1

glPolygonMode(GL_LINE)と分解されたGL_QUADSが行く限り、glEdgeFlagPointer()はあなたが探している機能でなければなりません。周辺セグメントのGL_TRUE、クワッド対角線のGL_FALSE。

glEnableClientState(GL_EDGE_FLAG_ARRAY)を忘れないでください。

関連する問題