OpenGL -- 绘制第一个三角形(2)

#include <glad\glad.h>
#include <glfw3.h>
#include <iostream>


float vertices[] = {
    -0.5f,-0.5f,0.0f,
    0.5f,-0.5f,0.0f,
    0,0.5f,0.0f
};

GLFWwindow* glfwWindow;

int gl_init();

int main() {
    gl_init();

    /*    
    *    VBO(Vertex Buffer Objects)顶点缓冲对象是显卡存储空间里一块缓存区BUFFER
    *   用于存储和顶点以及其属性相关的信息(顶点信息,颜色信息,法线信息,纹理坐标信息和索引信息等)
    *    VAO(Vertex Array Object)是包含一个或者多个VBO的对象
    *    被设计用来存储被完整渲染对象的相关数据信息,如渲染对象的顶点信息和每一个顶点的颜色信息。 
    */
    unsigned int VBO,VAO;
    //生成VB0对象
    glGenBuffers(1, &VBO);
    //绑定VBO对象
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    //生成VAO对象
    glGenVertexArrays(1, &VAO);
    //绑定VAO对象
    glBindVertexArray(VAO);
    //复制数据到显存缓冲区中供OpenGL使用    GL_STATIC_DRAW 表示数据不会或几乎不会改变。
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    //告诉OpenGL如何解析顶点数据
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    //启用顶点属性
    glEnableVertexAttribArray(0);

    //主逻辑循环 当窗体没有关闭的时候执行
    while (!glfwWindowShouldClose(glfwWindow)) {
        //设置清除颜色RGBA
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        //使用颜色Buff清除窗口
        glClear(GL_COLOR_BUFFER_BIT);
        //画三角形
        glDrawArrays(GL_TRIANGLES, 0, 3);
        //接受事件触发,更新窗体的状态
        glfwPollEvents();
        //交换颜色缓冲区,渲染指令在后缓冲绘制 ,前缓冲用来输出显示到屏幕 
        glfwSwapBuffers(glfwWindow);
    }

    glfwTerminate();
    
    return 0;
}

int gl_init() {
    //glfw初始化
    glfwInit();
    //设置OpenGL 版本号3.3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    //设置OpenGL工作模式为核心模式
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    //创建窗体
    glfwWindow = glfwCreateWindow(800, 600, "LearnOpenGL01", NULL, NULL);
    if (glfwWindow == NULL) {
        std::cout << "err ==== createWindow fail" << std::endl;
        glfwTerminate();
        return -1;
    }
    //设置窗体为当前线程的主上下文
    glfwMakeContextCurrent(glfwWindow);

    //glad初始化 用来管理OpenGL的函数指针(不初始化的话 使用不了OpenGL的函数) 
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值