我对下面这段代码不是很理解,请高手帮我解释下,谢谢!
unsigned int handle[3];
glGenBuffers(3, handle);
glBindBuffer(GL_ARRAY_BUFFER, handle[0]);
glBufferData(GL_ARRAY_BUFFER, 9 * ElementCount * sizeof(float), node, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, handle[1]);
glBufferData(GL_ARRAY_BUFFER, 9 * ElementCount * sizeof(float), normal, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, handle[2]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 3 * ElementCount * sizeof(unsigned int), el, GL_STATIC_DRAW);
vao.create();
vao.bind();
glEnableVertexAttribArray(0); // Vertex position
glBindBuffer(GL_ARRAY_BUFFER, handle[0]);
glVertexAttribPointer( (GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, ((GLubyte *)NULL + (0)));
glEnableVertexAttribArray(1); // Vertex normal
glBindBuffer(GL_ARRAY_BUFFER, handle[1]);
glVertexAttribPointer( (GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, ((GLubyte *)NULL + (0)));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, handle[2]);
vao.release();
在这段代码的前面,我已经生成了node,normal,el这三个数组。node是节点的坐标,按照顺序xyz排好了;normal是节点法向量;el是单元列表。这三个数组我已经反复debug过了多遍,应该没有问题。
但是在生成数组之后,紧接着就是上面贴的那段代码,大概意思是绑定到缓存上,然后在render()函数里用glDrawElements显示出来。
vao.bind();
glDrawElements(GL_TRIANGLES, ElementCount, GL_UNSIGNED_INT, 0);
vao.release();
但是我反复修改都没有显示出正确的结果。没有报错。就是显示出来的东西一团乱,不是按照我在el单元列表中排列的那样。
我的el排行规则是:123456789;123组成一个三角形,456组成一个,789组成一个。然后node和normal分别对应的就是以上9个位置的xyz依次排列开来。
还烦请有高手帮我解释一下一开始贴出来的那段代码,为什么glBindBuffer出现了六次,如果能一句一句解释就更好了,拜托谢谢!!!
不知道你这个问题是否已经解决, 如果还没有解决的话: