我有一个带有IBO的VBO,我想渲染第二个三角形,在下一个渲染步骤中,我想渲染第三个三角形。
我认为渲染第二个三角形的正确方法是调用
glDrawArrays(GL_TRIANGLES,
3, // indexArray[3] is start
3); // take 3 indices (from index 3..5 --> second triangle)
第一个三角形可以正常工作。但是当我想渲染另一个三角形时,VBO的参数将被解释不正确。
我的VAO的定义如下所示
glGenVertexArrays(1, out VAO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO.V_ID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBO.E_ID);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, false, 12 * sizeof(float), 0);
glBindAttribLocation(shaderID, 0, "InUV");
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, true, 12 * sizeof(float), 2 * sizeof(float));
glBindAttribLocation(shaderID, 1, "InColor");
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 3, GL_FLOAT, true, 12 * sizeof(float), 6 * sizeof(float));
glBindAttribLocation(shaderID, 2, "InNormal");
glEnableVertexAttribArray(3);
glVertexAttribPointer(3, 3, GL_FLOAT, false, 12 * sizeof(float), 9 * sizeof(float));
glBindAttribLocation(shaderID, 3, "InVertex");
glBindVertexArray(0);
当我打电话
glDrawElements(GL_TRIANGLES, VBO.length, GL_UNSIGNED_INT, 0);
该对象将正确呈现。
我是以错误的方式使用glDrawArrays还是有另一种方法来渲染VBO的一个特殊三角形?
答案 0 :(得分:3)
glDrawElements
和glDrawArrays
不同,glDrawArrays
会忽略索引缓冲区
你应该这样做:
usigned int *NULLptr=0;
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void*)(NULLptr+3));
注意指定的偏移量,您也可以使用(void*)(3*sizeof(unsigned int))