opengl - glDrawElements不绘制三角形

时间:2015-07-14 02:46:52

标签: c++ opengl

我试图创建一个OBJ解析器,它读取文件并将顶点发送到opengl。我使用glDrawElements绘制模型,但看起来它不是由三角形组成。您可以在下面查看我的代码,了解我是如何做到这一点的。代码段只是一个示例。请注意索引数量与我加载的模型不同。

GLuint vbuffer;
glGenBuffers(1, &vbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(ff);
glVertexAttribPointer(ff, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, cbid);
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(GLshort), indices, GL_STATIC_DRAW);
glDrawElements(GL_LINE_STRIP, 6, GL_UNSIGNED_SHORT, 0);
glDisableVertexAttribArray(0);

这是我得到的输出。 Image Link

1 个答案:

答案 0 :(得分:0)

在这行代码中

glDrawElements(GL_LINE_STRIP, 6, GL_UNSIGNED_SHORT, 0);

您使用的是GL_LINE_STRIP,如果您的数据包含三角形,则不是您想要的。在这种情况下你想要的是GL_TRIANGLES,它会给你预期的行为。

另外,我不知道这只是一个错字,但是在你的glDrawElements调用中,你传递了GL_UNSIGNED_SHORT,而初始化元素缓冲时你传递的是sizeof(GLshort),而不是GLushort。