一起学OpenGL[第一章OpenGL简介]
第一章 OpenGL简介
第二章 我们的第一个OpenGL小程序
[简介] 介绍OpenGL的基本概念以及相关配置环境
前言
OpenGL是一种接口,应用程序通过它来访问和控制其所在运行设备的图形子系统。
一、OpenGL是什么?
OpenGL是一种接口,应用程序通过它来访问和控制其所在运行设备的图形子系统。OpenGL接受程序发出的指令,然后发送给底层图形硬件,硬件再高效快速地产生预期结果。
二、图形管线和渲染模式
1.图形管线
计算机图形处理通常由很多相似的重复性任务完成(例如计算一个像素应该是什么颜色),并且这些任务彼此独立,即一个像素的着色结果和另外一个像素没有任何管线,即流水线作业。OpenGL将工作分解然后利用其基础元素并行完成。图形管线即一个流水线过程。图1.1展示了一个精简的图形管线示意图。
圆角框表示固定函数,而方角框表示可编程阶段,即它们会使用用户提供的着色器。
2.渲染模式
OpenGL有两种渲染模式:核心模式和兼容模式,核心模式删除了大量的传统功能,仅留下图形硬件可加速的功能,该模型比兼容模式少几百页。兼容模式仅保留了1.0版本开始的所有的向后兼容性,目前大部分应用开发都使用核心模式。
3.基元、管线和像素
在OpenGL中,基本的渲染单元称为基元。OpenGL支持多种基元,但基本的三种可渲染基元为点、线和三角形。我们在屏幕上渲染的所有东西都是点、线和三角形的集合,应用一般会把复杂的表面分解成许多三角形,然后发送给OpenGL,通过一个叫作光栅器的硬件加速器进行渲染。
三、环境配置
OpenGL基础开发所需要的库有GLFW、glad、glm等。
GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。
因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。
Windows上会是类似这样:
// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);
你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。
GLFW和glad的配置方法可参考下面链接:glfw、glad配置方法
glm是一个OpenGL数学库用模型变换等。配置方法如下:glm配置