我确实希望将Index Buffer(GL_ELEMENT_ARRAY)与Vertex数组对象一起使用。我有以下代码:
// Set stuff up
glGenVertexArrays(1, &VertexArrayObjectId);
glBindVertexArray(VertexArrayObjectId);
glGenBuffers( 1, &ArrayBufferId );
glBindBuffer( GL_ARRAY_BUFFER, ArrayBufferId );
glBufferData( GL_ARRAY_BUFFER, sizeof(float) * finalData.size() , finalGPUData, GL_STATIC_DRAW );
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (GLvoid*) 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_TRUE, sizeof(float) * 8, (GLvoid*) 12);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (GLvoid*) 20);
glGenBuffers(1, &IndexBufferId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexBufferId);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, finalIndices.size() * sizeof(unsigned int), finalGPUIndices, GL_STATIC_DRAW);
glBindVertexArray(0);
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
//Render
//Set up shader etc
glBindVertexArray(VertexArrayObjectId);
//glBindBuffer( GL_ARRAY_BUFFER, ArrayBufferId );
//glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (GLvoid*) 0);
//glVertexAttribPointer(1, 2, GL_FLOAT, GL_TRUE, sizeof(float) * 8, (GLvoid*) 12);
//glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 8, (GLvoid*) 20);
glDrawElements(GL_TRIANGLES, finalIndices.size(), GL_UNSIGNED_INT, (void*) 0 );
据我所知,没有必要注释4行代码,因为这些信息存储在VAO中。 (我的意思是,保存这些调用是VAO的目的)但是,如果我运行此代码,它只会在原点而不是正确的顶点位置绘制几个三角形。但是,如果我包含这些行,则所有内容都会正确绘制。显然,GL_ELEMENT_ARRAY_BUFFER信息正确存储在VAO中,但顶点属性却没有。我的理解是错误的还是我的代码中只是错误?
非常感谢任何帮助。