我正在尝试渲染从OBJ文件加载的模型。它只是一个基本的线框,所以我不担心法线,tex coords等。
我正在将顶点和索引数据加载到绑定到模型的单个VAO的VBO中,并且我试图迭代每个面并一次绘制一个但是得到一些奇怪的结果。似乎指数没有正确排列到它们对应的顶点。
我将数据加载到我的VBO中,如下所示:
float vertices[objData->vertexCount*VALS_PER_VERT];
unsigned int vertexIndices[faceCount*VALS_PER_INDEX];
//generate VAO handle
unsigned int vaoHandle;
glGenVertexArrays(1, &vaoHandle);
glBindVertexArray(vaoHandle);
int vertLoc = glGetAttribLocation(programHandle, "a_vertex");
//generate VBOs
unsigned int buffer[6];
glGenBuffers(6, buffer);
//set vertices attributes
glBindBuffer(GL_ARRAY_BUFFER, buffer[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*objData->vertexCount*VALS_PER_VERT, vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(vertLoc);
glVertexAttribPointer(vertLoc, VALS_PER_VERT, GL_FLOAT, GL_FALSE, 0, 0);
//set face attributes (vertex, normal, texture indices)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer[3]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int)*faceCount*VALS_PER_INDEX, vertexIndices, GL_STATIC_DRAW);
我的渲染功能的相关部分如下
//iterate through faces of model
unsigned int index = 0;
for(int i = 0; i < faceCount; i++)
{
//printf("index %d\n", index);
glDrawElements(GL_TRIANGLES, VALS_PER_INDEX, GL_UNSIGNED_INT, (GLvoid*)index);
index += VALS_PER_INDEX;
}
我正在测试它的模型是一个基本的四面体,看起来应该是这样的:
但是我的代码正在输出:
请注意,只有第一个面是渲染,并且有一条奇怪的线将其中一个顶点连接到原点 - 所提供的顶点都不在原点!
我认为这个问题与索引没有正确排列有关,我相信我已经正确解析了顶点和索引值(索引值也从0开始)。
有什么建议吗?
修改
这是我从(左)加载的OBJ以及传递给VBO的顶点和vertexIndices数组的打印输出(右)