简体   繁体   English

glDrawElements未绘制

[英]glDrawElements not drawing

I create my buffers with the following code: 我使用以下代码创建缓冲区:

//generate buffers
glGenVertexArrays(1, &VAO);
//glGenBuffers(1, &EBO);
glGenBuffers(1, &VBO_vertices);
glGenBuffers(1, &VBO_colors);
glGenBuffers(1, &VBO_normals);

// Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointer(s).
glBindVertexArray(VAO);

// Copy our vertices array in a buffer for OpenGL to use
glBindBuffer(GL_ARRAY_BUFFER, VBO_vertices);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*vertices.size(), &vertices[0], GL_STATIC_DRAW);


glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, vTable.size() * sizeof(int), &vTable[0], GL_STATIC_DRAW);

// Position attribute
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); //size = 3 (X,Y,Z)
glEnableVertexAttribArray(0);


//Buffer for color
glBindBuffer(GL_ARRAY_BUFFER, VBO_colors);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*vertices.size(), &v_color[0], GL_STATIC_DRAW);

// Color attribute
glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); //size = 3 (R,G,B)
glEnableVertexAttribArray(1);


//Buffer for normals
glBindBuffer(GL_ARRAY_BUFFER, VBO_normals);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*vertices.size(), &v_normals[0], GL_STATIC_DRAW);

//normal attribute
glVertexAttribPointer((GLuint)2, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); //size = 3 (R,G,B)
glEnableVertexAttribArray(2);


// Unbind the VAO
glBindVertexArray(0);

My data are : 我的数据是:

vector<vec3> vertices, v_normals,v_color;
vector<int> vTable;

I have vertices, normals and colors per vertex and an index table with the index vertices of each triangle. 我有每个顶点的顶点,法线和颜色以及带有每个三角形的索引顶点的索引表。

When I try to render this, nothing appears on the window. 当我尝试渲染此图像时,窗口上没有任何内容。

glBindVertexArray(VAO); //Bind VAO
glDrawElements(GL_TRIANGLES, vTable.size(), GL_UNSIGNED_INT, &vTable[0]);
glBindVertexArray(0); //Unbind VAO

If I used this: 如果我用这个:

glDrawArrays(GL_TRIANGLES,0,vTable.size());

It draws something but an incomplete object, like in the link image. 它绘制的只是一个不完整的对象,就像在链接图像中一样。

image 图片

Anybody knows what happens? 有人知道会发生什么吗? Thanks in advance 提前致谢

您的glDrawElements调用是错误的,最后一个参数应该是GL_ELEMENT_ARRAY_BUFFER的字节偏移量,该偏移量保存索引,而不是指向系统内存的指针。

glDrawElements(GL_TRIANGLES, vTable.size(), GL_UNSIGNED_INT, 0);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM