首页>参考读物>计算机科学与技术>数码/设计

OpenGL编程指南 (原书第5版)
作者 : (美)Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis
译者 : 徐波 等
出版日期 : 2006-06-20
ISBN : 7-111-18888-8
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 513
开本 : 16开
原书名 : OpenGL Programming Guide, Fifth Edition: The Official Guide to Learning OpenGL,Version 2, 5E
原出版社: Addison-Wesley
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

OpenGL是一种功能强大的软件接口,用于生成高质量的计算机图像,也可以用于编写使用2D和3D物体、位图和彩色图像的交互性应用程序。
  本书以清晰的语言描述了OpenGL的功能以及许多基本的计算机图形技巧,例如创建和渲染3D模型、从不同的透视角度观察物体、使用着色、光照和纹理贴图使场景更加逼真等。同时,本书还深入探讨了许多高级技巧,包括纹理贴图、抗锯齿、雾和大气效果、NURBS、图像处理子集等。此外,本书还对一些重要的主题进行了讨论,例如提高性能、OpenGL扩展以及跨平台技术等。本书对OpenGL以及OpenGL实用函数库提供了全面而又权威的介绍,有“OpenGL红宝书”之誉。
  本书的以前版本覆盖了到OpenGL 1.4版为止的内容。本书第5版在第4版的基础之上进行了重大的修订,涵盖了OpenGL 1.5和2.0版本的最新特性,尤其是包括对OpenGL着色语言(GLSL)的介绍,并解释了使用这种新语言创建复杂图形效果并提升OpenGL计算威力的机制。

  其他新增内容包括:
  ● 在缓冲区对象中存储顶点数组,以获得更快的渲染
  ● 遮挡查询,测试物体的可见性
  ● 取消了纹理图像的宽度和高度必须是2的整数次方的限制
  ● 点块纹理
  ● 对RGB和颜色索引使用独立的模版操作
  ● 使用GLSL渲染到多个缓冲区
  OpenGL技术资料库(OpenGL Technical Library)提供了大量的OpenGL教程和参考书籍,它可以帮助程序员深入理解OpenGL,完全释放OpenGL的潜力。这个库最初由SGI开发,目前由OpenGL体系结构审核委员会(ARB)所维护。OpenGL ARB是个行业协会,负责OpenGL以及相关技术的发展和演变。OpenGL ARB由下面这些计算机图形行业的领先企业所组成:3Dlabs、Apple、ATI、Dell、IBM、Intel、NVIDIA、SGI和Sun Microsystems。

图书特色

图书前言

OpenGL图形系统是图形硬件的一个软件接口(GL代表图形库,Graphics Library)。它允许创建交互性的程序,来产生移动三维物体的彩色图像。使用OpenGL,可以对计算机图形技术进行控制,产生逼真的图像或者虚构出现实世界所没有的图像。本书解释了如何使用OpenGL图形系统进行编程,实现所需要的视觉效果。
  本书内容
  本书共有15章。前5章描述了一些基本信息,需要理解这些内容才能够在屏幕上绘制正确着色和光照的三维物体。
  * 第1章“OpenGL简介”:对OpenGL可以实现的功能作了简要的介绍。本章还提供了一个简单的OpenGL程序,并说明了需要了解的一些基本编程细节,以便于学习后续章节的内容。
  * 第2章“状态管理和绘制几何物体”:说明了如何创建物体的三维几何图形描述,并最终把它绘制到屏幕上。
  * 第3章“视图”:描述了三维模型在绘制到二维屏幕之前如何进行变换。可以控制这些变换,显示模型的特定视图。
  * 第4章“颜色”:描述了如何指定颜色以及用于绘制物体的着色方法。
  * 第5章“光照”:说明了如何控制围绕物体的光照条件,以及物体如何对光照作出反应(也就是说,它是怎样反射或吸收光线的)。光照是个重要的主题,因为物体在没有光照的情况下看上去往往没有三维感。
  接下来的章节说明了如何对三维场景进行优化或者如何添加一些高级特性。在你尚不精通OpenGL的时候,可以选择不使用这些高级特性。有些特别高级的主题在出现时会有个标记。
  * 第6章“混合、抗锯齿、雾和多边形偏移”:描述了创建逼真场景所需要的一些基本技巧:alpha混合(创建透明物体)、抗锯齿(消除锯齿状边缘)、大气效果(模拟雾和烟雾)以及多边形偏移(在着重显示填充多边形的边框时消除不良视觉效果)。
  * 第7章“显示列表”:讨论了如何存储一系列的OpenGL命令,以便于以后执行。可以使用这个特性来提高OpenGL程序的性能。
  * 第8章“绘制像素、位图、字体和图像”:讨论了如何对表示位图或图像的二维数据进行操作。位图的一种典型用法就是描述各种字体的字符。
  * 第9章“纹理贴图”:说明了如何把一种称为纹理的一维、二维或三维图像映射到三维物体表面上。纹理贴图可以实现许多非常精彩的效果。
  * 第10章“帧缓冲区”:描述了OpenGL实现中可能存在的所有缓冲区,并说明了如何对它们进行控制。可以使用这些缓冲区实现诸如隐藏表面消除、模版、屏蔽、运动模糊和景深聚焦等效果。
  * 第11章“分格化和二次方程表面”:展示了如何使用GLU(OpenGL工具函数库,OpenGL Utility Library)所提供的分格化和二次方程函数。
  * 第12章“求值器和NURBS”:对生成曲线和表面的高级技巧进行了介绍。
  * 第13章“选择和反馈”:说明了如何使用OpenGL的选择机制来选择屏幕上的一个物体。此外,本章还说明了反馈机制,它允许收集OpenGL所产生的绘图信息,而不是在屏幕上绘制物体。
  * 第14章“OpenGL高级技巧”:描述了如何用一些巧妙和意想不到的方法来使用OpenGL,产生一些有趣的结果。这些技巧是通过对OpenGL及其技术前驱Silicon Graphics IRIS图形函数库的多年应用和实践而总结出来的。
  * 第15章“OpenGL 2.0和OpenGL着色语言”:讨论了OpenGL 2.0所引入的变化,包括对OpenGL着色语言的介绍。OpenGL着色语言通常又称为GLSL,它允许对OpenGL的顶点和片断的处理阶段进行控制。这个特性可以极大地提高图像的质量,充分体现OpenGL的计算威力。
  另外,本书还包括一些非常实用的附录。
  * 附录A“操作顺序”:对OpenGL所执行的操作提供了一个技术性的概述,简要描述了当应用程序执行时这些操作的出现顺序。
  * 附录B“状态变量”:列出了OpenGL所维护的状态变量,并描述了如何获取它们的值。
  * 附录C“OpenGL和窗口系统”:简单描述了窗口系统特定的函数库所提供的函数,它们进行了扩展,以支持OpenGL渲染。本章讨论了X窗口系统、Apple MacIntosh、IBM OS/2和Microsoft Windows的窗口系统接口。
  * 附录D“GLUT基础知识”:讨论了用于处理窗口系统操作的函数库。GLUT(OpenGL实用工具库)具有可移植性,它可以使代码更短、更紧凑。
  * 附录E“计算法线向量”:描述了如何计算不同类型的几何物体的法线向量。
  * 附录F“齐次坐标和变换矩阵”:解释了隐藏在矩阵转换背后的一些数学知识。
  * 附录G“编程提示”:列出了一些遵循OpenGL设计思路的编程提示,这些提示可以指导你更好地编写OpenGL应用程序。
  * 附录H“OpenGL的不变性规则”:描述了OpenGL实现在什么时候以及什么地方必须生成OpenGL规范所描述的精确像素值。
  * 附录I“OpenGL着色语言内置的变量和函数”:列出了OpenGL着色语言所提供的所有内置变量和函数。
  最后,本书还提供了一个术语表,提供了本书所使用的一些关键术语的定义。
  第5版的新增内容
  本书是第5版,增加了一些新内容,并对一些原有的内容进行了更新。第5版涵盖了OpenGL 1.5和2.0:
  * 涵盖了OpenGL 1.5所增加的一些新的核心功能:
  * 在缓冲区对象中存储顶点数组。
  * 遮挡查询。
  * 增加了GL_LEQUAL和GL_GEQUAL纹理比较函数(用于阴影纹理)。
  * 更新了一些小标记。
  * 涵盖了OpenGL 2.0的下面这些核心功能:
  * 增加了OpenGL着色语言,支持用顶点和片断着色器进行编程。
  * 在可编程着色器中,把 煌难丈凳涑龅讲煌难丈撼迩
  * 消除了纹理图像的宽度和高度必须是2的整数次方的限制。
  * 使用点块纹理进行渲染。
  * 对多边形的正面和背面使用独立的模版操作。
  * 修补了一些小问题。
  阅读本书所需要的预备知识
  本书假定读者了解如何用C语言编写程序,并且具备一些数学背景知识(几何、三角、线性代数、积分和微分几何)。但是,即便有的读者对计算机图形技术知之甚少,仍然可以理解本书所讨论的绝大多数内容。当然,计算机图形本身就是个很大的主题,因此最好能够深入了解一些这个领域的知识。下面是我们所推荐的两本参考书:
  * 《Computer Graphics: Principles and Practice》:作者是James D. Foley, Andries van Dam, Steven K. Feiner和John F. Hughes(Addison-Wesley,1990)。本书是计算机图形领域的百科全书,它包括了丰富的信息。但是,在阅读这本书之前最好对计算机图形学已经有了一定程度的了解。
  * 《3D Computer Graphics》:作者Andrew S. Glassner(The Lyons Press,1994)。本书对计算机图形学进行了一些非技术性的、通俗易懂的介绍。这本书的重点是计算机图形学可以实现的视觉效果,而不是实现这些效果所需要的技术。
   另外,还可以访问OpenGL的官方网站。这个网站包含了各种类型的通用信息,包括软件、文档、FAQ以及新闻。如果遇到什么OpenGL问题,以下网址应该是首先想到的去处:
  http://www.opengl.org/
  当开始用OpenGL进行编程后,还可以获取OpenGL体系结构审核委员会(OpenGL ARB)编写的《OpenGL Reference Manual》(《OpenGL参考手册》,也是由Addison Wesley出版)。这本书堪称是本书的姊妹篇,它从技术的角度描述了OpenGL如何对描述几何物体或图像的数据进行处理,以便在屏幕上绘制图像。它还完整地介绍了OpenGL的各组相关函数:函数所使用的参数、这些参数的默认值以及这些函数所实现的功能。许多OpenGL实现都提供了类似的在线材料,以手册或其他帮助文档的形式存在,更新往往比较及时。Internet上也有各种版本的材料,可以访问前面所提到的OpenGL官方网站。
  OpenGL实际上是一种独立于硬件的程序接口规范。在一种特定类型的硬件上,所使用的是它的一种特定实现。本书解释了如何使用所有的OpenGL实现进行编程。但是,由于各种OpenGL实现可能存在细微的差别(例如,在性能以及提供额外的、可选的特性上),因此可能需要寻找与所使用的特定OpenGL实现相关的补充文档。另外,所使用的系统还可能提供与OpenGL相关的实用函数库、工具箱、编程和调试支持工具、各种窗口部件、示例程序以及演示程序等。
  如何获取本书示例程序的源代码
  本书包含了许多示例程序,说明了各种OpenGL编程技巧的具体用法。这些程序使用了Mark Kilgard所编写的OpenGL实用工具库(GLUT)。可以在Mark Kilgard所著的《OpenGL Programming for the X Windows System》(Addison Wesley,1996)中了解GLUT的详细信息。本书的第1章的“OpenGL相关的函数库”以及附录D提供了使用GLUT的更多信息。如果可以访问Internet,可以通过匿名FTP(文件传输协议)免费获取本书的示例程序以及GLUT的源代码。  
  要获取本书示例程序的源代码,可以访问:
  http://www.opengl-redbook.com/code/
  要获取Mark Kilgard的GLUT的源代码(用于Microsoft Windows或X窗口系统),可以访问下面这个网站,了解当前可用的GLUT版本,并下载它的源代码:
http://www.opengl.org/developers/documentation/glut/index.html
  许多OpenGL实现还可能包含一些示例代码,并将其作为系统的一部分。这些源代码可能是所使用的OpenGL实现应该使用的最佳代码,因为它可能针对你所使用的系统进行了优化。可以参阅与所使用的系统相关的OpenGL文档,了解从哪里下载这些示例程序。
  Nate Robins的OpenGL教程
  Nate Robins编写了一套教学程序,用于演示OpenGL编程的基本功能。它允许用户修改函数的参数,以交互的方式观察它们的效果。这套教程所涵盖的主题包括变换、光照、雾和纹理。我们高度推荐使用这些教程,它们具有可移植性,并且使用了前面所提到的GLUT。为了获取这些教程的源代码,可以访问下面这个网站:
  http://www.xmission.com/~nate/tutors.html
  勘误表
  本书无疑也会存在一些错误。下面这个网站维护了本书的错误列表: 
  http://www.opengl-redbook.com/errata/
  如果在本书中发现了任何问题,可以在这个网站中报告它们。
  体例约定
  本书函数的说明带有灰色背景。
  在函数说明中,函数的名称用粗体表示,参数的名称用斜体表示。花括号用于标识可选数据类型选项。在下面这个例子中,glCommand具有4个可能的后缀:s、i、f和d,它们分别表示数据类型GLshort、GLint、GLfloat和GLdouble。在glCommand函数的原型中,TYPE表示这些后缀所提示的数据类型。
  void glCommand{sifd}(TYPE x1, TYPE y1, TYPE x2, TYPE y2);

封底文字

OpenGL是一种功能强大的软件接口,用于生成高质量的计算机图像,也可以用于编写使用2D和3D物体、位图和彩色图像的交互性应用程序。 本书以清晰的语言描述了OpenGL的功能以及许多基本的计算机图形技巧,例如创建和渲染3D模型、从不同的透视角度观察物体、使用着色、光照和纹理贴图使场景更加逼真等。同时,本书还深入探讨了许多高级技巧,包括纹理贴图、抗锯齿、雾和大气效果、NURBS、图像处理子集等。此外,本书还对一些重要的主题进行了讨论,例如提高性能、OpenGL扩展以及跨平台技术等。本书对OpenGL以及OpenGL实用函数库提供了全面而又权威的介绍,有“OpenGL红宝书”之誉。 本书的以前版本覆盖了到OpenGL 1.4版为止的内容。本书第5版在第4版的基础之上进行了重大的修订,涵盖了OpenGL 1.5和2.0版本的最新特性,尤其是包括对OpenGL着色语言(GLSL)的介绍,并解释了使用这种新语言创建复杂图形效果并提升OpenGL计算威力的机制。 其他新增内容包括: ● 在缓冲区对象中存储顶点数组,以获得更快的渲染 ● 遮挡查询,测试物体的可见性 ● 取消了纹理图像的宽度和高度必须是2的整数次方的限制 ● 点块纹理 ● 对RGB和颜色索引使用独立的模版操作 ● 使用GLSL渲染到多个缓冲区 OpenGL技术资料库(OpenGL Technical Library)提供了大量的OpenGL教程和参考书籍,它可以帮助程序员深入理解OpenGL,完全释放OpenGL的潜力。这个库最初由SGI开发,目前由OpenGL体系结构审核委员会(ARB)所维护。OpenGL ARB是个行业协会,负责OpenGL以及相关技术的发展和演变。OpenGL ARB由下面这些计算机图形行业的领先企业所组成:3Dlabs、Apple、ATI、Dell、IBM、Intel、NVIDIA、SGI和Sun Microsystems。 作者简介 本书的几位作者均是OpenGL体系结构审核委员会成员。 其中Dave Shreiner 是SGI的一位OpenGL工程师,从OpenGL问世以来他就一直从事这方面的研究,并且在计算机图形领域已有15年以上的经验。Dave定期参加SIGGRAPH和其他一些全球性的图形工作会议,也是《OpenGL Reference Manual》一书的作者。

作者简介

(美)Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis:(美)Dave Shreiner: 本书的几位作者均是OpenGL体系结构审核委员会成员。 其中Dave Shreiner 是SGI的一位OpenGL工程师,从OpenGL问世以来他就一直从事这方面的研究,并且在计算机图形领域已有15年以上的经验。Dave定期参加SIGGRAPH和其他一些全球性的图形工作会议,也是《OpenGL Reference Manual》一书的作者。

译者简介

徐波 等:暂无简介

译者序

OpenGL是图形硬件的一种软件接口。从本质上说,它是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的渲染速度。如今,OpenGL广泛流行于游戏、医学影像、地理信息、气候模拟等领域,是高性能图形和交互式场景处理的工业标准。
  OpenGL的前身是SGI公司所开发的IRIS GL图形函数库。SGI是一家久负盛名的公司,在计算机图形和动画方面处于业界领先的地位。IRIS GL最初是个2D图形函数库,后来逐渐演化为SGI的高端IRIS图形工作站所使用的3D编程API。后来,由于图形技术的发展,SGI对IRIS GL的移植性进行了改进和提高,使它逐步发展成如今的OpenGL。在此期间,OpenGL得到了各大厂商的支持,从而使它成为广泛流行的三维图形标准。
  OpenGL并不是一种编程语言,而是更像一个C运行时函数库,提供了一些预包装的功能,来帮助开发人员编写功能强大的三维图形应用程序。OpenGL可以在多种操作系统平台上运行,例如各种版本的Windows、Unix/Linux、Mac OS和OS/2等。
  OpenGL是个开放的标准,虽然它是SGI首创,但并不是控制在SGI的手里,而是由OpenGL体系结构审核委员会(ARB)所掌管。ARB由SGI、DEC、IBM、Intel和Microsoft等著名公司所创立,后来又陆续添加了nVidia、ATI等图形芯片领域的巨擎。ARB每隔4年开一次会,对规范进行维护和改善,并出台计划对OpenGL标准进行升级,使OpenGL一直保持与时代的同步。
  《OpenGL编程指南》就是由ARB所编写的官方指南,是OpenGL领域的权威著作,有“OpenGL红宝书”之称,曾经帮助许多程序员走上了OpenGL专家之路。第5版在第4版的基础上作了重大的改进,介绍了OpenGL的革命性进展—功能强大的OpenGL着色语言。OpenGL着色语言使程序员不再受限于原来固定功能的管线,而是可以使用可编程管线开发出功能强大而灵活的三维图形应用程序。
  作为本书的主要翻译者,我在《OpenGL编程指南》第3版出版的时候(2001年)开始涉猎OpenGL,对它产生了浓厚的兴趣。虽然由于开发工作的繁忙,在OpenGL上面无法投入太多的精力,但它一直是我感兴趣的一个领域。有幸承担这本《OpenGL编程指南》(原书第5版)的翻译工作,对我的学习和研究都起到了非常重要的作用。
  本书的翻译是个艰苦的过程,其中凝结了许多人的辛勤工作。除我之外,黄静、李福军、陈永军、毛玉山、朱健儿、韩建正、张汉宏也参加了本书的翻译工作。机械工业出版社华章分社的编辑也为译作的出版付出辛勤的劳动,感谢他们! 
  徐 波

图书目录

第1章 OpenGL简介 1
1.1 什么是OpenGL 1
1.2 一段简单的OpenGL代码 3
1.3 OpenGL函数的语法 4
1.4 OpenGL是个状态机 6
1.5 OpenGL渲染管线 6
1.5.1 显示列表 7
1.5.2 求值器 7
1.5.3 基于顶点的操作 7
1.5.4 图元装 7
1.5.5 像素操作 8
1.5.6 纹理装配 8
1.5.7 光栅化 8
1.5.8 片断操作 8
1.6 OpenGL相关的函数库 8
1.6.1 包含文件 9
1.6.2 GLUT,OpenGL实用工具包 10
1.7 动画 13
1.7.1 暂停刷新 14
1.7.2 动画=重绘+交换 15
第2章 状态管理和绘制几何物体 17
2.1 绘图工具箱 18
2.1.1 清除窗口 18
2.1.2 指定颜色 20
2.1.3 强制完成绘图操作 21
2.1.4 坐标系统工具箱 22
2.2 描述点、直线和多边形 23
2.2.1 什么是点、直线和多边形 23
2.2.2 指定顶点 25
2.2.3 OpenGL几何绘图图元 26
2.3 基本状态管理 30
2.4 显示点、直线和多边形 31
2.4.1 点的细节 31
2.4.2 直线的细节 31
2.4.3 多边形的细节 35
2.5 法线向量 40
2.6 顶点数组 41
2.6.1 步骤1:启用数组 42
2.6.2 步骤2:指定数组的数据 43
2.6.3 步骤3:解引用和渲染 45
2.6.4 混合数组 50
2.7 缓冲区对象中的顶点数组 52
2.7.1 利用缓冲区对象存储顶点数据 53
2.7.2 为顶点数据创建缓冲区对象 53
2.7.3 激活缓冲区对象 53
2.7.4 用顶点数据分配和初始化缓冲区 对象 54
2.7.5 更新缓冲区对象中的数据值 57
2.7.6 清除缓冲区对象 58
2.8 属性组 58
2.9 关于构建多边形表面模型的一些提示 60
第3章 视图 66
3.1 总览:照相机比喻 67
3.1.1 一个简单的例子:绘制立方体 69
3.1.2 通用的变换函数 72
3.2 视图和模型变换 73
3.2.1 对变换进行思考 74
3.2.2 模型变换 76
3.2.3 视图变换 79
3.3 投影变换 84
3.3.1 透视投影 84
3.3.2 正投影 86
3.3.3 可视空间裁剪 86
3.4 视口变换 87
3.4.1 定义视口 87
3.4.2 变换深度坐标 88
3.5 和变换相关的故障排除 88
3.6 操纵矩阵堆栈 90
3.6.1 模型视图矩阵堆栈 92
3.6.2 投影矩阵堆栈 92
3.7 额外的裁剪平面 93
3.8 一些组合变换的例子 95
3.8.1 创建太阳系模型 95
3.8.2 创建有关节的机器人手臂 97
3.9 逆变换和模拟变换 100
第4章 颜色 104
4.1 颜色感知 104
4.2 计算机颜色 105
4.3 RGBA和颜色索引模式 107
4.3.1 RGBA显示模式 107
4.3.2 颜色索引模式 109
4.3.3 在RGBA和颜色索引模式中选择 110
4.3.4 切换显示模式 110
4.4 指定颜色和着色模型 111
4.4.1 在RGBA模式下指定颜色 111
4.4.2 在颜色索引模式下指定颜色 112
4.4.3 指定着色模型 113
第5章 光照 115
5.1 隐藏表面消除工具箱 116
5.2 现实世界和OpenGL光照 117
5.2.1 环境光、散射光、镜面光和 发射光 118
5.2.2 材料颜色 118
5.2.3 光和材料的RGB值 119
5.3 一个简单的例子:渲染光照球体 119
5.3.1 为每个物体的每个顶点定义法 线向量 120
5.3.2 创建、定位和启用光源 121
5.3.3 选择光照模型 121
5.3.4 为场景中的物体定义材料属性 122
5.3.5 一些重要注意事项 122
5.4 创建光源 122
5.4.1 颜色 123
5.4.2 位置和衰减 124
5.4.3 聚光灯 125
5.4.4 多光源 126
5.4.5 控制光源的位置和方向 127
5.5 选择光照模型 131
5.5.1 全局环境光 131
5.5.2 局部的观察点或无限远的观察点 132
5.5.3 双面光照 132
5.5.4 镜面辅助颜色 132
5.5.5 启用光照 133
5.6 定义材料属性 133
5.6.1 散射和环境反射 134
5.6.2 镜面反射 135
5.6.3 发射光颜色 135
5.6.4 更改材料属性 135
5.6.5 颜色材料模式 137
5.7 光照的数学知识 140
5.7.1 材料的发射光 140
5.7.2 经过缩放的全局环境光 140
5.7.3 光源的贡献 140
5.7.4 完整的光照计算公式 142
5.7.5 镜面辅助颜色 142
5.8 颜色索引模式下的光照 143
第6章 混合、抗锯齿、雾和多边形偏移 145
6.1 混合 146
6.1.1 源因子和目标因子 146
6.1.2 启用混合 148
6.1.3 使用混合方程式组合像素 148
6.1.4 混合的样例用法 150
6.1.5 一个混合的例子 152
6.1.6 使用深度缓冲区进行三维混合 153
6.2 抗锯齿 156
6.2.1 对点和直线进行抗锯齿处理 158
6.2.2 使用多重采样对几何图形进行 抗锯齿处理 162
6.2.3 对多边形进行抗锯齿处理 165
6.3 雾 166
6.3.1 使用雾 166
6.3.2 雾方程式 169
6.4 点参数 174
6.5 多边形偏移 176
第7章 显示列表 179
7.1 为什么使用显示列表 179
7.2 一个使用显示列表的例子 180
7.3 显示列表的设计哲学 182
7.4 创建和执行显示列表 184
7.4.1 命名和创建显示列表 185
7.4.2 存储在显示列表里的是什么 185
7.4.3 执行显示列表 187
7.4.4 层次式显示列表 187
7.4.5 管理显示列表索引 188
7.5 执行多个显示列表 188
7.6 用显示列表管理状态变量 193
第8章 绘制像素、位图、字体和图像 196
8.1 位图和字体 197
8.1.1 当前光栅位置 198
8.1.2 绘制位图 199
8.1.3 选择位图的颜色 200
8.1.4 字体和显示列表 200
8.1.5 定义和使用一种完整的字体 201
8.2 图像 203
8.3 图像管线 208
8.3.1 像素包装和解包 210
8.3.2 控制像素存储模式 210
8.3.3 像素传输操作 213
8.3.4 像素映射 215
8.3.5 放大、缩小或翻转图像 216
8.4 读取和绘制像素矩形 218
8.4.1 像素矩形的绘制过程 218
8.4.2 像素矩形的读取过程 220
8.5 提高像素绘图速度的技巧 221
8.6 图像处理子集 221
8.6.1 颜色表 222
8.6.2 卷积 226
8.6.3 颜色矩阵 231
8.6.4 柱状图 232
8.6.5 最小最大值 234
第9章 纹理贴图 236
9.1 概述和示例 239
9.1.1 纹理贴图的步骤 239
9.1.2 一个示例程序 240
9.2 指定纹理 242
9.2.1 纹理代理 245
9.2.2 替换纹理图像的全部或一部分 247
9.2.3 一维纹理 249
9.2.4 三维纹理 250
9.2.5 压缩纹理图像 254
9.2.6 使用纹理边框 256
9.2.7 Mipmap:多重细节层 256
9.3 过滤 263
9.4 纹理对象 266
9.4.1 命名纹理对象 266
9.4.2 创建和使用纹理对象 266
9.4.3 清除纹理对象 269
9.4.4 常驻纹理工作集 269
9.5 纹理函数 271
9.6 分配纹理坐标 273
9.6.1 计算适当的纹理坐标 274
9.6.2 重复和截取纹理 275
9.7 纹理坐标自动生成 278
9.7.1 创建轮廓线 279
9.7.2 球体纹理 283
9.7.3 立方图纹理 284
9.8 多重纹理 285
9.9 纹理组合器函数 289
9.10 在纹理之后应用辅助颜色 293
9.10.1 在禁用光照时使用辅助颜色 293
9.10.2 启用光照后的辅助镜面颜色 294
9.11 纹理矩阵堆栈 294
9.12 深度纹理 295
9.12.1 创建阴影图 295
9.12.2 生成纹理坐标并进行渲染 296
第10章 帧缓冲区 298
10.1 缓冲区及其用途 299
10.1.1 颜色缓冲区 300
10.1.2 清除缓冲区 301
10.1.3 选择用于读取和写入的颜色 缓冲区 302
10.1.4 缓冲区的屏蔽 303
10.2 片断的测试和操作 304
10.2.1 裁剪测试 304
10.2.2 alpha测试 305
10.2.3 模版测试 306
10.2.4 深度测试 310
10.2.5 遮挡查询 310
10.2.6 混合、抖动和逻辑操作 312
10.3 累积缓冲区 314
10.3.1 场景抗锯齿 315
10.3.2 运动模糊 319
10.3.3 景深 320
10.3.4 柔和阴影 322
10.3.5 微移 323
第11章 分格化和二次方程表面 324
11.1 多边形分格化 324
11.1.1 创建分格化对象 325
11.1.2 分格化回调函数 325
11.1.3 分格化属性 329
11.1.4 多边形定义 332
11.1.5 删除分格化对象 334
11.1.6 提高分格化性能的建议 335
11.1.7 描述GLU错误 335
11.1.8 向后兼容性 335
11.2 二次方程表面:渲染球体、圆柱体 和圆盘 336
11.2.1 管理二次方程对象 337
11.2.2 控制二次方程对象的属性 337
11.2.3 二次方程图元 338
第12章 求值器和NURBS 342
12.1 前提条件 342
12.2 求值器 343
12.2.1 一维求值器 343
12.2.2 二维求值器 347
12.2.3 使用求值器进行纹理处理 350
12.3 GLU的NURBS接口 352
12.3.1 一个简单的NURBS例子 352
12.3.2 管理NURBS对象 356
12.3.3 创建NURBS曲线或表面 358
12.3.4 修剪NURBS表面 362
第13章 选择和反馈 365
13.1 选择 365
13.1.1 基本步骤 366
13.1.2 创建名字堆栈 366
13.1.3 点击记录 368
13.1.4 一个选择例子 368
13.1.5 挑选 371
13.1.6 编写使用选择程序的一些建议 378
13.2 反馈 380
13.2.1 反馈数组 381
13.2.2 在反馈模式下使用标记 381
13.2.3 一个反馈例子 382
第14章 OpenGL高级技巧 386
14.1 错误处理 387
14.2 OpenGL版本 388
14.2.1 工具库版本 389
14.2.2 窗口系统扩展版本 389
14.3 标准的扩展 389
14.4 实现半透明效果 391
14.5 轻松实现淡出效果 391
14.6 使用后缓冲区进行物体选择 392
14.7 低开销的图像转换 393
14.8 显示层次 394
14.9 抗锯齿字符 395
14.10 绘制圆点 397
14.11 图像插值 397
14.12 制作贴花 397
14.13 使用模版缓冲区绘制填充的 凹多边形 398
14.14 寻找冲突区域 399
14.15 阴影 400
14.16 隐藏直线消除 401
14.16.1 使用多边形偏移实现隐藏直线 消除 401
14.16.2 使用模板缓冲区实现隐藏直线 消除 402
14.17 纹理贴图的应用 402
14.18 绘制深度缓冲的图像 403
14.19 Dirichlet域 403
14.20 使用模版缓冲区实现生存游戏 404
14.21 glDrawPixels()和glCopyPixels() 的其他应用 405
第15章 OpenGL 2.0和OpenGL着色语言 407
15.1 为什么要使用OpenGL 2.0 407
15.2 点块纹理 407
15.3 OpenGL图形管线和可编程着色管线 408
15.3.1 顶点处理 409
15.3.2 片断处理 410
15.4 使用GLSL着色器 411
15.4.1 着色器示例 411
15.4.2 OpenGL/GLSL接口 412
15.5 OpenGL着色语言 417
15.6 使用GLSL创建着色器 417
15.6.1 程序起点 417
15.6.2 声明变量 418
15.6.3 聚合类型 419
15.6.4 语句 423
15.6.5 函数 425
15.6.6 在GLSL程序中使用OpenGL 状态值 426
15.7 在着色器中使用纹理贴图 427
15.7.1 顶点着色器的细节 428
15.7.2 片断着色器 432
附录A 操作顺序 435
附录B 状态变量 439
附录C OpenGL和窗口系统 458
附录D GLUT基础知识 473
附录E 计算法线向量 478
附录F 齐次坐标和变换矩阵 482
附录G 编程提示 486
附录H OpenGL的不变性规则 489
附录I OpenGL着色语言内置的变量 和函数 491
术语表 505

教学资源推荐
作者: [英]大卫·贝尼昂(David Benyon)著
作者: 古燕莹 刘璟一 董鲁平 马石林 等
作者: [美] 保劳格·哈沃达尔(Parag Havaldar),杰拉德·梅迪奥尼(G·rard Medioni)著