文章目录
- 1. 准备工作
- 1.1 查看OpenGL版本
- 1.2 Windows上的OpenGL库
- 1.3 建一个文件夹OpenGL
- 1.4 创建一个新项目OpenGLMFCTest
- 2. GLFW
- 2.1 下载和配置
- 2.2 验证
- 3. GLAD
- 3.1 下载和配置
- 3.2 验证
- 4. GLM
- 4.1 下载和配置
- 4.2 验证
- 5. GLUT
- 5.1 下载和配置
- 5.2 验证
- 6. GLEW
- 6.1 下载和配置
- 6.2 验证
- 7. 实例演示
- Debug+x64版
- Release+x64版
最近需要在MFC上面画3维图,记录一下配置OpenGL库的过程。
系统:Win10 64位 VS: 2019版本
1. 准备工作
1.1 查看OpenGL版本
如果想要查看OpenGL版本的话,在Windows上使用工具OpenGL Extension Viewer。
1.2 Windows上的OpenGL库
如果你是Windows平台,opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了,查看一下你的OpenGL32.lib文件的位置。
1.3 建一个文件夹OpenGL
在自己的电脑上建一个文件夹OpenGL,在openGL文件夹中新建两个文件夹include和libs。用于存放使用的openGL库的头文件和lib文件。
1.4 创建一个新项目OpenGLMFCTest
打开Visual Studio,创建一个新的项目。
2. GLFW
2.1 下载和配置
GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。
GLFW可以从它官方网站的下载页上获取。
下载的网站:GLFW
GLFW已经有针对Visual Studio 2010+的预编译的二进制版本和相应的头文件。
此处下载64位的版本。
打开下载的文件:
我使用的是VS2019,所以使用的是lib文件是lib-vc2019和头文件include。打开include文件夹,看到一个叫做GLFW的文件夹,将此文件夹拷贝到自己创建的OpenGL的include文件中。
打开lib-vc2019文件夹,发现有3个文件。将glfw3dll.lib和glfw3.lib文件拷贝到自己创建的OpenGL的libs文件中。
为了完整性,还可以采用Cmake从编译源代码开始。有需要的自己尝试。
2.2 验证
为了使程序使用GLFW,需要把GLFW库链接(Link)进工程。这可以通过在链接器的设置里指定我们要使用glfw3.lib来完成,但是由于我们将第三方库放在另外的目录中,我们的工程还不知道在哪寻找这个文件。于是我们首先需要将我们放第三方库的目录添加进设置。
在包含目录中指定GLFW的include位置。把自己的目录加进去,让工程知道到哪去搜索。需要手动把目录加在后面,也可以点击需要的位置字符串,IDE会从这些目录里寻找头文件。
同样,将使用的库目录添加到库目录的位置:
最后需要在Linker(链接器)选项卡里的Input(输入)选项卡里添加库文件中的lib文件:
要链接一个库我们必须告诉链接器它的文件名。库名字是glfw3.lib,我们把它加到附加依赖项字段中。这样GLFW在编译的时候就会被链接进来了。除了GLFW之外,你还需要添加一个链接条目链接到OpenGL的库,但是这个库可能因为系统的不同而有一些差别。
除了GLFW之外,还需要添加一个链接条目链接到OpenGL的库,但是这个库可能因为系统的不同而有一些差别。 我的电脑上的OpenGL的库链接位置:
接下来,如果你已经添加GLFW和OpenGL库到连接器设置中,在项目OpenGLMFCTest的OpenGLMFCTestDlg.h中添加GLFW头文件:
#include <GLFW\glfw3.h>
<GLFW\glfw3.h>就是在我们链接的include目录下的GLFW目录下的glfw3.h。
发现正常运行,说明成功。
3. GLAD
因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。
GLAD的配置与大多数的开源库有些许的不同,GLAD使用了一个在线服务。在这里我们能够告诉GLAD需要定义的OpenGL版本,并且根据这个版本加载所有相关的OpenGL函数。
3.1 下载和配置
打开GLAD的在线服务,将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(可以查询自己显卡支持的OpenGL版本)。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。现在可以先(暂时)忽略拓展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。
GLAD现在应该提供一个zip压缩文件,点击下载该文件:
打开下载的压缩包文件,包含两个头文件目录,和一个glad.c文件。
将两个头文件目录(glad和KHR)复制到自己创建的OpenGL的include文件夹中,将glad.c拷贝到自己创建的OpenGL中。
并添加glad.c文件到你的工程中。
3.2 验证
由于刚刚项目的include目录已经指定目录地址:
所以此处只需要将需要加载的头文件放到自己创建的OpenGL的include文件夹中即可,即按照上面的步骤。
此外,将glad.c拷贝到创建的项目的源文件下:
接下来,在项目OpenGLMFCTest的OpenGLMFCTestDlg.h中添加glad头文件:
#include<glad\glad.h>
🖤🖤🖤一定要将#include<glad\glad.h>放到#include <GLFW\glfw3.h>前面,否则回出现错误:#error 指令: OpenGL header already included, remove this include, glad already provides it OpenGLMFCTest
4. GLM
OpenGL没有自带任何的矩阵和向量知识,所以我们必须定义自己的数学类和函数。我们更希望抽象所有的数学细节,使用已经做好了的数学库。幸运的是,有个易于使用,专门为OpenGL量身定做的数学库,那就是GLM。GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。GLM可以在它们的网站上下载。把头文件的根目录复制到你的includes文件夹,然后你就可以使用这个库了。
4.1 下载和配置
下载的网址为:OpenGL Mathematics
解压后进入glm-0.9.9.7\glm\glm:
将glm目录拷贝到自己创建的OpenGL的include文件夹:
4.2 验证
接下来,在项目OpenGLMFCTest的OpenGLMFCTestDlg.h中添加头文件:
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
5. GLUT
GLUT代表OpenGL应用工具包,英文全称为OpenGL Utility Toolkit,是一个和窗口系统无关的软件包,它由Mark Kilgard在SGI时写的。作为AUX库的功能更强大的替代品,用于隐藏不同窗口系统API的复杂性。 GLUT是专为构建中小型OpenGL程序。虽然GLUT是适合学习OpenGL和开发简单的OpenGL应用程序。GLUT并不是一个功能全面的工具包所以大型应用程序需要复杂的用户界面最好使用本机窗口系统工具包。所以GLUT是简单的、容易的、小的。 GLUT的两个主要目的是建立一个跨平台的函式库(事实上GLUT就是跨平台的),以及简化学习OpenGL的条件。透过GLUT编写OpenGL通常只需要增加几行额外GLUT的程式码,而且不需要知道每个不同操作系统处理视窗的API。所有的GLUT函数都以glut作为开头,例如glutPostRedisplay()。
glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨平台性,所以我们可以尽量的使用glut库。有了glut省事不少,不用去管烦琐的窗口创建,消息循环。
为了用GLUT写程序,你需要有三个文件:
- glut.h——这个头文件是要包含到你的代码里的去的。一般把这个文件放到include/gl文件夹里。
- glut.lib和glut32.lib(glut.lib是SGI的,glut32.lib是Microsoft的。好像就是看你用的什么操作系统了。一般down的这两个文件都有)这个文件必须连接到你的程序。所以必须放在lib文件夹里。
- glut32.dll(windows)和glut.dll(SGI)——这个文件必须放在system32文件夹里。
5.1 下载和配置
这里是引用 下载glut库:Glut
将下载的glut库解压缩得到文件夹:
将glut.dll、glut32.dll、glut64.dll放入C:\Windows\SysWOW64文件夹:
同时也将glut.dll、glut32.dll、glut64.dll放入C:\Windows\System32文件夹
将glut.h拷贝到自己创建的include文件中:
我从网上下载的有基于64位的glut64.lib。
将glut.lib、glut32.lib和glut64.lib拷贝到自己创建的lib文件中:
5.2 验证
将glut的链接添加到附加依赖项中:
接下来,在项目OpenGLMFCTest的OpenGLMFCTestDlg.h中添加头文件:
#include<glut.h>
6. GLEW
GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的函数,但 OpenGL现在都发展到2.0以上了,要使用这些OpenGL的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。GLEW支持目前流行的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。
6.1 下载和配置
下载地址:GLEW
下载后解压:
打开include文件可看到GL文件夹,将其拷贝到自己创建的OpenGL下的include中:
将lib文件夹中Release下的x64的内容拷贝到自己创建的OpenGL下的lib中:
6.2 验证
项目中导入include和lib文件和依赖包,但是已经导入了lib和include内容,所以只需要添加依赖:
导入头文件:
#include<GL/glew.h>
7. 实例演示
上面的项目中添加一个画3维茶壶的代码:
Debug+x64版
只需要在属性页中添加库目录和头文件目录的位置,并添加依赖项就可以:
演示结果:
Release+x64版
使用Release,x64版本:用样只需要在属性页中添加库目录和头文件目录的位置,并添加依赖项就可以:
以后新建项目,只需要导入刚刚创建的OpenGL中的include和lib文件即可。在添加自己需要的依赖文件即可。
提供自己的OpenGL包,可下载使用:基于VS2019——OpenGL所需库的配置.rar
- OpenGL的include中包含所有的头文件、lib包括所有的需要使用的库文件。
- 文件中OpenGLMFCTest是一个基于MFC的画3D茶壶的实例。在实例中导入OpenGL的include、lib并添加依赖性即可使用。
- OpenGL使用的库包含所有的GLFW、GLAD、GLM、GL、GLEW。同时包含查询自己电脑OpenGL版本号的软件