求助QT opengl的三维绘图问题

我对下面这段代码不是很理解,请高手帮我解释下,谢谢!

    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出现了六次,如果能一句一句解释就更好了,拜托谢谢!!!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^