2009-03-06 9 views
3

これまでのところ、私はglDrawArraysを使用しており、インデックスバッファとインデックス付きの三角形を使用しています。私は、テクスチャ座標、法線、および頂点座標で幾分複雑なオブジェクトを描画しています。このすべてのデータが単一のインターリーブ頂点バッファに集められ、(すべてのserupが正しく行われていると仮定)に類似の呼び出しを使用して描画されます。OpenGL glDrawElements with interleaved buffers

glVertexPointer(3, GL_FLOAT, 22, (char*)m_vertexData); 
glNormalPointer(GL_SHORT, 22, (char*)m_vertexData+(12)); 
glTexCoordPointer(2, GL_SHORT, 22, (char*)m_vertexData+(18)); 
glDrawElements(GL_TRIANGLES, m_numTriangles, GL_UNSIGNED_SHORT, m_indexData); 

m_indexDataはまた私の法線の指標とインターリーブされるため、これは許可していとテクスチャ座標と標準的な位置インデックス配列は同じですか?あるいは、頂点フォーマット全体(POS、NOR、TEX)に適用されるinidicesの1つの線形リストを仮定していますか?後者が真の場合、異なるテクスチャ座標または法線を持つ同じ頂点をどのようにレンダリングすることが可能ですか?

私は3つの別々のインデックス付きリスト(POS、NOR、TEX)を持っていて、後者の2つを最初のインデックスリストと同じインデックスリストを共有するように並べ替えることができない場合は、それをレンダリングする。

答えて

5

異なるリストに対して異なるインデックスを設定することはできません。 glArrayElement(3)と指定すると、OpenGLはすべてのリストの3番目の要素を取ります。
最終的にアクセスされるリスト内の場所は、リストの開始点から指定したインデックスのオフセットまでのポインタなので、指定したポインタで再生することができます。これは、リスト間に一定のオフセットがある場合に便利です。リストは単にランダム置換されているならば、すべての頂点のための遊びのこの種は、おそらく私は、同様のトラブルのDirect3D 9.0で同じことをしようとしたのです昔ながらglVertex3fv()glNormal3fv()glTexCoord3fv()

+1

だけを確認するために、glDrawElementsで使用される指標は、あなたの全体の頂点フォーマットに適用されますそのメッシュに頂点が出現するたびに、それと同じ法線とテクスチャの線がなければなりませんか?特定の3Dアプリケーションは、特定の頂点位置が異なるノーマル&テクスチャ座標を持つモデルをエクスポートするため質問します – DavidG

+1

2つの異なるセットの法線とテクスチャ座標を持つメッシュに同じ頂点を表示するには、頂点を2度追加する必要があります配列に。 OpenGLについては、2つの異なる頂点が関係しています。 – shoosh

関連する問題