OpenGL的环境配置

第一步下载glad以及glfw

点击下载glad
选择核心模式
版本选择3.3以上的
在这里插入图片描述
点击下载glfw
在这里插入图片描述
根据系统下载32位还是64位在这里插入图片描述
两个包下载解压出来之后就是这个样子

在这里插入图片描述
打开VS新建一个空项目
右键项目名称打开属性
在这里插入图片描述

这里配置和平台选择所有配置 和所有平台 然后点击VC++目录 点击包含目录 打开之后选择编辑

在这里插入图片描述

点击这个文件夹菜单 要勾选从父级货项目默认设置继承
在这里插入图片描述

选择刚刚glfw文件夹里面的include文件夹 以及glad包里面的include文件夹
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后点击这个库目录选择glfw包里面lib文件夹 这里你VS是哪个版本就选哪个后缀这里我是2019所以我选择2019
在这里插入图片描述

之后点击链接器附加依赖项输入opengl32.lib(这里不管是你下载的64还是32后缀都是32) 以及glfw.lib
同时勾选父类继承
在这里插入图片描述

之后打开glad文件夹里面的src文件吧里面的glad源码复制到项目的源文件中就可以开始使用了
在这里插入图片描述

如果配置环境时候windows系统报错没找到 opengl32.lib 请检查电脑windowsSKD是否完整 或者是否勾选了父类继承

复制以下代码如果成功运行并且有图像输出说明环境配置成功了

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include<iostream>
using namespace std;
void processInput(GLFWwindow* window)//用这个函数来控制用户键盘输入
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
    //这里我们检查用户是否按下了返回键(Esc)
}

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


const char* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
"   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";

const char* fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
"    FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n";

int main(void)
{
    //必须先初始化该库,然后才能使用大多数GLFW函数。成功初始化后,GLFW_TRUE将返回。如果发生错误,GLFW_FALSE则返回。
    if (!glfwInit())
        return -1;

    //创建窗口(OpenGL上下文似乎也一并创建了)
    GLFWwindow* window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    //glfwCreateWindow函数需要窗口的宽和高作为它的前两个参数。第三个参数表示这个窗口的名称(标题

    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    //使用GLAD来加载OpenGL的函数地址 GLAD是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLAD。
    //我们给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。GLFW给我们的是glfwGetProcAddress,它根据我们编译的系统定义了正确的函数。
    gladLoadGL();
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }
    unsigned int vertexShader;//创建一个对象vertexShader 以ID来索引所以使用 unsigned int型
    vertexShader = glCreateShader(GL_VERTEX_SHADER);//glCreateShader来创建shader 以参数形式告诉函数GL_VERTEX_SHADER 顶点做色器
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);//下一步我们把这个着色器源码附加到着色器对象上,然后编译它:
    glCompileShader(vertexShader);
    /*
    glShaderSource函数把要编译的着色器对象作为第一个参数。第二参数指定了传递的源码字符串数量,
    这里只有一个。第三个参数是顶点着色器真正的源码,第四个参数我们先设置为NULL。
    */
    unsigned int fragmentShader;
    fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);
    /*
   这个片段着色器和定点着色器一样
   */


   //将源码编译之后需要把两个源码链接到一个程序里面
    unsigned int shaderProgram;
    shaderProgram = glCreateProgram();//使用这个glCreateProgram创建一个程序 返回ID的索引
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader); //把两个源码附加到程序上
    glLinkProgram(shaderProgram);

    glDeleteShader(vertexShader); //调用完成之后删除对象释放内存
    glDeleteShader(fragmentShader);


    /*
    VBO顶点缓冲对象 作用为管理内存 用来管理在GPU上创建内存用于储存我们的顶点数据的内存
    定义一个VBO变量  把变量传入glGenBuffers缓冲生成函数里面产生一个缓冲和一个ID
    然后把这个缓冲对象用来管理GL_ARRAY_BUFFER
    */
    unsigned int VAO,VBO;
    glGenVertexArrays(1, &VAO);//glGenVertexArrays来创建顶点数组
    glGenBuffers(1, &VBO);//glGenBuffers来创建缓存
    glBindVertexArray(VAO);//为下面的属性绑定VAO
    glBindBuffer(GL_ARRAY_BUFFER, VBO); //OpenGL有很多缓冲对象类型,顶点缓冲对象的缓冲类型是GL_ARRAY_BUFFER。
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//绑定顶点并把顶点发送给GPU 第三个参数就是我们希望发送的实际数据。

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);
   
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);
    
  
    //循环直到用户关闭窗口 渲染循环(Render Loop),它能在我们让GLFW退出前一直保持运行
    while (!glfwWindowShouldClose(window))
    {
        processInput(window);//使用按键

        //清理屏幕所用的颜色:
        glClearColor(0.4f, 0.5f, 0.6f, 1.0f);

        //清理屏幕  它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲,
        //可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。由于现在我们只关心颜色值,所以我们只清空颜色缓冲。
        glClear(GL_COLOR_BUFFER_BIT);

        glUseProgram(shaderProgram);//使用这个程序
        glBindVertexArray(VAO);
        glDrawArrays(GL_TRIANGLES, 0, 3);

        //交换前后缓冲
        glfwSwapBuffers(window);

        //轮询并处理事件
        glfwPollEvents();
    }
    glDeleteVertexArrays(1, &VAO);
    glDeleteBuffers(1, &VBO);
    glDeleteProgram(shaderProgram);

    //使用GLFW完成操作后,通常是在应用程序退出之前,需要终止GLFW 释放/删除之前的分配的所有资源
    glfwTerminate();
    
    return 0;
}

在这里插入图片描述

之后我们需要使用吧stb_image.h来加载纹理直接添加头文件即可

在这里插入图片描述
在这里插入图片描述
资源下载
提取码:984h

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值