3

への単一の呼び出しを使用して一連の行をレンダリングしようとしていますglDrawElements()。各線は単一の四角形であり、それらを分離するために間に縮退した三角形を使用しています。

0レンダリングされると、インデックス、、n-1およびの頂点を使用して追加の三角形が描画されます。n-2これは、の通常の動作ではないと思いますGL_TRIANGLE_STRIPS

たとえば、3つのクワッドで構成される12の頂点がある場合、インデックス配列は次のようになります。

(0、1、2、3、3、4、4、5、6、7、7、8、8、9、10、11 _ _ _ _ _ _

そして結果はこれです:

最初の頂点と最後の頂点の間にレンダリングされた三角形

レンダリングしようとしている頂点の数や、インデックスリストに配置するインデックスの数は関係ありませんが、開始と終了を三角形で結合します。VAOに包まれたVBOとIBOを使って描いています。だから私は単に描くために:

glBindVertexArrayOES(vao);
glDrawElements(GL_TRIANGLE_STRIP, indexCount * sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
glBindVertexArrayOES(0);

VAOの設定:

// Bind VAO.
glBindVertexArrayOES(vao);

// Bind and set VBO data.
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vertexCount * sizeof(VertexStructure), vertices, GL_STATIC_DRAW);

// Enable attribute pointers.
glVertexAttribPointer(position, 2, GL_FLOAT, GL_FALSE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, vertex));
glEnableVertexAttribArray(position);
glVertexAttribPointer(color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, color));
glEnableVertexAttribArray(color);

// Bind and set IBO data.
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * sizeof(GLushort), indices, GL_STATIC_DRAW);

// Unbind VBO & VAO.
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArrayOES(0);

// Disable attribute pointers.                                                       
glDisableVertexAttribArray(position);
glDisableVertexAttribArray(color);


この振る舞いを引き起こすために、私はどのような愚かなことをすることができるでしょうか?

4

1 に答える 1