編集:シェーダーを使用していない場合、これは当てはまらない可能性があることに気付きましたが、レガシー OpenGL に慣れていないため、私の投稿がどのような利点があるのか わかりません。使用している/対象としているバージョンは何ですか?
最近、glDrawElements hereに関する質問をしました。うまくいけば、私が投稿したものがいくつかの説明/例を提供します.
私が理解している方法:あなたのインデックスはあなたによって決定されるので、2番目の頂点から始めたい場合は、試すことができます(基本的なスケルトンには glVertexAttribPointer 呼び出しなどはありませんが、必要に応じて追加できます):
const float VBOdata = {
//Some X and Y coordinates for triangle1 (in the first quadrant)
//(z = 0, w = 1 and are not strictly necessary here)
0.0f, 1.0f, 0.0f, 1.0f //index 0
0.0f, 0.0f, 0.0f, 1.0f //1
1.0f, 0.0f, 0.0f, 1.0f //2
//Some X and Y coordinates for triangle2 (in the second quadrant)
0.0f, -1.0f, 0.0f, 1.0f //3
0.0f, 0.0f, 0.0f, 1.0f //4
-1.0f, 0.0f, 0.0f, 1.0f //5
//Now some color data (all white)
1.0f, 1.0f, 1.0f, 1.0f, //0
1.0f, 1.0f, 1.0f, 1.0f, //1
1.0f, 1.0f, 1.0f, 1.0f, //2
1.0f, 1.0f, 1.0f, 1.0f, //3
1.0f, 1.0f, 1.0f, 1.0f, //4
1.0f, 1.0f, 1.0f, 1.0f, //5
};
const GLubyte indices[] = {
3, 4, 5,
};
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, indices);
GL_TRIANGLES はプリミティブのタイプ、3 は「インデックス」内の要素の数、GL_UNSIGNED_BYTE はそれらの解釈方法、「インデックス」は配列の名前です。
これにより、2 番目の三角形のみが描画されます。glDrawElementsBaseVertexを試すこともできますが、個人的には試していません。私が収集したのは、0 から始まるインデックスを生成/明示的にコーディングするが、実際には 0+offset、1+offset などで読み取るようにオフセットを与えるということです。
これは役に立ちますか?