在画出出色的效果前,要创建一个OpenGL上下文(Context)和一个用于显示的窗口
流行库:GLUT
、SDL
、SFML
、GLFW
GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入。
GLFW源代码,需要下载源代码包。
源代码包中资料:
编译生成的库
include文件夹
从源代码编译可以保证生成的库是兼容当前操作系统和CPU的,而预编译的二进制文件可能会出现兼容问题。
CMake是一个工程文件生成工具。用户可以根据使用预定义好的CMake脚本,根据自己的选择生成不同的IDE的工程文件。
CMake安装程序,选择下载Win32程序。
当CMake安装成功后,可以选择从命令行或者GUI启动,CMake需要一个源代码目录和一个存放编译结果的目标文件目录。源代码目录选择GLFW源代码目录,新建一个build文件夹,作为目标目录。
在设置完源代码目录和目标目录之后,点击Configure(设置)按钮,让CMake读取设置和源代码,然后选择Visual Studio 14选项,CMake会显示可选的编译选项来配置最终生成的库,并在此点击Configure(设置)按钮保存配置,然后点击Generate(生成)按钮,生成的工程文件会在你的build文件夹中。
在build文件夹中找到GLFW.sln文件,用Visual Studio 2015打开。CMake已经配置好项目,故可以直接右键解决方案Build Solution(生成解决方案),然后编译完成的库glfw3.lib就会出现在src/Debug文件夹内。
向IDE中添加库和头文件:
找到IDE或者编译器的/lib
和/include
文件夹,添加GLFW的include
文件夹里的文件到IDE的/include
文件夹内。用相同的方法,将glfw3.lib
添加到/lib
文件夹内。
建立一个新的目录包含所有的第三方库和头文件,并且IDE或者编译器指定这些文件。
为了让程序使用GLFW,需要将GLFW库链接到工程中,因此首先将第三方库的目录添加进设置。
进入Project Properties(工程属性,在解决方案窗口里右键项目),然后选择 VC++ Directions(VC++ 目录)选项卡。在两栏添加目录:
选择Include Directions(包含目录)界面:
这里可以添加任意多的目录,IDE可以从这些目录中寻找头文件,所以只需要将GLFW的Include文件夹加进路径中,就可以使用
来引用头文件。库文件也一样。
最后需要在Linker(链接器)选项卡里的Input(输入)选项卡里添加glfw3.lib文件:
要链接一个库,必须告诉链接器文件的名字,库名字是glfw3.lib,把它加进Additional Dependencies(附加依赖项)字段中,这样GLFW在编译的时候就会被链接进来。
Windows平台中,opengl32.lib已经包含到了Microsoft SDK中,在Visual Studio安装的时候就默认安装了,故只需要将opengl32.llib添加进链接器的设置里就行了。
如果已经添加了GLFW
和OpenGL
库到链接器设置中,即可添加GLFW头文件:
#include
因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的,由于OpenGL驱动版本众多,大多数函数的位置在编译的时候无法确定下来,需要在运行时查询。开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。
取得地址的方法因平台而异,Windows上形式:
//定义函数原型
typeof void (*GL_GENBUFFERS) (GLsizei, GLuint*);
//找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS) wglGetProcAddress("glGenBuffers");
//现在函数可以被正常调用
GLuint buffer;
glGenBuffers(1, &buffer);
GLAD是一个开源的库,并且使用在线服务。
使用个在线服务步骤:
将语言设置为C/C++
在API选项中,选择3.3以上的OpenGL(gl)版本
将模式(profile)设置为Core,并且保证生成加载器(Generate a loader)的选项时选中
(暂时)忽略拓展(Extensions)中的内容
配置完成后,点击生成(Generate)按钮来生成库文件
GLAD提供了一个zip压缩文件,里面包含两个头文件目录和一个glad.c文件。将这两个头文件目录(glad
和KHR
)复制到你的Include文件夹中,并添加glad.c文件到工程中。
可将语句加入工程中:
#include