Glfw glDrawElements绘制三角形怪异
Glfw glDrawElements drawing triangle weird
只运行一次
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
您误解了 glVertexAttribPointer
的第二个参数。
大小参数指定了一个属性的组成部分的数量(基本上就是它获得的浮点数)。由于在绘制四边形时每个顶点仍然有一个 vec3(3 个浮点数),因此不应更改此数字。
只运行一次
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
您误解了 glVertexAttribPointer
的第二个参数。
大小参数指定了一个属性的组成部分的数量(基本上就是它获得的浮点数)。由于在绘制四边形时每个顶点仍然有一个 vec3(3 个浮点数),因此不应更改此数字。