OpenGL中的EBO相关操作

162 阅读1分钟

EBO简介

EBO(Element Buffer Object): 用于存储顶点绘制顺序索引号的GPU显示区域

代码

void prepareEBO()
{
    float positions[] = {
        -0.5f, -0.5f, 0.0f,
        0.5f, -0.5f, 0.0f,
        0.0f, 0.5f, 0.0f,
        0.5f, 0.5f, 0.0f
    };

    unsigned int indicates[] = {

        0, 1, 2,
        2, 1, 3
    };

    // 2 VBO创建
    GLuint vbo;
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(positions), positions, GL_STATIC_DRAW);

    // 3 EBO创建
    GLuint ebo;
    glGenBuffers(1, &ebo);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indicates), indicates, GL_STATIC_DRAW);

    // 4 VAO创建
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);


    // 5 绑定VBO  EBO加入属性描述信息
    glBindBuffer(GL_ARRAY_BUFFER, vbo);    // 加入位置属性描述信息
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, (void*)0);


    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);   // 加入ebo到当前的vao

    glBindVertexArray(0);

}

画图

 glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

image.png