glfw glDrawElements 绘制奇怪的三角形

Posted

技术标签:

【中文标题】glfw glDrawElements 绘制奇怪的三角形【英文标题】:Glfw glDrawElements drawing triangle weird 【发布时间】:2017-08-27 15:34:46 【问题描述】:

只运行一次

GLfloat vertices[] = 
    -0.5f, -0.5f,  0.0f,
     0.5f, -0.5f,  0.0f,
     0.5f,  0.5f,  0.0f,
    -0.5f,  0.5f,  0.0f
;

GLuint triangles[] = 0,1,2;

int lengthV = 3; //Number of vertices
int lenfthT = 1; //Number of triangles

glGenVertexArrays(1, &vaoID);
glBindVertexArray(vaoID);

glGenBuffers(vaoID, &verticesVBOID);
glBindBuffer(GL_ARRAY_BUFFER, verticesVBOID);
glBufferData(GL_ARRAY_BUFFER, lengthV*sizeof(GLfloat)*3, vertices, GL_STATIC_DRAW);

glGenBuffers(vaoID, &trianglesVBOID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, trianglesVBOID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, lengthT*sizeof(GLuint)*3, triangles, GL_STATIC_DRAW);

每帧运行一次

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, verticesVBOID);
glVertexAttribPointer(0, lengthV, GL_FLOAT, GL_FALSE, 0, nullptr);

glUseProgram(program);
//glDrawArrays(GL_TRIANGLES, 0, verticeCount*3);
glDrawElements(GL_TRIANGLES, lengthT,GL_UNSIGNED_INT, nullptr);
glDisableVertexAttribArray(0);

glfwSwapBuffers(window);

当我运行它时,它会呈现,这是正确的。

当我将顶点数更改为 4 以尝试最终渲染一个四边形时。

int lengthV = 4;

发生这种情况。 我不明白为什么会这样,因为我只更改了顶点数。

我试图找到答案,但我找不到。我看过这个人的问题,他的代码在应用答案后看起来和我的一样。 No display from glDrawElements

【问题讨论】:

【参考方案1】:

你误解了glVertexAttribPointer的第二个参数。

size 参数指定属性的组件数(基本上是它获得的浮点数)。由于在绘制四边形时每个顶点仍有一个 vec3(3 个浮点数),因此不应更改此数字。

【讨论】:

谢谢 我查看了那个网站,我认为这意味着顶点的数量。我想我应该看起来更长。 :)

以上是关于glfw glDrawElements 绘制奇怪的三角形的主要内容,如果未能解决你的问题,请参考以下文章

使用 glDrawElements 绘制 std::vector

glDrawElements:绘制的源纹理和目标纹理相同

glDrawElements 不绘制任何东西

glDrawElements 只绘制半个四边形

OpenGL- glDrawElements 只绘制第一个元素

如何使用 glDrawElements() 绘制硬面立方体? [复制]