OpenGL3.3 VS2017配置

更高版本的OpenGL已经发布(写作时最新版本为4.5),你可能会问:既然OpenGL 4.5 都出来了,为什么我们还要学习OpenGL 3.3?答案很简单,所有OpenGL的更高的版本都是在3.3的基础上,引入了额外的功能,并没有改动核心架构。新版本只是引入了一些更有效率或更有用的方式去完成同样的功能。因此,所有的概念和技术在现代OpenGL版本里都保持一致。当你的经验足够,你可以轻松使用来自更高版本OpenGL的新特性。

第一步:GLFW(管理窗口)下载与配置
GLFW下载地址
这里写图片描述
下面是编译好的,下载32位(不管系统是32还是64,都下载32位,因为64位的问题比较多)
打开VS2017,建立新项目,建立空白项,项目方案右键,打开项目资源所在文件夹。
这里写图片描述
这里写图片描述
在项目文件夹建立两个文件夹
Includes
Libs
这里写图片描述
解压下好的glfw
这里写图片描述
将相应的.lib和.h文件放到相应的文件夹中(没有文件夹自己创建),具体如下:

复制文件 复制到的目录
./include/GLFW/中的glfw3.h 放到我们刚创建好的Inlcudes文件夹中
./lib-vc2015/glfw3.lib和glfw3dll.lib 放到Libs文件夹中

打开属性管理器的链接器-输入(跟配置opencv步骤一样)
包含目录和库目录(一次选择我们添加的includes和libs)
这里写图片描述
附加依赖项输入 opengl32.lib和glfw3.lib还有msvcrt.lib
这里写图片描述

第二步:下载GLAD(使用OpenGL函数)
GLAD链接
这里写图片描述
只改动图上选项,其他不变直接点GENERATE
这里写图片描述
选中最后的压缩包下载,打开压缩包,把include中所有的文件复制到我们的Includes中
把src中的文件复制到项目目录如下
这里写图片描述
回到VS,把glad.c添加到工程中
这里写图片描述
创建main.cpp测试代码

#include<iostream>
#include <glad/glad.h>
#include <glfw3.h>
void framebuffer_size_callback(GLFWwindow* window, int width, int height)//这个是窗口变化的回调函数。。注意输入参数
                                                                         //是一个glfw的窗口,一个宽度和高度
{
    glViewport(0, 0, width, height);//这个是回调函数内的内容
                                    //这里是将视口改成变化后的的窗口大小
                                    //注意需要的注册该回调函数
                                    //glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
                                    //两个参数是,glfw的窗口以及回调函数
}
void processInput(GLFWwindow *window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)//获取按键,如果等于esc 
        glfwSetWindowShouldClose(window, true);//利用强制窗口应该关闭
}
int main()
{
    glfwInit();//类似于之前的gluinit一般采用库都需要进行初始化
               //版本号是opengl4.5
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//设置主版本号
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);//设置次版本号
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);//在mac系统上需要设置该语句
    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);//后面两个参数是设置显示屏和共享的,
                                                                               //一般库函数的相关定义,
                                                                               //可以配置好以后直接查看都有详细的定义
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        system("pause");
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))//在调用opengl函数之前初始化glad,
                                                            //glad的作用就是快速的将opengl函数映射到相关的显卡函数上
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }
    glViewport(0, 0, 800, 600);//设置视口大小
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);//注册函数,该函数还可以注册其他相关硬件的回调函数
                                                                      //
                                                                      //渲染流程
    while (!glfwWindowShouldClose(window))//检测glfw窗口是否被指令要求关闭,如果是的话,则会退出循环
    {

        //输入的相关操作
        processInput(window);//



                             // 渲染的相关操作

        glClearColor(1.0f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        //查看所有的事件,并且交换内存
        glfwSwapBuffers(window);//交换颜色缓存,即glfw窗口内的内容。。。注意glfw开头的交换和后面gl开头的区别
        glfwPollEvents();//检测是否有其他的触发时间,例如上述的窗口大小变化,需要调用相关的回调函数
    }
    glfwTerminate();//清除退出
    return 0;
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012456019/article/details/80627866