1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-22 20:25:28 +08:00

Merge pull request #219 from Sefank/patch-1

同步原文更新第1章第2节
This commit is contained in:
Gary Wang
2022-02-21 00:15:22 +08:00
committed by GitHub
7 changed files with 18 additions and 16 deletions

View File

@@ -10,47 +10,45 @@
注意由于作者对教程做出了更新之前本节使用的是GLEW库但现在改为了使用GLAD库关于GLEW配置的部分现在已经被修改但我仍决定将这部分教程保留起来放到一个历史存档中如果有需要的话可以到[这里](../legacy.md)来查看。 注意由于作者对教程做出了更新之前本节使用的是GLEW库但现在改为了使用GLAD库关于GLEW配置的部分现在已经被修改但我仍决定将这部分教程保留起来放到一个历史存档中如果有需要的话可以到[这里](../legacy.md)来查看。
在我们画出出色的效果之前首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而这些操作在每个系统上都是不一样的OpenGL有目的地将这些操作抽象(Abstract)出去。这意味着我们不得不自己处理创建窗口定义OpenGL上下文以及处理用户输入。 在我们画出出色的效果之前首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而这些操作在每个系统上都是不一样的OpenGL有将这些操作抽象(Abstract)出去。这意味着我们不得不自己处理创建窗口定义OpenGL上下文以及处理用户输入。
幸运的是有一些库已经提供了我们所需的功能其中一部分是特别针对OpenGL的。这些库节省了我们书写操作系统相关代码的时间提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUTSDLSFML和GLFW。在教程里我们将使用**GLFW**。 幸运的是有一些库已经提供了我们所需的功能其中一部分是特别针对OpenGL的。这些库节省了我们书写操作系统相关代码的时间提供给我们一个窗口和一个OpenGL上下文用来渲染。最流行的几个库有GLUTSDLSFML和GLFW。在教程里我们将使用**GLFW**。你可以随意选用其他类似的库大多数库的配置方法和GLFW差不多。
## GLFW ## GLFW
GLFW是一个专门针对OpenGL的C语言库它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文定义窗口参数以及处理用户输入,这正是我们需要的 GLFW是一个专门针对OpenGL的C语言库它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文定义窗口参数以及处理用户输入,对我们来说这就够了
<img alt="GLFW Logo" src="../../img/01/02/glfw.png" class="right" /> 本节和下一节的目标是把GLFW环境配好能且能够跑起来并保证它正确创建了OpenGL上下文并显示出一个简单的窗口来让我们随意使用。这篇教程会一步步教你如何获取、编译、链接GLFW库。我们使用的是Microsoft Visual Studio 2019 IDE操作过程在更新的Visual Studio都是相同的。如果你用的不是Visual Studio或者用的是它的旧版本请不要担心大多数IDE上的操作都是类似的。
本节和下一节的目标是建立GLFW环境并保证它恰当地创建OpenGL上下文并显示窗口。这篇教程会一步步从获取、编译、链接GLFW库讲起。我们使用的是Microsoft Visual Studio 2015 IDE操作过程在新版的Visual Studio都是相同的。如果你用的不是Visual Studio或者用的是它的旧版本请不要担心大多数IDE上的操作都是类似的。
## 构建GLFW ## 构建GLFW
GLFW可以从它官方网站的[下载页](http://www.glfw.org/download.html)上获取。GLFW已经有针对Visual Studio 2013/2015的预编译的二进制版本和相应的头文件,但是为了完整性我们将从编译源代码开始。所以我们需要下载**源代码包**。 GLFW可以从它官方网站的[下载页](http://www.glfw.org/download.html)上获取。GLFW已提供为Visual Studio2012到2019都有预编译的二进制版本和相应的头文件,但是为了完整性我们将从编译源代码开始。所以我们需要下载**源代码包**。
!!! Attention !!! Attention
如果你要使用预编译的二进制版本的话请下载32位的版本而不是64位的除非你清楚你在做什么。大部分读者反映64位版本会出现很多奇怪的问题 本教程中我们将采用64位构建所有的库。因此如果您使用的是预编译的二进制文件请确保你下载的是64位的二进制文件
下载源码包之后,将其解压并打开。我们只需要里面的这些内容: 下载源码包之后,将其解压并打开。我们只需要里面的这些内容:
- 编译生成的库 - 编译生成的库
- **include**文件夹 - **include**文件夹
从源代码编译库可以保证生成的库是兼容你的操作系统和CPU的而预编译的二进制文件可能会出现兼容问题(甚至有时候没提供支持你系统的文件)。提供源代码所产生的一个问题在于不是每个人都用相同的IDE开发程序,因而提供的工程/解决方案文件可能和一些人的IDE不兼容。所以人们只能从.c/.cpp和.h/.hpp文件来自己建立工程/解决方案这是一项枯燥的工作。但因此也诞生了一个叫做CMake的工具。 从源代码编译库可以保证生成的库完全适合你的操作系统和CPU的而预编译的二进制文件则并非总是提供(有时候,即便提供了预编译的二进制文件,也可能不适用于您的系统)。开放源代码所产生问题在于:并不是每个人都用相同的IDE或者构建系统来搞开发,因而提供的项目/解决方案文件可能和一些人的IDE不兼容。所以人们必须使用给定的.c/.cpp和.h/.hpp文件来自己建立项目/解决方案,这是一项枯燥的工作。但因此也诞生了一个叫做CMake的工具。
### CMake ### CMake
CMake是一个工程文件生成工具。用户可以使用预定义好的CMake脚本根据自己的选择像是Visual Studio, Code::Blocks, Eclipse生成不同IDE的工程文件。这允许我们从GLFW源码创建一个Visual Studio 2015工程文件,之后进行编译。首先,我们需要从[这里](http://www.cmake.org/cmake/resources/software.html)下载安装CMake。我选择的是Win32安装程序。 CMake是一个工程文件生成工具。用户可以使用预定义好的CMake脚本根据自己的选择像是Visual Studio, Code::Blocks, Eclipse生成不同IDE的工程文件。这允许我们从GLFW源码创建一个Visual Studio 2019工程文件,之后进行编译。首先,我们需要从[这里](http://www.cmake.org/cmake/resources/software.html)下载安装CMake。
当CMake安装成功后你可以选择从命令行或者GUI启动CMake由于我不想让事情变得太过复杂我们选择用GUI。CMake需要一个源代码目录和一个存放编译结果的目标文件目录。源代码目录我们选择GLFW的源代码的根目录然后我们新建一个 *build* 文件夹,选中作为目标目录。 当CMake安装成功后你可以选择从命令行或者GUI启动CMake由于我不想让事情变得太过复杂我们选择用GUI。CMake需要一个源代码目录和一个存放编译结果的目标文件目录。源代码目录我们选择GLFW的源代码的根目录然后我们新建一个 *build* 文件夹,选中作为目标目录。
![](../img/01/02/cmake.png) ![](../img/01/02/cmake.png)
在设置完源代码目录和目标目录之后,点击**Configure(设置)**按钮让CMake读取设置和源代码。我们接下来需要选择工程的生成器由于我们使用的是Visual Studio 2015,我们选择 **Visual Studio 14** 选项因为Visual Studio 2015的内部版本号是14。CMake会显示可选的编译选项用来配置最终生成的库。这里我们使用默认设置并再次点击**Configure(设置)**按钮保存设置。保存之后,点击**Generate(生成)**按钮,生成的工程文件会在你的**build**文件夹中。 在设置完源代码目录和目标目录之后,点击**Configure(设置)**按钮让CMake读取设置和源代码。我们接下来需要选择工程的生成器由于我们使用的是Visual Studio 2019,我们选择 **Visual Studio 16** 选项因为Visual Studio 2019的内部版本号是16。CMake会显示可选的编译选项用来配置最终生成的库。这里我们使用默认设置并再次点击**Configure(设置)**按钮保存设置。保存之后,点击**Generate(生成)**按钮,生成的工程文件会在你的**build**文件夹中。
### 编译 ### 编译
在**build**文件夹里可以找到**GLFW.sln**文件用Visual Studio 2015打开。因为CMake已经配置好了项目所以我们直接点击**Build Solution(生成解决方案)**按钮,然后编译的库**glfw3.lib**注意我们用的是第3版就会出现在**src/Debug**文件夹内 在**build**文件夹里可以找到**GLFW.sln**文件用Visual Studio 2019打开。因为CMake已经配置好了项目并按照默认配置将其编译为64位的库所以我们直接点击**Build Solution(生成解决方案)**按钮,然后在**build/src/Debug**文件夹内就会出现我们编译出的库文件**glfw3.lib**
库生成完毕之后我们需要让IDE知道库和头文件的位置。有两种方法 库生成完毕之后我们需要让IDE知道库和头文件的位置。有两种方法
@@ -61,7 +59,11 @@ CMake是一个工程文件生成工具。用户可以使用预定义好的CMake
## 我们的第一个工程 ## 我们的第一个工程
首先打开Visual Studio创建一个新的项目。如果VS提供了多个选项选择Visual C++,然后选择**Empty Project(空项目)**(别忘了给你的项目起一个合适的名字)。现在我们终于有一个空的工作空间了开始创建我们第一个OpenGL程序吧 首先打开Visual Studio创建一个新的项目。如果VS提供了多个选项选择Visual C++,然后选择**Empty Project(空项目)**(别忘了给你的项目起一个合适的名字)。由于我们将在64位模式中执行所有操作而新项目默认是32位的因此我们需要将Debug旁边顶部的下拉列表从x86更改为x64
![](../img/01/02/x64.png)
现在我们终于有一个空的工作空间了开始创建我们第一个OpenGL程序吧
## 链接 ## 链接
@@ -85,7 +87,7 @@ CMake是一个工程文件生成工具。用户可以使用预定义好的CMake
### Windows上的OpenGL库 ### Windows上的OpenGL库
如果你是Windows平台**opengl32.lib**已经包含在Microsoft SDK里了它在Visual Studio安装的时候就默认安装了。由于这篇教程用的是VS编译器并且是在Windows操作系统上我们只需将**opengl32.lib**添加进连接器设置里就行了。 如果你是Windows平台**opengl32.lib**已经包含在Microsoft SDK里了它在Visual Studio安装的时候就默认安装了。由于这篇教程用的是VS编译器并且是在Windows操作系统上我们只需将**opengl32.lib**添加进连接器设置里就行了。值得注意的是OpenGL库64位版本的文件名仍然是**opengl32.lib**和32位版本一样虽然很奇怪但确实如此。
### Linux上的OpenGL库 ### Linux上的OpenGL库
@@ -123,7 +125,7 @@ glGenBuffers(1, &buffer);
GLAD是一个[开源](https://github.com/Dav1dde/glad)的库它能解决我们上面提到的那个繁琐的问题。GLAD的配置与大多数的开源库有些许的不同GLAD使用了一个[在线服务](http://glad.dav1d.de/)。在这里我们能够告诉GLAD需要定义的OpenGL版本并且根据这个版本加载所有相关的OpenGL函数。 GLAD是一个[开源](https://github.com/Dav1dde/glad)的库它能解决我们上面提到的那个繁琐的问题。GLAD的配置与大多数的开源库有些许的不同GLAD使用了一个[在线服务](http://glad.dav1d.de/)。在这里我们能够告诉GLAD需要定义的OpenGL版本并且根据这个版本加载所有相关的OpenGL函数。
打开GLAD的[在线服务](http://glad.dav1d.de/),将语言(Language)设置为**C/C++**在API选项中选择**3.3**以上的OpenGL(gl)版本我们的教程中将使用3.3版本,但更新的版本也能正常工作)。之后将模式(Profile)设置为**Core**,并且保证**生成加载器**(Generate a loader)选项是选中的。现在可以先(暂时)忽略展(Extensions)中的内容。都选择完之后,点击**生成**(Generate)按钮来生成库文件。 打开GLAD的[在线服务](http://glad.dav1d.de/),将语言(Language)设置为**C/C++**在API选项中选择**3.3**以上的OpenGL(gl)版本我们的教程中将使用3.3版本,但更新的版本也能)。之后将模式(Profile)设置为**Core**,并且保证选中了**生成加载器**(Generate a loader)选项。现在可以先(暂时)忽略展(Extensions)中的内容。都选择完之后,点击**生成**(Generate)按钮来生成库文件。
GLAD现在应该提供给你了一个zip压缩文件包含两个头文件目录和一个**glad.c**文件。将两个头文件目录(**glad**和**KHR**)复制到你的**Include**文件夹中(或者增加一个额外的项目指向这些目录),并添加**glad.c**文件到你的工程中。 GLAD现在应该提供给你了一个zip压缩文件包含两个头文件目录和一个**glad.c**文件。将两个头文件目录(**glad**和**KHR**)复制到你的**Include**文件夹中(或者增加一个额外的项目指向这些目录),并添加**glad.c**文件到你的工程中。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 34 KiB

BIN
docs/img/01/02/x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB