《OpenGL编程指南(原书第9版)》——1.1 什么是OpenGL

1.1 什么是OpenGL

OpenGL是一种应用程序编程接口(Application Programming Interface, API),它是一种可以对图形硬件设备特性进行访问的软件库。OpenGL库的4.5版本(即本书所使用的版本)包含了超过500个不同的命令,可以用于设置所需的对象、图像和操作,以便开发交互式的三维计算机图形应用程序。
OpenGL被设计为一个现代化的、硬件无关的接口,因此我们可以在不考虑计算机操作系统或窗口系统的前提下,在多种不同的图形硬件系统上,或者完全通过软件的方式(如果当前系统没有图形硬件)实现OpenGL的接口。OpenGL自身并不包含任何执行窗口任务或者处理用户输入的函数。事实上,我们需要通过应用程序所运行的窗口系统提供的接口来执行这类操作。与此类似,OpenGL也没有提供任何用于表达三维物体模型,或者读取图像文件(例如JPEG文件)的操作。这个时候,我们需要通过一系列的几何图元(geometric primitive)(包括点、线、三角形以及面片)来创建三维空间的物体。
OpenGL已经诞生了很长时间,它最早的1.0版本是在1994年7月发布的,通过Silicon的图形计算机系统开发出来。而到了今天已经发布了非常多的OpenGL版本,以及大量构建于OpenGL之上以简化应用程序开发过程的软件库。这些软件库大量用于视频游戏、科学可视化和医学软件的开发,或者只是用来显示图像。不过,如今OpenGL的版本与其早期的版本已经有很多显著的不同。本书将介绍如何使用最新的OpenGL版本来创建不同的应用程序。
一个用来渲染图像的OpenGL程序需要执行的主要操作如下所示。(1.4节将对这些操作进行详细解释。)
从OpenGL的几何图元中设置数据,用于构建形状。
使用不同的着色器(shader)对输入的图元数据执行计算操作,判断它们的位置、颜色,以及其他渲染属性。
将输入图元的数学描述转换为与屏幕位置对应的像素片元(fragment)。这一步也称作光栅化(rasterization)。(OpenGL中的片元若最终渲染为图像,那它就是像素。)
最后,针对光栅化过程产生的每个片元,执行片元着色器(fragment shader),从而决定这个片元的最终颜色和位置。
如果有必要,还需要对每个片元执行一些额外的操作,例如判断片元对应的对象是否可见,或者将片元的颜色与当前屏幕位置的颜色进行融合。
OpenGL是使用客户端-服务端的形式实现的,我们编写的应用程序可以看做客户端,而计算机图形硬件厂商所提供的OpenGL实现可以看做服务端。OpenGL的某些实现(例如X窗口系统的实现)允许服务端和客户端在一个网络内的不同计算机上运行。这种情况下,客户端负责提交OpenGL命令,这些OpenGL命令然后被转换为窗口系统相关的协议,通过共享网络传输到服务端,服务端最终执行并产生图像内容。
在大多数现代的实现方案中,硬件图形加速器被用来完成大部分的OpenGL指令,它往往被构建在计算机的核心处理器中(不过依然是独立的部件),或者作为一个独立的电路板插入到计算机主板上。无论是哪种安装方式,我们都应当把图形加速器作为服务端,把用户程序作为客户端来看待。

上一篇:OpenGL ES 烘焙图遇上灯光会是什么样?!


下一篇:Logic-算法-分金条