WIN10搭建OpenGL项目

时间:2021-12-20    作者:虣虣    分类: 图形学


WIN10搭建OpenGL项目

OpenGL GLAD GLFW VS2020 配置

在画出出色的效果之前,首先要做的就是创建一个 OpenGL 上下文和一个用于显式的窗口。
一些函数库已经提供了这样的功能,可以提供给开发者一个窗口和上下文来渲染。
比较流行的有 GLUT, SDL, SFML, GLFW, 此处我们使用 GLFW.

OpenGL 相关库简介

  • GLEW 是对底层 OpenGL 的接口的封装,可以让开发者的代码跨平台

  • GLAD 与 GLEW 作用基本相同,可以看作是它的升级版本

  • Freeglut 主要用于创建 OpenGL 上下文、接受一些鼠标键盘事件等等

  • GLFW 作用与 Freeglut 基本相同,可以看作是它的升级版

GLFW下载、编译

  • 简介

GLFW 是一个专门针对 OpenGL 的 C 语言库,它提供了一些渲染物体所需要的最低限度的接口。它允许用户创建 OpenGL 上下文,定义窗口参数以及处理用户输入。

  • 官网下载

去官网下载源文件。然后配合 CMake 工具生成对应的 glfw3.lib

  • 构建、编译GLFW并生成 glfw3.lib 文件
  1. 选择要编译的GlFW的存储路径

  2. 选择构建出来的文件存放路径

  3. 点击Configure生成构建GLFW配置,此过程中会选择VS版本号,此时选择电脑上已经安装好了的VS2020.

  4. 点击Generate生成GLFW构建项目

  5. 点击Open Project进行编译项目,得到 glfw3.lib

GLAD下载

由于 OpenGL 驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。然而这个过程既复杂有繁琐,而 GLAD 库可以简化此过程。

  • 官网下载

打开 GLAD 的在线服务,选择如下配置后进行生成,选择压缩文件 glad.zip 下载即可。

  1. 将语言(Language)设置为 C/C++;

  2. 将OpenGL API 版本(API gl)设置为最新的版本(向下兼容);

  3. 将模式(Profile)设置为 Core;

  4. 勾选生成加载器(Generate a loader)选项。

用VS2020创建控制台程序

  1. 打开VS2020创建新项目

  2. 选择C++语言创建一个控制台应用程序,然后点击下一步

  1. 输入一个自己喜欢的项目名字、位置、勾选上将解决方案和项目放在同一目录中,然后点击创建

配置OpenGL开发环境

  1. 在解决方案中右击项目属性中配置引用目录、库目录、包含目录

  1. 链接器 -> 输入 -> 附加依赖项 中输入 glfw3.lib库,然后点击应用、确定

测试环境是否有效

写上测试代码(此次代码不做过多的解析,后续文档会进行详细说明)、然后点击生成解决方案

#include <iostream>

#include <glad/glad.h>
#include <GLFW/glfw3.h>

int main()
{
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILEGLFW_OPENGL_CORE_PROFILE);  

    GLFWwindow* window = glfwCreateWindow(800, 600, "Demo", nullptr, nullptr);
    if (window == nullptr) {
        std::cout << "Failed to create GLFW window" << std::endl;
        return -1;
    }

    glfwMakeContextCurrent(window);

    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
        std::cout << "Failed to initalize GLAD" << std::endl;
        return -1;
    }
    while (!glfwWindowShouldClose(window))
    {
        glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return 0;
}

注意: 点击生成解决或者重新生成解决方案会发现有以下错误

此时把Glad中的glad.c文件加入到项目中进行重新编译即可

OpenGL、环境搭建、游戏开发