OpenGL环境搭建指南

文章目录

  • OpenGL环境搭建指南
    • 文章内容
    • 环境搭建
      • 安装开发环境
      • 准备GLFW
      • 准备GLEW
      • 准备GLM
      • 准备SOIL2
    • 在 Visual Studio 中开发和部署 OpenGL 项目

文章内容

现代图形编程使用 图形库1 完成,程序员通过调用预先定义好的一系列库中的函数编写代码来对底层图形进行操作,一个 跨平台 的图形编程库便是 OpenGL。在计算机上使用 OpenGLC++ 需要进行一系列的安装配置,本章内容以 Windows 操作系统为例,逐步且详细地介绍这些步骤。

  • 安装开发环境(以 Visual Studio 2019 为例);
  • 准备窗口管理库 GLFW
  • 准备扩展管理器库 GLEW
  • 准备数学库 GLM
  • 准备图像加载库 SOIL2
  • Visual Studio 中开发和部署 OpenGL 项目。

OpenGLGLSL 并不需要被特别“安装”,opengl32.lib 已作为标准 Windows SDK 的一部分提供,你只需确保你的显卡支持 OpenGL 4.32 及以上版本。


环境搭建

编写 C++/OpenGL 项目需要用到很多库3,所以我们建议用如下方式来搭建环境4,以最大限度减少新建项目所需的步骤;类似的步骤亦可以用在其他集成开发环境中5

考虑到国内访问国外站点时下载速度过慢的问题,你可以在 这里 获得本文提及所需下载的所有文件,然后按照文章中的方法逐步搭建这些库文件。

在本文章中,开发部署部分使用 64位 应用程序构建 C++/OpenGL 项目;如有需要,我们建议你同时搭建 32位/64位 两种库文件,以便灵活选择和使用。


安装开发环境

我们使用 Visual Studio 2019 作为开发环境,你可以从 微软官网 获得并下载其免费社区版。若你已经安装 Visual Studio 或其他集成开发环境,你可以跳过这一步。

在进行下一步前,确保你已经在 Visual Studio(或其他环境)中安装 使用C++的桌面开发 模块。


准备GLFW

OpenGL 实际上不负责把图像直接绘制到屏幕上,而是将图像渲染到 帧缓冲区 中。为此我们需要把缓冲区中的图像绘制到屏幕中的一个窗口上。其中一个做法是使用操作系统提供的窗口管理功能,如 Microsoft Windows API。但通常我们使用一些更实用的库,如我们将要讲到的跨平台窗口管理库 GLFW

我们需要使用窗口管理库 GLFW,为此,你需要在 GLFW网站 上下载GLFW源码;另外,你需要在 CMake网站 上下载并安装跨平台编译工具 CMake 来将GLFW源码编译为适用于当前平台的解决方案。上述下载完成后,执行以下步骤:

  1. 解压下载好的 GLFW源码 压缩包至一英文目录下;

  2. 运行 CMake

  3. Where is the source code一行输入或浏览定位到解压好的 GLFW源码 文件夹;

  4. Where to build the binaries一行输入或浏览定位到期望构建的目标文件夹;

  5. 单击configure,在新窗口中Specify the generator for this project选项中选择你所使用的编译环境;在Optional platform for generator选项中选择你期望的生成解决方案类型(默认为 x646);其余选项若无特殊需要均选择为默认,然后单击Finish;

  6. 等待片刻后,如果某些选项显示红色,再次单击configure,当底部输出框显示 Configuring done 时,单击Generate;

  7. 最后,当底部输出框显示 Generating done 时表示解决方案已构建完成,你可以在生成的目标文件中找到 GLFW.sln

  8. Visual Studio 打开,在 生成 中选择 生成解决方案 ,待生成后你可以在解决方案所在目录 src\Release 中找到 glfw3.lib

至此,我们已经得到了我们需要的两个项目:

  • 编译生成的 glfw3.lib
  • GLFW源文件include 文件夹下的两个头文件 glfw3.hglfw3native.h

准备GLEW

现代版本的 OpenGL 有许多扩展命令,为了使用每个现代命令,需要执行大量复杂的代码,使用一个 扩展库 来处理这些细节已经成为了标准做法;在这里我们使用的是跨平台扩展库 GLEW

你需要在 GLEW网站 上下载适用于 Windows 的32位二进制文件(其他系统可以在 这里 按需下载),解压文件后你可以找到以下我们需要的项目:

  • lib\Release\x647 中的 glew32.lib

  • bin\Release\x647 中的 glew32.dll

  • include\GL 中的 eglew.hglew.hglxew.hwglew.h


准备GLM

图形学编程需要接触到大量的 矢量矩阵 数据,为此使用一个 数学库 来支持常见数学计算和数据结构能极大方便 OpenGL 的使用;在这里我们使用的是只含有 C++ 头文件的数学库 GLM,当然它支持跨平台。GLM 提供了包括图形相关的 和包含 矢量矩阵四元数 等基本数学函数,同时还提供了用于构建包括 透视视角矩阵 在内的一系列工具集。

你需要在 GLM网站 上下载GLM数学库,下载并解压后,其中的 glm/glm(也就是包含一系列 .hpp 文件的文件夹)正是我们需要的项目。


准备SOIL2

在真实感图形编程中我们会用到 图像文件 用来给三维物体添加 纹理,考虑到各种各样的图片格式,使用一个 纹理加载库 可以方便我们加载图像;在这里我们使用跨平台纹理图像加载库 SOIL2

你需要在Github上的 SOIL2 项目页面下载SOIL2源码;另外,你需要在 Premake网站 上下载跨平台命令工具 Premake 来将SOIL2源码编译为适用于当前平台的解决方案;上述下载完成后,执行以下步骤:

  1. 解压下载好的 SOIL2源码 压缩包至一英文目录下;

  2. 将下载好的 premake5.exe 移动到解压好的 SOIL2源码 文件夹中;

  3. 打开 命令提示符,使用cd指令定位到 SOIL2源码 文件夹所在路径下,然后输入premake5.exe vs20198,按下回车键同时控制台输出显示以下内容;

    Building configurations...
    Running action 'vs2019'...
    Generated make/windows/SOIL2.sln...
    Generated make/windows/soil2-static-lib.vcxproj...
    Generated make/windows/soil2-shared-lib.vcxproj...
    Generated make/windows/soil2-test.vcxproj...
    Generated make/windows/soil2-test.vcxproj.filters...
    Generated make/windows/soil2-perf-test.vcxproj...
    Generated make/windows/soil2-perf-test.vcxproj.filters...
    Done (--ms).
    
  4. 正如输出内容所示,Premake 在当前文件目录中创建了 make 这一解决方案文件夹,打开 make\windows\SOIL2.sln;如果此时 Visual Studio 提示升级库,单击 确定 即可;

  5. 进入解决方案后,在 解决方案资源管理器 中右键单击 soil2-static-lib 解决方案并选择 生成

  6. 待生成后你可以在 SOIL2源码 文件夹中发现新增的 lib 文件夹,在其中你可以找到 lib\windows\soil2-debug.lib

以上步骤完成后,我们得到了我们需要的最后两个项目:

  • 编译生成的 soil2-debug.lib

  • SOIL2源码src 文件夹下的 SOIL2 文件夹,其中包含的一系列头文件正是我们需要的项目。


至此,我们所需的全部文件已经准备完毕。我们建议你接下来应当准备一个库文件夹,并将所有库文件有序地放在一起(我们给这个文件夹起一个有意义的名字,比如:OpenGLtemplate),像下面这样:

OpenGLtemplate

  • dll

    glew32.dll

  • lib

    glew32.lib

    glfw3.lib

    soil2-debug.lib

  • include

    • GL

      eglew.h

      glew.h

      glxew.h

      wglew.h

    • GLFW

      glfw3.h

      glfw3native.h

    • glm

      glm.hpp

      geometric.hpp

      exponential.hpp

    • SOIL2

      SOIL2.c

      SOIL2.h


在 Visual Studio 中开发和部署 OpenGL 项目

当我们将所需的全部库文件安装配置完毕时,我们就可以开始部署 C++/OpenGL 项目了。为此你需要在 Visual Studio 中新建一个 C++ 空项目,然后执行以下步骤:

  1. Visual Studio 中单击 项目 中的 项目属性,弹出 属性页对话框

  2. 配置 中选择 所有配置,在 平台 中选择 x649

  3. 配置属性 - VC++目录 - 常规 中编辑 包含目录,新建行并定位到 OpenGLtemplate\include 文件夹下,单击 确定

  4. 在当前页中编辑 库目录,新建行并定位到 OpenGLtemplate\lib 文件夹下,单击 确定

  5. 配置属性 - 链接器 - 输入 中编辑 附加依赖项,在其中添加以下字段:

    glfw3.lib

    glew32.lib

    soil2-debug.lib

    opengl32.lib

保存设置后,你需要将 OpenGLtemplate\dll\glew32.dll 拖入当前解决方案文件夹中;随即在 解决方案资源管理器 中单击右键选择 添加 - 新建筛选器,并将其命名为 “动态链接库”,然后将解决方案文件夹中的dll文件拖入新建的筛选器中;接下来,在 “源文件” 中添加一个空的源文件 main.cpp

接下来,在 项目 - 导出模板 中将当前项目保存为项目模板。这样一来你便能在下次创建 OpenGL 项目时直接选择使用该模板部署 C++/OpenGL 应用程序了。


参考资料:V.Scott Gordon and John Clevenger, Computer Graphics Programming in OpenGL with C++.

脚注:


  1. 本文只介绍到了一些基本的 OpenGL 扩展库,事实上还有很多有用的库可以选择,如 OBJ 模型加载库 AssimpOpenGL 实用库 GLU 等。 ↩︎

  2. 2013 年后的机器绝大部分都已支持 OpenGL 4.3。 ↩︎

  3. 建议将本文中涉及到的所有 库文件 都安装并放在同一 英文目录 文件夹下且不要轻易移动,以确保兼容、便于使用和管理;在本文中,建议如此做的文件将用 加粗下划线斜体 表示。 ↩︎

  4. 如果你想用最少的时间去搭建这些环境,这里 给出了这些准备好的库的下载链接;但我们还是建议初学的读者去亲自安装一遍;至少是在阅读本文章后再去下载整合包,这样对理解和运用这些库都有一定的帮助。 ↩︎

  5. 本文章仅以 Windows 操作系统为例,其他系统的配置步骤可能与之部分内容有出入;开发环境以 Visual Studio 2019 为例,其他编译环境属性设置页面也可能与部分内容有出入;本文只作参考。 ↩︎

  6. 若你期望构建 32位 C++/OpenGL 应用程序,在 CMake 中生成解决方案时可以选择 Win32。 ↩︎

  7. 若你期望构建 32位 C++/OpenGL 应用程序,可以改为选择 Release\Win32 中的文件。 ↩︎ ↩︎

  8. 如果你使用 vs2017,此处替换为 premake5.exe vs2017 即可,其他版本同理。 ↩︎

  9. 若你期望构建 32位 C++/OpenGL 应用程序,选择 Win32。 ↩︎

OpenGL环境搭建指南相关推荐

  1. Mac VSCode OpenGL环境搭建

    Mac VSCode OpenGL环境搭建 1.安装glfw brew install glfw 2.下载glad https://glad.dav1d.de/ 选择合适的版本后 拷贝glad文件夹到 ...

  2. 蓝鲸智云统一开发环境搭建指南

    腾讯官方的<蓝鲸智云统一开发环境搭建指南> 蓝鲸应用统一开发环境指南 一:背景 蓝鲸应用开发需要依赖django,celery,mysql-client等第三方库,而像celery又依赖其 ...

  3. linux下guide编译不了,全志R16编译环境搭建指南,全志R16_Tina SDK Quick Start Guide

    2. Tina SDK 目录结构 ├── tina │ ├── abi │ ├── app │ ├── bionic │ ├── build │ ├── device │ │ ├── softwinn ...

  4. 【教程】Windows下Miniconda+Pytorch+Pycharm开发环境搭建指南

    Windows下Miniconda+Pytorch+Pycharm开发环境搭建指南 给本科生写的新手教程,遇到很多新手的共性问题,可供大家参考.在开始阅读之前,请注意两个要关键:1.为什么要使用Con ...

  5. ARM64+树莓派4b+JLINK仿真器实验环境搭建指南

    ARM64体系结构与编程,全球原创的ARM64实验,笨叔带队,等你哟! ARM64体系结构与编程-yx音频:00:00/00:20 奔跑吧第三季视频课程实验设备清单 硬件开发平台:树莓派4B (2G或 ...

  6. OPengl学习(二)——opengl环境搭建

    文章目录 0. 概念/准备 1.VS+Opengl 快速添加 手动编译 2.QT中使用opengl 1.pro配置文件 2.引入头文件 继承QGLWidget 3.实现三个主要函数 3.引用 0. 概 ...

  7. OpenGL环境搭建:vs2013+freeglut2.8.1+glew1.7.0+gltools

    前言:之前同事说OpenGL环境贼难搭建,搭建了好多次都没成功过.恰巧最近自己也在学习OpenGL超级宝典,开发环境这块必须得支持,否则往后学习就是光看不练假把式了.于是今天特意花了一上午时间上网搜索 ...

  8. python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南

    CST微波工作室支持使用Matlab对其进行调用,但是一直以来官方没有提供python调用接口,但在最新的CST2020更新中添加了对Python3.6的调用支持,在安装路径下就已经附带了python ...

  9. OpenGL环境搭建

    GLFW GLFW是一个OpenGL的C语言库,它提供了渲染物体所需要的最低限度的接口,它允许用户创建OpenGL上下文,定义窗口参数以及用户的输入. 构建GLFW GLFW可以从它的官方网站下载,目 ...

  10. 【华为云技术分享】鲲鹏弹性云服务器GCC交叉编译环境搭建指南

    南七技校林书豪 1.简介 交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码.本指南主要内容为在非ARM架构服务器环境下搭建ARM的GCC编译环境,编译基于ARM架构的应用软件.交叉编译 ...

最新文章

  1. Windows设置共享文件夹并允许写入--windows shared folder write access
  2. highly dynamic working process is a great approach for learning
  3. erlang精要(13)-基本语法(1)
  4. 常见的加密算法 (转自: http://blog.chinaunix.net/uid-8735300-id-2017079.html 本文摘自网络 ,如有雷同 请及时联系我 谢谢)...
  5. java:区间k大数查询
  6. css预编译其器,CSS预处理器之——Less
  7. Context node attribute expand trouble shooting guide
  8. 理解Windows窗体和WPF中的跨线程调用
  9. c# 浮点数十六进制字符串_从C#中包含十六进制值的字符串数组中打印整数值...
  10. One-hot encoding 独热编码
  11. python单元测试_python单元测试
  12. C++学生信息管理系统5.0
  13. Windows下编译redis
  14. EXT4中恢复使用rm命令误删除的文件
  15. 基于LEAP模型的能源环境发展、碳排放建模预测及不确定性分析
  16. 差分进化算法_差分进化算法入门及实例应用
  17. POJ-3744 Scout YYF I 概率DP
  18. Laravel 避免 Trying to get property of non-object 错误
  19. 真爱一个人,何妨赌一生
  20. 中望3d快捷键命令大全_3d快捷键怎么设置|中望3D快捷键设置

热门文章

  1. Matlab 划分网格,三维曲面,网格划分好之后还需要提取网格上的每个点的位置坐标,之后需要用这些点的坐标进行运算。望各位大佬解惑,感激不尽
  2. Exploit-exercises
  3. C++学习系列(二)—— 核心编程(面向对象)
  4. 中职计算机应用和平面设计,中等职业教育十一五规划教材·中职中专计算机类教材系列·Photoshop平面设计与实训...
  5. 人民大学联合今目标成立企业行为研究中心
  6. 百度senta使用方法
  7. SpringCloud(part12)Spring OAuth2--案例
  8. [2021时空AI白皮书]时空人工智能:关键技术
  9. JAVA——算法训练 调和数列问题
  10. 记忆网络之Dynamic Memory Networks模型介绍及代码实现