以下内容摘自《OpenGL编程指南第九版》
笔者开发环境:macOS 10.14
一、什么是OpenGL?
1. 概述
书上说,OpenGL是一种应用程序编程接口(API),它是一种可以对图形硬件设备特性进行访问的软件库。OpenGL的4.5版本已经包含了超过500个不同的命令,可以用于设置所需的对象、图形和操作,一遍开发交互式的三维计算机图形应用程序。
OpenGL自身并不包含任何执行窗口任务或者处理用户输入的函数。事实上,我们需要通过应用程序所运行的`窗口系统`提供的接口来执行这类操作。与此类似,OpenGL也没有提供任何用于表达三维物体模型、或者读取图像文件的操作。我们需要通过一系列的几何图元,包括点、线、三角形以及面片来创建三维空间的物体。
2. 一个OpenGL程序需要执行的主要操作
一个用来渲染图像的OpenGL程序需要执行的主要操作有以下几点:
1. 从OpenGL的几何图元中设置数据,用于构建形状。
2. 使用不同的着色器(shader)对输入的图元数据执行计算操作,判断它们的位置、颜色以及其它渲染属性。
3. 将输入的图元的数学描述转换成与屏幕位置相对应的像素片元(fragment),即光栅化操作。(OpenGL中的片元若最终渲染为图像,那么它就是像素)。
4. 其它对片元的操作(非必须)。例如判断片元是否可见,或者将片元的颜色与当前屏幕位置的颜色进行融合等。
3. OpenGL的工作模式
OpenGL是使用CS模型(客户端-服务端)的形式实现的,我们编写的OpenGL程序可以看做是客户端,而显卡硬件供应商提供的OpenGL实现可以看做是服务端。客户端负责提交OpenGL命令,这些OpenGL命令被转换成窗口系统相关的协议,通过共享网络传输到服务端,服务端最终执行并产生图像内容。
4. OpenGL程序的基本结构
虽然我们可以用OpenGL做很多事情,导致很多时候OpenGL程序可能会被写得很庞大和复杂,但是,所有OpenGL程序的基本结构通常都是类似的,可概括为以下两个部分:
1. 初始化物体渲染所对应的状态
2. 设置需要渲染的物体
二、专有名词解释
1. 渲染
表示计算机从模型创建最终图像的过程。OpenGL只是其中一种渲染系统。
2. 模型(场景对象)
指通过几何图元(例如点、线和三角形)来构建的
3. 着色器
指图形硬件设备所执行的一类特殊函数。即专为图形处理单元(即GPU)编译的一种小型程序。
1. 定点着色器:用于处理定点数据
2. 片元着色器:用于处理光栅化后的片元数据
4. 像素
像素是显示器上最小的可见单元。计算机系统将所有的像素保存到帧缓存(framebuffer)当中,framebuffer是由图形硬件设备管理的一块独立内存区域,可以直接映射到最终的显示设备上。
三、OpenGL第三方支持库
1. GLFW:
一个跨平台的OpenGL应用程序框架,GLFW可以使得OpenGL程序的创建过程变得简单,只需四步:
- 初始化GLFW库
- 创建一个GLFW窗口以及OpenGL环境
- 渲染你的场景
- 将输出结果呈现给用户
2. GLEW:
GLEW是一个基于OpenGL图形接口的跨平台C++扩展库。GLEW能自动识别当前平台所支持的全部OpenGL高级扩展函数,只要包含glew.h头文件,就能使用 gl,glu,glext,wql,glx的全部函数。