一次绘制OBJ模型一张脸

时间:2013-05-23 08:23:19

标签: opengl vbo

我正在尝试渲染从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;

}

我正在测试它的模型是一个基本的四面体,看起来应该是这样的:

correct tetrahedron

但是我的代码正在输出:

my tetrahedron

请注意,只有第一个面是渲染,并且有一条奇怪的线将其中一个顶点连接到原点 - 所提供的顶点都不在原点!

我认为这个问题与索引没有正确排列有关,我相信我已经正确解析了顶点和索引值(索引值也从0开始)。

有什么建议吗?

修改

这是我从(左)加载的OBJ以及传递给VBO的顶点和vertexIndices数组的打印输出(右)

obj file and vertex data

0 个答案:

没有答案