《OpenGL编程指南》一1.1 什么是OpenGL

简介:

本节书摘来自华章出版社《OpenGL编程指南》一书中的第1章,第1.1节,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.1 什么是OpenGL

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

相关文章
|
缓存 图形学
《OpenGL编程指南(原书第9版)》——导读
OpenGL图形系统是图形硬件的一种软件接口(GL表示Graphics Library,即图形库)。它使得用户可以创建交互式的程序以产生运动的三维对象的颜色图像。通过OpenGL,我们可以使用计算机图形学技术产生逼真的图像,或者通过一些虚构的方式产生虚拟的图像。
2943 0
|
前端开发 API
《OpenGL编程指南(原书第9版)》——2.8 SPIR-V
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第2章,第2.8节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
5156 0
|
存储 缓存 索引
《OpenGL编程指南(原书第9版)》——3.4 OpenGL的绘制命令
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第3章,第3.4节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2285 0
|
存储 缓存 数据格式
《OpenGL编程指南(原书第9版)》——3.3 顶点规范
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第3章,第3.3节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1420 0
|
存储 缓存
《OpenGL编程指南(原书第9版)》——3.2 OpenGL缓存数据
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第3章,第3.1节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1707 0
《OpenGL编程指南(原书第9版)》——3.1 OpenGL图元
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第3章,第3.1节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1696 0
《OpenGL编程指南(原书第9版)》——第3章 3.0OpenGL绘制方式
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第3章,第3.0节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1516 0
《OpenGL编程指南(原书第9版)》——2.7 独立的着色器对象
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第2章,第2.7节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1494 0
《OpenGL编程指南(原书第9版)》——2.6 着色器子程序
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第2章,第2.6节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1249 0
|
监控 C语言
《OpenGL编程指南(原书第9版)》——2.5 着色器的编译
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第2章,第2.5节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1274 0