L
O
A
D
I
N
G

攀登 OpenGL


一、Welcome to OpenGL

1.1 基本概念和特点

首先,我们需要了解一下关于 OpenGL 的一些基本概念和特点。

  1. 我们必须清楚的是 OpenGL 是一个图形 API,他支持开发者访问 GPU,并使用 GPU 进行图形绘制。
  2. OpenGL 本身只是一个规范,并不是某个开源项目,具体实现是由 GPU 的制造厂商负责的。所以,不同的 GPU 厂商之间对于 OpenGL 的实现往往会有一些差异。也正因如此,不同的 GPU 之间使用 OpenGL 实际展示的效果也往往会差异,甚至是产生不可预料的 BUG。

1.2 优势和适用场景

OpenGL 本身并不是某个平台下做得最好的图形绘制 API,但是其优势体现在:

  • OpenGL 简单易学。相对于 Direct3D(Windows 平台专用)、Vulkan(新一代 OpenGL,更底层)、Metal(苹果专用)等图形 API,OpenGL 显得相对没那么底层,所以它更加的简单。类似于流水线式的编程,也使得它更容易被学习。
  • OpenGL 是跨平台的。通常开发跨平台游戏往往会选择 OpenGL,而 OpenGL 的跨平台性也正是其受欢迎的特点。

1.3 OpenGL 现代版本

OpenGL 已经经过了很长时间的发展。过去的 GPU 厂商对开发者有较多的限制,开发者往往无法调用 GPU 一些很底层的东西。而如今,GPU 厂商开放了更多的东西,这也使得对开发者的限制更少了,我们往往能够直接使用 GPU 更多的更底层的内容。这也使得现代 OpenGL 比以往也有了很多差异,尤其是在着色器上。本文章主要介绍现代 OpenGL。

1.4 其他说明

本文章主要专注 OpenGL 本身,而不关注游戏引擎或图形引擎相关的内容。

二、Setting up OpenGL for Windows

GLUT(OpenGL Utility Toolkit)和 GLFW(Graphics Library Framework)都是用于简化 OpenGL 应用程序开发的工具库,但它们有一些区别。

GLUTGLFW
发展历史GLUT 最初由马克·基尔曼(Mark Kilgard)在 1994 年开发。其开发目的是为了简化 OpenGL 应用程序的创建和管理。GLFW 最初由凯姆·布伦顿(Camilla Berglund)在 2002 年创建。它的发展目标是提供比 GLUT 更为现代、灵活和全面的窗口和输入管理功能。
特点• GLUT 提供了一些基本的窗口管理和用户输入处理功能,使得开发者可以快速创建 OpenGL 应用程序的原型。

• 提供了创建窗口、处理输入、管理时间、处理窗口事件等功能。

• GLUT 的设计目标是简单易用,适合初学者或快速原型开发。
• GLFW 提供了更多的功能,包括多窗口支持、全屏模式、更灵活的输入处理、回调函数等。

• 支持现代图形 API(OpenGL、Vulkan、Metal 等)。

• 设计更加灵活,适合构建复杂的图形应用程序。

• 不仅适用于 OpenGL,还适用于其他图形 API。
其他• GLUT 的功能相对较为有限,不适合复杂的图形应用程序。

• 不提供直接的支持多窗口和 GUI 控件。
• GLFW 适用于更为复杂的图形应用程序和游戏开发,提供更多的控制权给开发者。

所以,GLFW 可以看作是 GLUT 的现代替代品,它在功能和设计上更为灵活,适应了现代图形编程的需求。GLFW 的发展一直在不断演进,保持对现代图形 API 和硬件的兼容性。GLUT 则相对较为简单,适合初学者或者迅速创建原型。虽然 GLUT 更适合初学者,但是这里依旧使用 GLFW 进行学习

下面介绍一下如何配置 GLFW 的项目环境:

2.1 下载 GLFW

点击这里去往👉GLFW 下载地址

这里选择 32 位 Windows 版本作为演示:

图2.1.1 32位 Windows 版本

2.2 创建 OpenGL 项目

  1. 打开 Visual Studio 2022,然后创建一个 C++ 空项目。

图2.2.1 解决方案名&项目名

  1. 右键项目名->添加新文件 app.cpp(需确保项目能运行 Hello World)。
  2. 打开 GLFW Documention 首页,将 Example code 复制到 app.cpp 文件中。
  3. 解压下载好的 GLFW Windows binaries 文件,并把下列文件复制到项目文件夹的 Dependencies 文件夹需要自己在项目文件夹 GLFW 中创建)中。

图2.2.2 需要复制的文件

现在一个 OpenGL 项目的文件结构基本准备完毕,下面演示如何配置项目:

2.3 添加 C/C++ 附加包含目录

注意:这里展示仅为相对路径,配置时一定要使用绝对路径
解决方案所在目录:...\OpenGL\
GLFW 项目所在目录:...\OpenGL\GLFW\
需要配置添加的目录:...\OpenGL\GLFW\Dependencies\include\

具体操作请见下图:

图2.3.1 添加 C/C++ 附加包含目录

2.4 添加链接器附加库目录

注意:这里展示仅为相对路径,配置时一定要使用绝对路径
解决方案所在目录:...\OpenGL\
GLFW 项目所在目录:...\OpenGL\GLFW\
需要配置添加的目录:...\OpenGL\GLFW\Dependencies\lib-vc2022\

具体操作请见下图:

图2.4.1 添加链接器附加库目录

2.5 添加链接器附加依赖项

  1. 清空“链接器—输入—附加依赖项”里的所有内容,然后先添加第一个依赖文件

图2.5.1 需要清空的内容

  1. 直接编译链接项目(按 F5,注意要以 X86 进行编译),看看 VS2022 会给出哪些错误警告。
  2. 根据编译器给出的错误警告,添加对应的链接依赖文件(如何添加请见补充内容),可以参考下面的列表。
  3. 重复步骤 2~3 直到成功运行项目即可:

错误警告依赖文件
无法解析的外部符号 __imp__glClear@4Opengl32.lib
无法解析的外部符号 __imp__TranslateMessage@4User32.lib
无法解析的外部符号 __imp__CreateDCW@16Gdi32.lib
无法解析的外部符号 __imp__DragQueryFileW@16Shell32.lib
补充

根据错误警告寻找编译链接所需要的依赖文件的办法(MSDN 文档):
步骤 1
步骤 2
步骤 3


文章作者: SeaYJ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 SeaYJ !
评论
  目录