OpenGL是一个接口规范,由Khronos组织制定并维护的规范。OpenGL规范确定了每个函数如何执行,以及输出值。至于内部具体实现由OpenGL的开发者自行决定。所以具体的OpenGL库都是由开发者来维护,内部实现可能不同。
OpenGL的渲染模式有固定管线模式和可编程模式。现代的OpenGL编程要求开发者使用可编程渲染模式。这种方式十分灵活,可以实现各种复杂的效果。但需要对OpenGL的渲染流程有深入的理解。
在开始OpenGL编程之前,我们需要下载一些库,帮助我们更快的开发。
GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。
GLFW下载地址:https://www.glfw.org/download.html
最好下载源码进行编译。好处是生成的库不会出现由于编译环境不同出现奇怪的问题。需要CMake来生成对应的工程。
source code:解压的文件路径。
build the binaries: 生成路径,自己创建一个。
点击Configure,选择本地编译环境,点击Finish。
程序会自动在build目录生成一个工程。
再点击Configure。之后点击Generate。工程就可以使用了。
点击Open Project 就可以打开创建好的工程。之后编译整个工程。
编译完成后,会生成一个glfw3.lib文件,拷贝到你的lib库中,同时链接你的OpenGL工程里。将include文件夹里的内容拷贝到你的include文件夹中。
GLAD是一个在线服务,可以基于官方文档生成针GL/GLES/EGL/GLX/WGL等多种语言的加载生成器。
因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数
的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其
保存在一个函数指针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:
// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);
GLAD可以简化这个过程。减少代码量。
打开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文件到你的工程中。
关于工程设置,需要添加include路径,添加lib库路径。对于windows的系统会自带opengl32.lib这个库,需要连接进来。
环境到此搭建完成。
本文是根据LearnOpenGL教程自己整理的笔记,详细的教程内容请到LearnOpenGL官网查看。地址:https://learnopengl-cn.github.io/