glDrawElements不绘制三角形

glDrawElements not drawing triangles

本文关键字:三角形 绘制 glDrawElements      更新时间:2023-10-16

我试图创建一个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);

这是我得到的输出。图片链接

在这行代码中

glDrawElements(GL_LINE_STRIP, 6, GL_UNSIGNED_SHORT, 0);

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

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