OpenGL使用VBO和VAO绘制三角形

⌚Time: 2023-07-20 22:42:52

👨‍💻Author: Jack Ge

使用glew库和freeglut库。VS2013编译


#include <GL/glew.h>

#include <GL/freeglut.h>

//顶点数据

GLfloat vertices[] = {

    -0.5f, -0.5f, 0.0f,//x,y,z顶点位置

    0.5f, -0.5f, 0.0f,

    0.5f, 0.5f, 0.0f,

};

//全局变量VAO, VBO

GLuint VAO, VBO;

void init() {



    // 创建VAO VBO

    glGenVertexArrays(1, &VAO);

    glGenBuffers(1, &VBO);

    // 绑定VBO

    glBindVertexArray(VAO);

    glBindBuffer(GL_ARRAY_BUFFER, VBO);



    // 设置VBO数据

    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    // 配置顶点指针

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);

    //开启VAO属性值

    glEnableVertexAttribArray(0);

    //解绑VAO VBO

    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glBindVertexArray(0);



}



void display() {

    //设置清除颜色

    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);

    //清除背景

    glClear(GL_COLOR_BUFFER_BIT);



    // 绘制三角形

    glBindVertexArray(VAO);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    //刷新

    glFlush();

}



int main(int argc, char** argv) {

    //初始化glut

    glutInit(&argc, argv);

    //设置窗体显示模式

    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);

    //窗体大小

    glutInitWindowSize(800, 600);

    //窗体名称

    glutCreateWindow("OpenGL VBO Demo");

    //初始化glew库

    glewInit();

    //调用init函数

    init();

    //注册显示函数

    glutDisplayFunc(display);

    //opengl主循环

    glutMainLoop();



    return 0;

}


效果