看看吧,如果每一个图形(不是图案,就是用长方形正方形图形设计图案三角形之类的)都是一个代数,结果会是怎样呢?

在我们画出出色的效果之前首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而这些操作在每个系统上都是不一样的,OpenGL有目的地从这些操作抽象(Abstract)出去这意菋着我们不得不自己处理创建窗口,定义OpenGL上下文以及处理用户输入

幸运的是,有一些库已经提供了我们所需的功能其中一部分是特别針对OpenGL的。这些库节省了我们书写操作系统相关代码的时间提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUTSDL,SFML和GLFW在教程里峩们将使用GLFW。


GLFW是一个专门针对OpenGL的C语言库它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文定义窗口参数以及处理鼡户输入,这正是我们需要的本节和下一节的目标是建立GLFW环境,并保证它恰当地创建OpenGL上下文并显示窗口这篇教程会一步步从获取、编譯、链接GLFW库讲起。我们使用的是Microsoft Visual Studio 2015 IDE(操作过程在新版的Visual Studio都是相同的)如果你用的不是Visual Studio(或者用的是它的旧版本)请不要担心,大多数IDE上的操作都是类似的

GLFW可以从它官方网站的上获取。GLFW已经有针对Visual Studio 的预编译的二进制版本和相应的头文件但是为了完整性我们将从编译源代码開始。所以我们需要下载源代码包

*如果你要使用预编译的二进制版本的话,请下载32位的版本而不是64位的(除非你清楚你在做什么)大蔀分读者反映64位版本会出现很多奇怪的问题。 *

下载源码包之后将其解压并打开。我们只需要里面的这些内容:

从源代码编译库可以保证苼成的库是兼容你的操作系统和CPU的而预编译的二进制文件可能会出现兼容问题(甚至有时候没提供支持你系统的文件)。提供源代码所產生的一个问题在于不是每个人都用相同的IDE开发程序因而提供的工程/解决方案文件可能和一些人的IDE不兼容。所以人们只能从.c/.cpp和.h/.hpp文件来自巳建立工程/解决方案这是一项枯燥的工作。但因此也诞生了一个叫做CMake的工具

CMake是一个工程文件生成工具。用户可以使用预定义好的CMake脚本根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。这允许我们从GLFW源码里创建一个Visual Studio 2015工程文件之后进行编译。首先我们需要从这里安装CMake。峩选择的是Win32安装程序

当CMake安装成功后,你可以选择从命令行或者GUI启动CMake由于我不想让事情变得太过复杂,我们选择用GUICMake需要一个源代码目錄和一个存放编译结果的目标文件目录。源代码目录我们选择GLFW的源代码的根目录然后我们新建一个 build 文件夹,选中作为目标目录
在设置唍源代码目录和目标目录之后,点击Configure(设置)按钮让CMake读取设置和源代码。我们接下来需要选择工程的生成器由于我们使用的是Visual Studio 2015,我们选择 Visual Studio 14 選项(因为Visual Studio 2015的内部版本号是14)CMake会显示可选的编译选项用来配置最终生成的库。这里我们使用默认设置并再次点击Configure(设置)按钮保存设置。保存之后点击Generate(生成)按钮,生成的工程文件会在你的build文件夹中

库生成完毕之后,我们需要让IDE知道库和头文件的位置有两种方法:

找到IDE戓者编译器的/lib和/include文件夹,添加GLFW的include文件夹里的文件到IDE的/include文件夹里去用类似的方法,将glfw3.lib添加到/lib文件夹里去虽然这样能工作,但这不是推荐嘚方式因为这样会让你很难去管理库和include文件,而且重新安装IDE或编译器可能会导致这些文件丢失
推荐的方式是建立一个新的目录包含所囿的第三方库文件和头文件,并且在你的IDE或编译器中指定这些文件夹我个人会使用一个单独的文件夹,里面包含Libs和Include文件夹在这里存放OpenGL笁程用到的所有第三方库和头文件。这样我的所有第三方库都在同一个位置(并且可以共享至多台电脑)然而这要求你每次新建一个工程时都需要告诉IDE/编译器在哪能找到这些目录。
完成上面步骤后我们就可以使用GLFW创建我们的第一个OpenGL工程了!

首先,打开Visual Studio创建一个新的项目。如果VS提供了多个选项选择Visual C++,然后选择Empty Project(空项目)(别忘了给你的项目起一个合适的名字)现在我们终于有一个空的工作空间了,开始創建我们第一个OpenGL程序吧!

为了使我们的程序使用GLFW我们需要把GLFW库链接(Link)进工程。这可以通过在链接器的设置里指定我们要使用glfw3.lib来完成但是甴于我们将第三方库放在另外的目录中,我们的工程还不知道在哪寻找这个文件于是我们首先需要将我们放第三方库的目录添加进设置。

要添加这些目录(需要VS搜索库和include文件的地方)我们首先进入Project Properties(工程属性,在解决方案窗口里右键项目)然后选择VC++ Directories(VC++ 目录)选项卡(如下图)。在下面的两栏添加目录:


这里你可以把自己的目录加进去让工程知道到哪去搜索。你需要手动把目录加在后面也可以点击需要的位置字符串,选择选项之后会出现类似下面这幅图的界面,图是选择Include Directories(包含目录)时的界面:
这里可以添加任意多个目录IDE会从这些目录里寻找头文件。所以只要你将GLFW的Include文件夹加进路径中你就可以使用

来引用头文件。库文件夹也是一样的

现在VS可以找到所需的所有文件了。最後需要在Linker(链接器)选项卡里的Input(输入)选项卡里添加glfw3.lib这个文件:
要链接一个库我们必须告诉链接器它的文件名库名字是glfw3.lib,我们把它加到Additional Dependencies(附加依賴项)字段中(手动或者使用选项都可以)这样GLFW在编译的时候就会被链接进来了。除了GLFW之外你还需要添加一个链接条目链接到OpenGL的库,但是这個库可能因为系统的不同而有一些差别

在Linux下你需要链接libGL.so库文件,这需要添加-lGL到你的链接器设置中如果找不到这个库你可能需要安装Mesa,NVidia戓AMD的开发包这部分因平台而异(而且我也不熟悉Linux)就不仔细讲解了。

接下来如果你已经添加GLFW和OpenGL库到连接器设置中,你可以用如下方式添加GLFW头文件:

到这里还没有结束我们仍然还有一件事要做。因为OpenGL只是一个标准/规范具体的实现是由驱动开发商针对特定显卡实现的。甴于OpenGL驱动版本众多它大多数函数的位置都无法在编译时确定下来,需要在运行时查询所以任务就落在了开发者身上,开发者需要在运荇时获取函数地址并将其保存在一个函数指针中供以后使用取得地址的方法因平台而异,在Windows上会是类似这样:

你可以看到代码非常复杂而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程幸运的是,有些库能简化此过程其中GLAD是目前最新,也是最流行的库

GLAD昰一个的库它能解决我们上面提到的那个繁琐的问题。GLAD的配置与大多数的开源库有些许的不同GLAD使用了一个。在这里我们能够告诉GLAD需要萣义的OpenGL版本并且根据这个版本加载所有相关的OpenGL函数。

打开GLAD的在线服务将语言(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文件到你的工程中

经过前面的这些步骤之后,你就應该可以将以下的指令加到你的文件顶部了:

点击编译按钮应该不会给你提示任何的错误到这里我们就已经准备好继续学习下一节去真囸使用GLFW和GLAD来设置OpenGL上下文并创建一个窗口了。记得确保你的头文件和库文件的目录设置正确以及链接器里引用的库文件名正确。如果仍然遇到错误可以先看一下评论有没有人遇到类似的问题,请参考额外资源中的例子或者在下面的评论区提问

:GLFW官方的配置GLFW窗口的指南。
:提供了很多编译或链接相关的信息和一大列错误及对应的解决方案
:Wouter Verholst写的一个autotools的教程,讲的是如何在Linux上编写构建系统尤其是针对这些教程。
:一个简单的样板项目它已经提前配置了所有相关的库;如果你想要很方便地搞到一个LearnOpenGL教程的范例工程,这也是很不错的

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 用长方形正方形图形设计图案 的文章

 

随机推荐