1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 12:45:29 +08:00

校对 01/01 到 01/04

This commit is contained in:
Geequlim
2015-07-26 21:31:06 +08:00
parent 71c6e392c4
commit ed925f7f7f
5 changed files with 179 additions and 155 deletions

View File

@@ -1,18 +1,22 @@
本文作者JoeyDeVries由gjy_1992翻译自[http://learnopengl.com](http://learnopengl.com/#!Getting-started/Creating-a-window)
## 创建窗口
##创建一个窗口
原文 | [Creating a window](http://learnopengl.com/#!Getting-started/Creating-a-window)
---|---
作者 | JoeyDeVries
翻译 | gjy_1992
校对 | Geequlim
在我们画出出色的效果之前首先要做的就是创建一个OpenGL上下文和一个用于显示的窗口。然而这些操作是操作系统相关的OpenGL的目的是从这些操作中抽象出公共的部分。这意味着我们只得自己处理创建窗口定义OpenGL上下文以及处理用户输入。
在我们画出出色的效果之前首先要做的就是创建一个OpenGL上下文和一个用于显示的窗口。然而这些操作是操作系统相关的OpenGL的目的是从这些操作中抽象出公共的部分。这意味着我们不得不自己处理创建窗口定义OpenGL上下文以及处理用户输入。
幸运的是有一些库已经提供了我们所需的功能一部分是特别针对OpenGL的。这些库节省了我们书写平台相关代码的时间提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUTSDLSFML和GLFW。在我们的教程里使用GLFW。
##GLFW
### GLFW
GLFW是一个C库专门针对OpenGL提供了一些渲染物件所需的最低限度的接口。它允许用户创建OpenGL上下文定义窗口参数以及处理用户输入。
这一节和下一节的内容是建立GLFW环境并成功用它来创建窗口和OpenGL上下文。本教程会一步步从获取编译链接GLFW库讲起。我们使用Microsoft Visual Studio 2012 **IDE**集成开发环境如果你用的不是它请不要担心大多数IDE上的步骤都是类似的。Visual Studio 2012或其他版本可以从微软网站上免费下载选择express版本或community版本
这一节和下一节的内容是建立GLFW环境并成功用它来创建窗口和OpenGL上下文。本教程会一步步从获取编译链接GLFW库讲起。我们使用Microsoft Visual Studio 2012 **IDE**集成开发环境如果你用的不是它请不要担心大多数IDE上的操作都是类似的。Visual Studio 2012或其他版本可以从微软网站上免费下载选择express版本或community版本
##生成GLFW
### 生成GLFW
GLFW可以从它们网站的[下载页](http://www.glfw.org/download.html)上获取。GLFW已经有针对Visual Studio 2012/2013的预编译的二进制版本和相应的头文件但是为了完整性我们将从编译源代码开始所以需要下载**源代码包**。
@@ -22,7 +26,6 @@ GLFW可以从它们网站的[下载页](http://www.glfw.org/download.html)上获
当你下载二进制版本时请下载32位的版本而不是64位的除非你清楚你在做什么。64位版本被报告出现很多奇怪的问题。
一旦下载完了源码包,解压到某处。我们只关心里面的这些内容:
- 编译生成的库
@@ -30,7 +33,7 @@ GLFW可以从它们网站的[下载页](http://www.glfw.org/download.html)上获
从源代码编译库可以保证生成的目标代码是针对你的操作系统和CPU的而一个预编译的二进制代码并不保证总是适合。提供源代码的一个问题是不是每个人都用相同的IDE来编译因而提供的工程文件可能和一些人的IDE不兼容。所以人们只能从.cpp和.h文件来自己建立工程这是一项笨重的工作。因此诞生了一个叫做CMake的工具。
##CMake
#### CMake
CMake是一个工程文件生成工具可以使用预定义好的CMake脚本根据用户的选择生成不同IDE的工程文件。这允许我们从GLFW源码里创建一个Visual Studio 2012工程文件。首先我们需要从[这里](http://www.cmake.org/cmake/resources/software.html)下载安装CMake。我们选择Win32安装程序。
@@ -40,22 +43,22 @@ CMake是一个工程文件生成工具可以使用预定义好的CMake脚本
之后点击Configure设置按钮我们选择生成的目标平台为Visual Studio 11因为Visual Studio 2012的内部版本号是11.0。CMake会显示可选的编译选项这里我们使用默认设置再次点击Configure设置按钮保存这些设置。保存之后我们可以点击Generate生成按钮生成的工程文件就会出现在你的_build_文件夹中。
##编译
#### 编译
在_build_文件夹里可以找到GLFW.sln文件用Visual Studio 2012打开。因为CMake已经配置好了项目所以我们直接点击**生成解决方案**然后编译的结果glfw3.lib就会出现在src/Debug文件夹内。注意我们用的glfw的版本3
在_build_文件夹里可以找到GLFW.sln文件用Visual Studio 2012打开。因为CMake已经配置好了项目所以我们直接点击**生成解决方案**然后编译的结果glfw3.lib就会出现在src/Debug文件夹内。注意我们现在使用的glfw的版本h号为3.1
生成库之后我们需要让IDE知道库和include头文件的正确放置位置。有两种方法去做这件事:
生成库之后我们需要让IDE知道库和头文件的正确放置位置。有两种方法去做这件事
1. 找到IDE/**Compiler**(编译器)的/lib和/include文件夹然后把glfw3.lib所在目录和include文件夹复制进去。这不是推荐的方式因为很难去追踪library/include文件夹而且重新安装IDE/Compiler可能会导致文件丢失。
2. 推荐的方式是建立一个新的目录包含所有的第三方库文件和头文件并且在你的IDE/Compiler中指定这些文件夹。我个人使用一个单独的文件夹包含Libs和Include文件夹在这里存放OpenGL工程用到的所有第三方库和头文件。这样我的所有第三方库都在同一个路径并且应该在你的多台电脑间共享然而要求是每次新建一个工程我们都需要告诉IDE/Compiler这些目录是什么。
完成上面步骤后我们就可以使用GLFW创建我们的第一个OpenGL工程了
##我们的第一个工程
### 我们的第一个工程
现在让我们打开Visual Studio创建一个新的工程。如果提供了多个选项选择Visual C++,然后选择**空工程**Empty Project别忘了给你的工程起一个合适的名字。现在我们有了一个空的工程去创建我们的OpenGL程序。
##链接
### 链接
为了使我们的程序使用GLFW我们需要把GLFW库链接进工程。于是我们需要在链接器的设置里写上glfw3.lib。但是我们的工程还不知道在哪寻找这个文件于是我们首先需要将我们放第三方库的目录添加进设置。
@@ -75,13 +78,13 @@ CMake是一个工程文件生成工具可以使用预定义好的CMake脚本
要链接一个库必须指定它的文件名。于是我们在Additional Dependencies域添加这个文件。这样GLFW就会被链接进我们的工程。除了GLFW根据系统的不同可能还要链接OpenGL库。
###Windows上的OpenGL库
### Windows上的OpenGL库
如果你是Windows平台opengl32.lib已经随着Microsoft SDK装进了Visual Studio的默认目录所以Windows上我们只需将opengl32.lib添加进Additional Dependencies。
###Linux上的OpenGL库
### Linux上的OpenGL库
在Linux下你需要链接libGl.so所以要添加-lGL到你的链接器设置里。如果找不到这个库你可能需要安装MesaNVidia 或AMD的开发包这部分因平台而异就不仔细讲解了。
在Linux下你需要链接libGl.so所以要添加-lGL到你的链接器设置里。如果找不到这个库你可能需要安装MesaNVidia或AMD的开发包这部分因平台而异就不仔细讲解了。
现在如果你添加好了GLFW和OpenGL库你可以用如下方式添加GLFW头文件
@@ -91,7 +94,7 @@ CMake是一个工程文件生成工具可以使用预定义好的CMake脚本
这个头文件包含了GLFW的设置。
##GLEW
### GLEW
到这里我们仍然有一件事要做。OpenGL只是一个规范具体的实现由显卡生产商提供。由于显卡驱动版本众多大多数函数都无法在编译时确定下来需要在运行时获取。开发者需要运行时获取函数地址并保存下来供以后使用。取得地址的方法因平台而异Windows下看起来类似这样
@@ -107,7 +110,7 @@ glGenBuffers(1, &buffer);
你可以看到代码复杂而笨重因为我们对于每个函数都必须这样。幸运的是有一个针对此目的的库GLEW是目前最流行的做这件事的方式。
###编译和链接GLEW
### 编译和链接GLEW
GLEW代表OpenGL Extension Wrangler Library管理我们上面提到的繁琐的任务。因为GLEW也是一个库我们同样需要链接进工程。GLEW可以从[这里](http://glew.sourceforge.net/index.html)下载你可以选择下载二进制版本或者下载源码编译。记住优先选择32位的二进制版本。
@@ -123,20 +126,17 @@ GLEW代表OpenGL Extension Wrangler Library管理我们上面提到的繁琐
如果你希望静态链接GLEW必须在包含GLEW头文件之前定义预编译宏GLEW\_STATIC
```c++
#define GLEW_STATIC
#include <GL/glew.h>
#define GLEW_STATIC
#include <GL/glew.h>
```
如果你希望动态链接那么不要定义这个宏。几乎动态链接的话你需要拷贝一份dll文件到你的应用程序目录。
如果你希望动态链接那么不要定义这个宏。但是使用动态链接的话你需要拷贝一份dll文件到你的应用程序目录。
!!! Important
对于Linux用户建议使用这个命令行`-lGLEW -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi`。没有正确链接相应的库会产生*undefined reference* errors.(未定义的引用)
我们现在成功编译了GLFW和GLEW库我们将进入[下一节](http://www.learnopengl.com/#!Getting-Started/Hello-Window)第一章第三节去使用GLFW和GLEW来设置OpenGL上下文并创建窗口。记住确保你的头文件和库文件的目录设置正确以及链接器里引用的库文件名正确。如果仍然遇到错误请参考额外资源中的例子。
我们现在成功编译了GLFW和GLEW库我们将进入[下一节](http://learnopengl-cn.readthedocs.org/zh/latest/01%20Getting%20started/03%20Hello%20Window/)去使用GLFW和GLEW来设置OpenGL上下文并创建窗口。记住确保你的头文件和库文件的目录设置正确以及链接器里引用的库文件名正确。如果仍然遇到错误请参考额外资源中的例子。
##额外的资源