首页>参考读物>计算机科学与技术>综合

OpenGL编程指南(原书第7版)
作者 : Dave Shreiner;The Khronos OpenGL Architecture Review Board
译者 : 李军 徐波 等译
出版日期 : 2010-02-22
ISBN : 978-7-111-29450-4
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 549
开本 : 16
原书名 : OpenGL Programming Guide(1E)
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书对OpenGL以及OpenGL实用函数库进行了全面而又权威的介绍,素有“OpenGL红宝书”之誉。本书的上一个版本覆盖了到OpenGL 2.1版的内容。本版涵盖了OpenGL 3.0和3.1的最新特性。本书以清晰的语言描述了OpenGL的功能以及许多基本的计算机图形技巧,例如创建和渲染3D模型、从不同的透视角度观察物体、使用着色、光照和纹理贴图使场景更加逼真等。另外,本书还深入探讨了许多高级技巧,包括纹理贴图、抗锯齿、雾和大气效果、NURBS、图像处理子集等。此外,本书还对一些重要的主题进行了讨论,例如提高性能、OpenGL扩展以及跨平台技术等。

图书特色

OpenGL编程指南(原书第7版)
经典的OpenGL红宝书,涵盖OpenGL 3.0和3.1的最新特性
(美)Dave Shreiner  The Khronos OpenGL ARB Working Group 著
李 军 徐 波 等译
OpenGL是一种功能强大的软件接口,既可以用于生成高质量的计算机图像,也可以用于编写使用2D和3D物体、位图和彩色图像的交互式应用程序。
本书对OpenGL以及OpenGL实用函数库进行了全面而又权威的介绍,素有“OpenGL红宝书”之誉。本书的上一个版本覆盖了截止OpenGL 2.1版的内容。这一版涵盖了OpenGL 3.0和3.1的最新特性。本书以清晰的语言描述了OpenGL的功能以及许多基本的计算机图形技巧,例如创建和渲染3D模型、从不同的透视角度观察物体、使用着色、光照和纹理贴图使场景更加逼真等。本书还深入探讨了许多高级技巧,包括纹理贴图、抗锯齿、雾和大气效果、NURBS、图像处理等。另外,本书还对一些重要的主题进行了讨论,例如提高性能、OpenGL扩展以及跨平台技术等。

本书进行了一些更新,涵盖了OpenGL 3.0和3.1的最新特性,包括:
使用帧缓冲区对象进行离屏渲染和纹理更新。
各种新的缓冲区对象类型的示例,包括uniform缓冲区对象、变换反馈缓冲区和顶点数组对象。
使用纹理数组提高使用众多纹理的性能。
使用图元重启和条件渲染来高效地进行渲染。
介绍OpenGL的废弃机制,以及如何针对OpenGL未来版本验证程序。

本书继续对OpenGL着色语言(GLSL)展开讨论,并解释了使用这种语言创建复杂图形效果并提升OpenGL计算威力的机制。OpenGL技术资料库(OpenGL Technical Library)提供了大量的OpenGL教程和参考书籍,它可以帮助程序员深入理解OpenGL,完全释放OpenGL的潜力。这个资料库最初由SGI开发,目前由Khronos OpenGL体系结构审核委员会(ARB)工作组维护,这是负责指导OpenGL以及相关技术发展和演变的行业协会。
作者简介
Dave Shreiner 是ARM公司的图形技术总监,长期担任SGI核心OpenGL组的成员。他首次开设了OpenGL的商业培训课程,拥有二十多年的计算机图形应用开发经验。Dave定期参加SIGGRAPH和其他全球性的图形工作会议。他是《OpenGL ES 2.0 Programming Guide》(Addison-Wesley,2009)和《OpenGL Reference Manual》(Addison-Wesley,2004)的作者,也是Addison-Wesley的OpenGL系列的编辑。
本书附录E~附录L可在华章网站上免费下载。

图书前言

OpenGL(Graphics Library,GL图形库)图形系统是图形硬件的一个软件接口,它允许我们创建交互性的程序,产生移动三维物体的彩色图像。使用OpenGL,我们可以对计算机图形技术进行控制,产生逼真的图像或者虚构出现实世界没有的图像。本书解释了如何使用OpenGL图形系统进行编程,实现所需要的视觉效果。
本书内容
  本书共分15章。前5章描述了一些基本信息,读者需要理解这些内容,才能在场景中绘制正确着色和光照的三维物体。
   第1章对OpenGL可以实现的功能进行简要的介绍。该章还提供了一个简单的OpenGL程序,并介绍需要了解的一些基本编程细节,有助于学习后续章节的内容。
   第2章解释如何创建一个物体的三维几何图形描述,并最终把它绘制到屏幕上。
   第3章描述三维模型在绘制到二维屏幕之前如何进行变换。我们可以控制这些变换,显示模型的特定视图。
   第4章描述如何指定颜色以及用于绘制物体的着色方法。
   第5章解释如何控制围绕一个物体的光照条件,以及这个物体如何对光照作出反应(也就是说,它是如何反射或吸收光线的)。光照是一个重要的主题,因为物体在没有光照的情况下看上去往往没有立体感。
  接下来的几章说明如何对三维场景进行优化以及如何添加一些高级特性。在没有精通OpenGL之前,读者可以选择不使用这些高级特性。有些特别高级的主题在出现时会有特殊的标记。
   第6章描述创建逼真场景所需要的一些基本技巧:alpha混合(创建透明物体)、抗锯齿(消除锯齿状边缘)、大气效果(模拟雾和烟雾)以及多边形偏移(在着重显示填充多边形的边框时消除不良视觉效果)。
   第7章讨论如何存储一系列的OpenGL命令,用于在以后执行。我们可以使用这个特性来提高OpenGL程序的性能。
   第8章讨论如何操作表示位图或图像的二维数据。位图的一种常见用途就是描述字体中的字符。
   第9章解释如何把称为纹理的一维、二维和三维图像映射到三维物体表面。纹理贴图可以实现许多非常精彩的效果。
   第10章描述OpenGL实现中可能存在的所有缓冲区,并解释如何对它们进行控制。我们可以使用这些缓冲区实现诸如隐藏表面消除、模板、屏蔽、运动模糊和景深聚焦等效果。
   第11章显示了如何使用GLU(OpenGL Utility Library,OpenGL工具函数库)中的分格化和二次方程函数。
   第12章介绍生成曲线和表面的高级技巧。
   第13章说明如何使用OpenGL的选择机制来选择屏幕上的一个物体。此外,该章还解释了反馈机制,它允许我们收集OpenGL所产生的绘图信息,而不是在屏幕上绘制物体。
   第14章描述如何用巧妙的或意想不到的方法来使用OpenGL,产生一些有趣的结果。这些技巧是通过对OpenGL及其技术前驱Silicon Graphics IRIS图形函数库的多年应用和实践总结出来的。
   第15章讨论OpenGL 2.0所引入的变化,包括对OpenGL着色语言的介绍。OpenGL着色语言通常又称为GLSL,它允许对OpenGL的顶点和片断处理阶段进行控制。这个特性可以极大地提高图像的质量,充分体现OpenGL的计算威力。
  另外,本书还包括几个非常实用的附录:
   附录A讨论了用于处理窗口系统操作的函数库。GLUT(OpenGL实用工具库)具有可移植性,它可以使代码更短、更紧凑。
   附录B列出了OpenGL所维护的状态变量,并描述了如何获取它们的值。
   附录C介绍了隐藏在矩阵转换后面的一些数学知识。
   附录D简单描述了窗口系统特定的函数库所提供的函数,它们进行了扩展,以支持OpenGL渲染。本附录讨论了X窗口系统、Apple的Mac OS和Microsoft Windows的窗口系统接口。
   附录E对OpenGL所执行的操作提供了一个技术性的浏览,简要描述了当应用程序执行时这些操作的出现顺序。
   附录F列出了一些基于OpenGL设计者思路的编程提示,这些可能对读者有用。
   附录G描述了OpenGL实现在什么时候以及什么地方必须生成OpenGL规范所描述的精确像素。
   附录H描述了如何计算不同类型的几何物体的法线向量。
   附录I列出了OpenGL着色语言所提供的所有内置的变量和函数。
   附录J介绍了各种浮点数、共享指数像素和纹理单元格式。
   附录K介绍了存储单成分和双成分压缩纹理的纹理格式。
   附录L介绍了GLSL 1.40的uniform变量缓存区的标准内存布局。
  最后,本书还提供了一个术语表,对本书所使用的一些关键术语进行了定义。
第7版的新增内容
  本书包含了OpenGL 3.0和OpenGL 3.1的新的和更新的内容。通过这些版本(这也是本书值得庆祝的18岁生日),OpenGL经历了与其之前的版本最显著的改变。3.0版添加了很多新的功能,并且添加了废弃模型,它建立了一种方法把陈旧的功能从库中删除。注意,只有新功能添加到了3.0版中,才会使其在源代码和二进制文件上都和之前的版本向后兼容。然而,很多功能标记为废弃的,表示可能在API未来的版本中删除。
  本书介绍的和OpenGL 3.0相关的更新内容包括:
  OpenGL中的新功能:
   OpenGL着色语言更新,创建了GLSL 1.30版。
   条件渲染。
   对映射缓冲区对象的内存的细粒度访问以用于更新和读取。
   除了纹理图像格式(在OpenGL 2.1中加入),还有用于帧缓冲区的浮点数像素格式。
   帧缓冲区和渲染缓冲区对象。
   为小的动态范围数据采用紧凑的浮点表示,以减少内存存储占用。
   改进了对复制数据时的多采样缓冲区交互的支持。
   纹理图像和渲染缓冲区中的非规范化的整数值保留它们最初的表示,相对于OpenGL将这些值映射到范围[0,1]的常规操作。
   支持一维纹理数组和二维纹理数组。
   附加的包装像素格式支持访问新的渲染缓冲区。
   针对多渲染目标,分开混合和写屏蔽控制。
   纹理压缩格式。
   纹理的单成分和双成分的内部格式。
   转换反馈。
   顶点数组对象。
   sRGB帧缓冲区格式。
   废弃模式的深入讨论。
   修复错误并更新标记名。
  对于OpenGL 3.1:
   标识出OpenGL 3.0中因废弃而要删除的功能。
  新的功能:
   OpenGL着色语言更新,创建了GLSL 1.40版。
   实例化渲染。
   缓冲区之间高效的服务器端数据复制。
   在单个调用作用渲染多个类似的图元,用一个特殊标记(由用户指定)来表示何时重新启动一个图元。
   纹理缓冲区对象。
   纹理矩形。
   uniform缓冲区对象。
   带符号的规范化纹理单元格式。
阅读本书所需要的预备知识
  本书假定读者知道如何使用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 3.0版和OpenGL 3.1版所有过程的完整文档。这些文档代替了OpenGL体系结构审核委员会和Addison Wesley出版的《OpenGL Reference Manual》(OpenGL参考手册)。
  OpenGL实际上是一种独立于硬件的程序接口规范。在一种特定类型的硬件上,所使用的是它的一种特定实现。本书解释了如何使用所有的OpenGL实现进行编程。但是,由于各种OpenGL实现可能存在微小的差别(例如,在渲染性能以及提供额外的、可选的特性方面),因此读者可能需要寻找与自己所使用的特定OpenGL实现相关的补充文档。另外,读者所使用的系统还可能提供了与OpenGL相关的实用函数库、工具箱、编程和调试支持工具、各种窗口部件、示例程序和演示程序等。
如何获取本书示例程序的源代码
  本书包含了许多示例程序,以说明各种OpenGL编程技巧的具体用法。由于本书的读者背景各不相同,从新手到老手,既有计算机图形学的知识又有OpenGL的知识,本书中的示例通常都展示了一个特定渲染条件下的最简单的方法,并且使用OpenGL 3.0接口来说明。这么做的目的主要是为了让那些刚开始接触OpenGL的读者能够更直接和更容易地接受本书所介绍的内容。对于那些有着广泛经验、想要寻找使用最新的API功能实现的读者,我们首先感谢你耐心地阅读那些早已掌握的内容,并且建议访问我们的Web站点:http://www.opengl-redbook.com/。
  在那里,你将会找到本书中所有示例的源代码,使用最新功能的实现,以及介绍从一个版本的OpenGL迁移到另一个版本所需的修改的额外讨论。
  本书中包含的所有程序都使用了OpenGL Utility Toolkit (GLUT),其最初的作者是Mark Kilgard。对于这个版本,我们使用了开发freeglut项目的人们所编写的GLUT接口的开源版本。他们扩展了Mark最初的工作(那些工作在Mark Kilgard的《OpenGL Programming for the X Window System》Addison-Wesley,1996,一书中有详细的介绍)。可以从如下地址找到他们的开源项目页面:http://freeglut.sourceforge.net/。
  可以从这个站点获取它们的实现的代码和二进制文件。
  本书1.6节和附录A给出了关于使用GLUT的更多信息。其他有助于更快地学习和使用OpenGL和GLUT编程的资源,可以在OpenGL Web的资源页面找到:http://www.opengl.org/resources/。
  许多OpenGL实现还可能包含一些示例代码,作为系统的一部分。这些源代码可能是这种OpenGL实现应该使用的最佳代码,因为它可能针对当前的系统进行了优化。读者可以参阅与自己使用的系统相关的OpenGL文档,了解从哪里下载这些示例程序。
Nate Robin的OpenGL教程
  Nate Robin编写了一套教学程序,用于演示OpenGL编程的基本概念。它允许用户修改函数的参数,以交互的方式观察它们的效果。这套教程所涵盖的主题包括变换、光照、雾和纹理。我们极力推荐使用这些教程。它们具有可移植性,并且使用了前面所提到的GLUT。要获取这些教程的源代码,可以访问下面这个网站:
http://www.xmission.com/~nate/tutors.html
勘误表
  本书也会存在一些错误。此外,在本书出版过程中,OpenGL也在更新:随着规范和新规范的发布,错误也会更正并加以澄清。我们在Web站点http://www.opengl-redbook.com/维护了一个错误和更新的列表,那里还提供了工具来报告你可能会发现的任何新的错误。如果你发现一个错误,请接受我们的道歉,并且提前感谢你的报告,我们将尽快地更正。
约定字体
  本书使用如下的约定字体:
   粗体—表示命令和函数的名称和矩阵。
   斜体—变量、参数、参数名、空间维度、矩阵成员和第一次出现的关键术语。
   常规字体—每句类型和定义的常量。
  代码示例以等宽字体显示,命令概览放在专门的框线中。
  在命令概览部分,花括号表示可选的数据类型。在下面的例子中,glCommand具有4个可能的后缀:s、i、f和d,分别表示数据类型GLshort、GLint、GLfloat和GLdouble。在glCommand函数的原型中,TYPE表示这些后缀所提示的数据类型。
  void glCommand{sifd}(TYPE x1, TYPE y1, TYPE x2, TYPE y2);
区分废弃的功能
  正如前面所提到的,本书的这一版本主要针对OpenGL 3.0和OpenGL 3.1。OpenGL 3.0对于目前可用的任何版本完全向后兼容。然而,OpenGL 3.1采用了废弃模式,删除了很多与现代图形系统不太兼容的旧功能。尽管很多功能从“核心的”OpenGL中删除了,为了消除版本之间的过渡,OpenGL ARB发布了GL_ARB_compatibility扩展。如果你的实现支持这个扩展,它将能够使用所有删除的功能。为了便于识别那些从OpenGL 3.1中删除了的、仍然得到兼容扩展支持的功能,在本书中,介绍命令或函数的边框的旁边会给出一个信息表格,其中列出受到影响的函数或符号。
尽管有些功能从OpenGL中废弃并删除了,但一些这样的功能影响着库,例如OpenGL Utility Library,通常称之为GLU。这些在OpenGL 3.1的变化中受到影响的函数,也会在旁边的表格中列出。

上架指导

计算机\程序设计

封底文字

封底文字
OpenGL是一种功能强大的软件接口,用于生成高质量的计算机图像,也可以用于编写使用2D和3D物体、位图和彩色图像的交互性应用程序。
本书对OpenGL以及OpenGL实用函数库进行了全面而又权威的介绍,素有“OpenGL红宝书”之誉。本书的上一个版本覆盖了到OpenGL 2.1版的内容。本版涵盖了OpenGL 3.0和3.1的最新特性。本书以清晰的语言描述了OpenGL的功能以及许多基本的计算机图形技巧,例如创建和渲染3D模型、从不同的透视角度观察物体、使用着色、光照和纹理贴图使场景更加逼真等。另外,本书还深入探讨了许多高级技巧,包括纹理贴图、抗锯齿、雾和大气效果、NURBS、图像处理子集等。此外,本书还对一些重要的主题进行了讨论,例如提高性能、OpenGL扩展以及跨平台技术等。
第七版进行了一些更新,涵盖了OpenGL 3.0和3.1的最新特性,包括:
l 使用帧缓冲区对象进行离屏渲染和纹理更新
l 各种新的缓冲区对象类型的示例,包括uniform缓冲区对象、变换反馈缓冲区和顶点数组缓冲区
l 使用纹理数组提高使用众多纹理的性能
l 使用图元重启和条件渲染来高效地进行渲染
l 介绍OpenGL的废弃机制,以及如何针对OpenGL未来版本验证你的程序
本版继续对OpenGL着色语言(GLSL)展开讨论,并解释了使用这种语言创建复杂图形效果并提升OpenGL计算威力的机制。OpenGL技术资料库(OpenGL Technical Library )提供了大量的OpenGL教程和参考书籍,它可以帮助程序员深入理解OpenGL,完全释放OpenGL的潜力。这个库最初由SGI开发,目前由Khronos OpenGL体系结构审核委员会(ARB)工作组维护,这是负责指导OpenGL以及相关技术的发展和演变的行业协会。
Dave Shreiner 是ARM公司的图形技术总监,长期担任SGI核心OpenGL组的成员。他首次开设了OpenGL的商业培训课程,并且有着二十年的计算机图形应用开发经验。Dave定期参加SIGGRAPH和其他一些全球性的图形工作会议。他是《OpenGL ES 2.0 Programming Guide》(Addison-Wesley,2009)和《OpenGL Reference Manual》(Addison-Wesley)的作者,也是Addison-Wesley的OpenGL系列的系列编辑。

作者简介

Dave Shreiner;The Khronos OpenGL Architecture Review Board:暂无简介

译者简介

李军 徐波 等译:暂无简介

译者序

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由SGC、DEC、IBM、Intel和Microsoft等著名公司于1992年创立,后来又陆续添加了nVidia、ATI等图形芯片领域的巨擎。ARB每隔4年举行一次会议,对OpenGL规范进行维护和改善,并出台计划对OpenGL标准进行升级,使OpenGL一直保持与时代同步。
  2006年,SGI公司把OpenGL标准的控制从ARB移交给一个新的工作组—Khronos小组(www.khronos.org)。Khronos是一个由成员提供资金的行业协会,专注于开放媒体标准的创建和维护。目前,Khronos负责OpenGL的发展和升级。
  《OpenGL编程指南》就是由Khronos小组编写的官方指南,是OpenGL领域的权威著作,有“OpenGL红宝书”之称,曾经帮助许多程序员走上了OpenGL专家之路。第7版在第6版的基础上又有所改进,介绍了OpenGL 3.0和OpenGL 3.1的新的和更新的内容。
  本书历经多次版本升级,其中文版的翻译也是一项延续性的工作,凝结了许多人的辛勤工作。徐波等曾承担《OpenGL编程指南》第5版和第6版的主要翻译工作。李军在第6版的中文版的基础上,负责了第7版新增内容的翻译和更新工作。参与第7版翻译工作的还有刘金华、刘伟超、罗庚臣、刘二然、郑芳菲、庄逸川、王世高、郭莹、陈、邓勇、何进伟、贾晓斌、汪蔚和齐国涛。机械工业出版社华章分社的编辑为本书的出版付出了辛勤劳动,感谢他们!
  译者
  2009年10月

图书目录

译者序
前言
第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相关的函数库 9
1.6.1 包含文件 9
1.6.2 OpenGL实用工具库(GLUT) 10
1.7 动画 13
1.7.1 暂停刷新 14
1.7.2 动画=重绘+交换 15
1.8 OpenGL及其废弃机制 17
1.8.1 OpenGL渲染环境 17
1.8.2 访问OpenGL函数 18
第2章 状态管理和绘制几何物体 19
2.1 绘图工具箱 20
2.1.1 清除窗口 20
2.1.2 指定颜色 22
2.1.3 强制完成绘图操作 23
2.1.4 坐标系统工具箱 24
2.2 描述点、直线和多边形 25
2.2.1 什么是点、直线和多边形 25
2.2.2 指定顶点 27
2.2.3 OpenGL几何图元 27
2.3 基本状态管理 31
2.4 显示点、直线和多边形 32
2.4.1 点的细节 32
2.4.2 直线的细节 33
2.4.3 多边形的细节 36
2.5 法线向量 41
2.6 顶点数组 43
2.6.1 步骤1:启用数组 44
2.6.2 步骤2:指定数组的数据 44
2.6.3 步骤3:解引用和渲染 46
2.6.4 重启图元 51
2.6.5 实例化绘制 53
2.6.6 混合数组 54
2.7 缓冲区对象 57
2.7.1 创建缓冲区对象 57
2.7.2 激活缓冲区对象 58
2.7.3 用数据分配和初始化缓冲区对象 58
2.7.4 更新缓冲区对象的数据值 60
2.7.5 在缓冲区对象之间复制数据 62
2.7.6 清除缓冲区对象 63
2.7.7 使用缓冲区对象存储顶点数组数据 63
2.8 顶点数组对象 65
2.9 属性组 69
2.10 创建多边形表面模型的一些提示 71
第3章 视图 77
3.1 简介:用照相机打比方 78
3.1.1 一个简单的例子:绘制立方体 80
3.1.2 通用的变换函数 83
3.2 视图和模型变换 84
3.2.1 对变换进行思考 85
3.2.2 模型变换 86
3.2.3 视图变换 89
3.3 投影变换 93
3.3.1 透视投影 94
3.3.2 正投影 95
3.3.3 视景体裁剪 96
3.4 视口变换 96
3.4.1 定义视口 96
3.4.2 变换深度坐标 97
3.5 和变换相关的故障排除 98
3.6 操纵矩阵堆栈 100
3.6.1 模型视图矩阵堆栈 101
3.6.2 投影矩阵堆栈 102
3.7 其他裁剪平面 102
3.8 一些组合变换的例子 104
3.8.1 创建太阳系模型 104
3.8.2 创建机器人手臂 107
3.9 逆变换和模拟变换 109
第4章 颜色 113
4.1 颜色感知 113
4.2 计算机颜色 114
4.3 RGBA和颜色索引模式 115
4.3.1 RGBA显示模式 116
4.3.2 颜色索引模式 117
4.3.3 在RGBA和颜色索引模式中进行选择 118
4.3.4 切换显示模式 118
4.4 指定颜色和着色模型 119
4.4.1 在RGBA模式下指定颜色 119
4.4.2 在颜色索引模式下指定颜色 120
4.4.3 指定着色模型 121
第5章 光照 123
5.1 隐藏表面消除工具箱 124
5.2 现实世界和OpenGL光照 125
5.2.1 环境光、散射光、镜面光和发射光 125
5.2.2 材料颜色 126
5.2.3 光和材料的RGB值 126
5.3 一个简单的例子:渲染光照球体 127
5.4 创建光源 129
5.4.1 颜色 130
5.4.2 位置和衰减 131
5.4.3 聚光灯 132
5.4.4 多光源 133
5.4.5 控制光源的位置和方向 133
5.5 选择光照模型 138
5.5.1 全局环境光 138
5.5.2 局部的观察点或无限远的观察点 138
5.5.3 双面光照 139
5.5.4 镜面辅助颜色 139
5.5.5 启用光照 140
5.6 定义材料属性 140
5.6.1 散射和环境反射 141
5.6.2 镜面反射 141
5.6.3 发射光颜色 142
5.6.4 更改材料属性 142
5.6.5 颜色材料模式 143
5.7 和光照有关的数学知识 146
5.7.1 材料的发射光 147
5.7.2 经过缩放的全局环境光 147
5.7.3 光源的贡献 147
5.7.4 完整的光照计算公式 148
5.7.5 镜面辅助颜色 148
5.8 颜色索引模式下的光照 149
第6章 混合、抗锯齿、雾和多边形偏移 151
6.1 混合 152
6.1.1 源因子和目标因子 152
6.1.2 启用混合 154
6.1.3 使用混合方程式组合像素 154
6.1.4 混合的样例用法 156
6.1.5 一个混合的例子 157
6.1.6 使用深度缓冲区进行三维混合 159
6.2 抗锯齿 162
6.2.1 对点和直线进行抗锯齿处理 164
6.2.2 使用多重采样对几何图元进行抗锯齿处理 169
6.2.3 对多边形进行抗锯齿处理 172
6.3 雾 172
6.3.1 使用雾 173
6.3.2 雾方程式 175
6.4 点参数 181
6.5 多边形偏移 182
第7章 显示列表 185
7.1 为什么使用显示列表 185
7.2 一个使用显示列表的例子 186
7.3 显示列表的设计哲学 188
7.4 创建和执行显示列表 189
7.4.1 命名和创建显示列表 191
7.4.2 存储在显示列表里的是什么 191
7.4.3 执行显示列表 193
7.4.4 层次式显示列表 193
7.4.5 管理显示列表索引 194
7.5 执行多个显示列表 194
7.6 用显示列表管理状态变量 199
第8章 绘制像素、位图、字体和图像 202
8.1 位图和字体 203
8.1.1 当前光栅位置 204
8.1.2 绘制位图 205
8.1.3 选择位图的颜色 206
8.1.4 字体和显示列表 206
8.1.5 定义和使用一种完整的字体 207
8.2 图像 209
8.3 图像管线 215
8.3.1 像素包装和解包 216
8.3.2 控制像素存储模式 217
8.3.3 像素传输操作 219
8.3.4 像素映射 221
8.3.5 放大、缩小或翻转图像 222
8.4 读取和绘制像素矩形 224
8.5 使用缓冲区对象存取像素矩形数据 227
8.5.1 使用缓冲区对象传输像素数据 227
8.5.2 使用缓冲区对象提取像素数据 228
8.6 提高像素绘图速度的技巧 229
8.7 图像处理子集 230
8.7.1 颜色表 231
8.7.2 卷积 234
8.7.3 颜色矩阵 240
8.7.4 柱状图 241
8.7.5 最小最大值 243
第9章 纹理贴图 245
9.1 概述和示例 248
9.1.1 纹理贴图的步骤 248
9.1.2 一个示例程序 249
9.2 指定纹理 251
9.2.1 纹理代理 255
9.2.2 替换纹理图像的全部或一部分 257
9.2.3 一维纹理 259
9.2.4 三维纹理 261
9.2.5 纹理数组 264
9.2.6 压缩纹理图像 265
9.2.7 使用纹理边框 267
9.2.8 mipmap:多重细节层 267
9.3 过滤 275
9.4 纹理对象 277
9.4.1 命名纹理对象 277
9.4.2 创建和使用纹理对象 278
9.4.3 清除纹理对象 280
9.4.4 常驻纹理工作集 280
9.5 纹理函数 282
9.6 分配纹理坐标 284
9.6.1 计算正确的纹理坐标 285
9.6.2 重复和截取纹理 286
9.7 纹理坐标自动生成 289
9.7.1 创建轮廓线 289
9.7.2 球体纹理 293
9.7.3 立方图纹理 294
9.8 多重纹理 296
9.9 纹理组合器函数 299
9.10 在纹理之后应用辅助颜色 303
9.10.1 在禁用光照时使用辅助颜色 303
9.10.2 启用光照后的辅助镜面颜色 303
9.11 点块纹理 303
9.12 纹理矩阵堆栈 304
9.13 深度纹理 305
9.13.1 创建阴影图 306
9.13.2 生成纹理坐标并进行渲染 307
第10章 帧缓冲区 309
10.1 缓冲区及其用途 310
10.1.1 颜色缓冲区 311
10.1.2 清除缓冲区 312
10.1.3 选择用于读取和写入的颜色缓冲区 313
10.1.4 缓冲区的屏蔽 315
10.2 片断测试和操作 316
10.2.1 裁剪测试 316
10.2.2 alpha测试 317
10.2.3 模板测试 318
10.2.4 深度测试 322
10.2.5 遮挡查询 322
10.2.6 条件渲染 324
10.2.7 混合、抖动和逻辑操作 325
10.3 累积缓冲区 327
10.3.1 运动模糊 328
10.3.2 景深 328
10.3.3 柔和阴影 331
10.3.4 微移 331
10.4 帧缓冲区对象 332
10.4.1 渲染缓冲区 333
10.4.2 复制像素矩形 340
第11章 分格化和二次方程表面 342
11.1 多边形分格化 342
11.1.1 创建分格化对象 343
11.1.2 分格化回调函数 343
11.1.3 分格化属性 347
11.1.4 多边形定义 350
11.1.5 删除分格化对象 352
11.1.6 提高分格化性能的建议 352
11.1.7 描述GLU错误 352
11.1.8 向后兼容性 352
11.2 二次方程表面:渲染球体、圆柱体和圆盘 353
11.2.1 管理二次方程对象 354
11.2.2 控制二次方程对象的属性 354
11.2.3 二次方程图元 355
第12章 求值器和NURBS 360
12.1 前提条件 360
12.2 求值器 361
12.2.1 一维求值器 361
12.2.2 二维求值器 365
12.2.3 使用求值器进行纹理处理 369
12.3 GLU的NURBS接口 371
12.3.1 一个简单的NURBS例子 371
12.3.2 管理NURBS对象 374
12.3.3 创建NURBS曲线或表面 377
12.3.4 修剪NURBS表面 380
第13章 选择和反馈 383
13.1 选择 383
13.1.1 基本步骤 384
13.1.2 创建名字栈 384
13.1.3 点击记录 385
13.1.4 一个选择例子 386
13.1.5 挑选 389
13.1.6 编写使用选择的程序的一些建议 397
13.2 反馈 398
13.2.1 反馈数组 399
13.2.2 在反馈模式下使用标记 400
13.2.3 一个反馈例子 400
第14章 OpenGL高级技巧 404
14.1 错误处理 405
14.2 OpenGL版本 406
14.2.1 工具函数库版本 407
14.2.2 窗口系统扩展版本 407
14.3 标准的扩展 407
14.4 实现半透明效果 409
14.5 轻松实现淡出效果 409
14.6 使用后缓冲区进行物体选择 411
14.7 低开销的图像转换 411
14.8 显示层次 412
14.9 抗锯齿字符 413
14.10 绘制圆点 414
14.11 图像插值 414
14.12 制作贴花 415
14.13 使用模板缓冲区绘制填充的凹多边形 416
14.14 寻找冲突区域 416
14.15 阴影 417
14.16 隐藏直线消除 418
14.16.1 使用多边形偏移实现隐藏直线消除 418
14.16.2 使用模板缓冲区实现隐藏直线消除 419
14.17 纹理贴图的应用 419
14.18 绘制深度缓冲的图像 420
14.19 Dirichlet域 420
14.20 使用模板缓冲区实现生存游戏 421
14.21 glDrawPixels()和glCopyPixels()的其他应用 422
第15章 OpenGL着色语言 424
15.1 OpenGL图形管线和可编程着色器 424
15.1.1 顶点处理 425
15.1.2 片断处理 426
15.2 使用GLSL着色器 427
15.2.1 着色器示例 427
15.2.2 OpenGL/GLSL接口 428
15.3 OpenGL着色语言 432
15.4 使用GLSL创建着色器 433
15.4.1 程序起点 433
15.4.2 声明变量 433
15.4.3 聚合类型 434
15.5 uniform块 439
15.5.1 在着色器中指定uniform变量 440
15.5.2 访问在uniform块中声明的uniform变量 440
15.5.3 计算不变性 446
15.5.4 语句 446
15.5.5 函数 448
15.5.6 在GLSL程序中使用OpenGL状态值 449
15.6 在着色器中访问纹理图像 449
15.7 着色器预处理器 452
15.7.1 预处理器指令 452
15.7.2 宏定义 452
15.7.3 预处理器条件 453
15.7.4 编译器控制 453
15.8 扩展处理 454
15.9 顶点着色器的细节 454
15.10 变换反馈 458
15.11 片断着色器 462
附录A GLUT(OpenGL实用工具库)基础知识 464
附录B 状态变量 468
附录C 齐次坐标和变换矩阵 495
附录D OpenGL和窗口系统 499
术语表 511

教学资源推荐
作者: [美]弗兰克·M. 卡拉诺(Frank M.Carrano)蒂莫西·M. 亨利(Timothy M. Henry) 著
作者: [美]丹尼尔·A.弗莱施(Daniel A. Fleisch)著
作者: 麻志毅 编著
参考读物推荐
作者: [美]卡蒂克·雷迪·博卡(Karthiek Reddy Bokka) [印]舒班吉·霍拉(Shubhangi Hora) [德]塔努吉·贾因(Tanuj Jain) [美]莫尼卡·瓦姆布吉(Monicah Wambugu) 著
作者: 宋天龙 著
作者: 刘旭 王萌萌 穆松鹤 等编著
作者: (美)Bruce Eckel, Chuck Allison 著