OpenGL编程指南第七版(PDF扫描版)

所需积分/C币:45 2012-01-10 01:09:33 27.58MB PDF
收藏 收藏
举报

openGL编程指南第七版,包括全部章节
前言 OpenGL( Graphics Library,GL图形库)图形系统是图形硬件的一个软件接口,它允许我们创 建交互性的程序,产生移动三维物体的彩色图像。使月 OpenGL,我们可以对计算机图形技术进行 控制,产生遇真的图像或者虚构出现实世界没有的图像。本书解释了如何使用 OpenGL图形系统进 行编程,实现所需要的视觉效果 本书内容 本书共分15章。前5章描述了一些基信息,读者需要理解这些内容,才能在场景中绘制正确 着色和光照的三维物体。 第1对 OpenGL可以实现的功能进行简要的介绍,该章还提供了一个筒单的 OpenG程序,并 介绍帝要了解的一些基本编程细节,有助于学习后续章节的内容。 第2章解释如何创建一·个物体的二维几何图形描述,并最终把它绘制到屏幕上。 第3章摧述三维模型在绘制到二维屏幕之前如何进行变换。我们可以控制迷些变换,显示模型 的特定视图 °第4章描述如何指定颜色以及用于绘制物体的着色方法 第5章解释如何控制围绕一个物体的光照条件,以及这个物体如何对光照作出反应(也就是说, 它是如何反射或吸收光线的)光照是一个重要的主题,因为物体在没有光照的情况下看上去 往往没有立体毖。 接下来的几章说明如何对三维场景进行优化以及刘何加一些级特性。在没有精通 OpengL 之前,读者可以选择不使用这些高级特性。有些特高级的主题在出现时会有特殊的标记。 第6章描述创建逼真场景所需要的一些基本技巧; alpha混合(创建透明物体)、抗锯齿(消除 锯齿状边緣)、大气效果(模拟雾和烟雾)以及多边形偏移(在着重显示填充多边形的边框时 消除不良枧觉效果)。 第7章讨论如何存储一系列的0pnL命令,用于在以后执行。我们可以使用这个特性来提高 OpengL程序的性能。 ·第8章讨论如何操作表示位图或图像的二维数据。位图的一种常见用途就是描述字体中的字符 第9章解释如何把称为纹理的一维、二维和三维图像映射到三维物体表面。软理贴图可以实现 许多非常精彩的效果。 第]0章描述υ pen gL实现中可能存在的所有缓冲风,并解释如何对它们进行控制。我们可以使 用这些緩冲区实现诪如隐藏表面消除、模板、屏薮、运动模糊和景深聚焦等效果。 第1章显示了如何使用GLU( OpenGL Utility Library, Opengl工具函数库)中的分格化和二 次方程函数。 第12章介绍生成曲线和表面的高级技巧。 第]3章说明如何使用 OpenGL的迷择机制来选择屏幕上的一个物体。此外,该章还解释了反馈 机制,它允许我们收集Open所产生的绘图信息,而不是在屏幕上绘制物体。 第14章揹述如何用巧妙的或意想不到的方法来使用 OpenGL,产生一些有趣的拮果。这些技巧 是通过对 OpengL及其技术前驱 Silicon Graphics IR图形函数库的多年应用和实践总结出来的。 第15讨论pnGL2.所引人的变化,包括对 OpenG若色语言的介绍。 OpenGL着色语言通 常又称为GLSL,它允许对OpnL的顶点和片断处理阶段进行控制。这个特性可以极大地提 高图像的质量,充分体现 OpenGL的计算威力。 另外,本书还包括几个非常实用的附录: ·附录A讨论了用于处理窗口系统操作的函数库。(UT( Opengl实用工具库)具有可移植甡, 它可以使代码更短、更紧凑。 附录B列出了 OpenGl所维护的状杰变量,并挡述了如何获取它们的值。 附录C介绍了隐藏在矩阵转换后面的一些数学知识。 附录D单描述了窗口系统特定的函数库所提供的函数,它们进行了扩展,以支持 Open gL渲 染。本附录讨论了X窗口系统、 Apple的 Mac Os和 Microsoft windows的窗口系统接口。 附录E对 OpenGL所执行的操作提供了一个技术性的浏览,简要描述了当应用程序执行时这些 操作的出现顺序。 附录F列出了一些基于 OpenGL设计者思踏的编程提示,这些可能对读者有用。 ·附录G描述了 OpenGL实现在什么时缑以及什么地方必須生成 OpenGL规范所描述的精确像素。 ·附录H描述了如何计算不同类型的几何物体的法线向量。 附录列出了 OpenGL着色语言所提供的所有内置的变量和函数 附介绍了各种浮点数、共享指数像素和纹理单元格式。 附录K介绍了存储单成分和双成分压维纹理的纹理格式。 附录L介绍了 GLSL I40的 uniforn变量缓存区的标准内存布局。 最后,本书述提供了一个术语表,对本书所使用的一些关键术语进行了定义。 第7版的新增内容 书包含了 OpenGL30和pen(L3,1的新的和更新的内容。通过这些版本(这也是本书值得庆 祝的18岁生日), OpenGL经历了与其之前的版本最显著的改变。30版添加了很多新的功能,并且添 加了废弃模型,它建立了一种方法把陈旧的功能从库中删除。注意,只有新功能派加到了30版中, 才会使其在源代码和二进制文件上都和之前的版本向后兼容。然而,很多功能标圮为废弃的,表示 可能在API未来的版本中删除。 本书介绍的和 OpenGL30相关的更新内容包括 OpenGL中的新功能 OpnL着色语言更新,创建了GLSL130版。 条件渲染。 对映射缓冲区对象的内存的细粒度访问以用于更新和读取 ·除了纹理图像格式(在Open2中加入),懣有用于帧缓冲区的浮点数像素格式 ·帧缓冲区和渲染缓冲区对象。 为小的动态范围数据采用紧凑的浮点表示,以减少内存存储占用。 ⅵI 改进了对复制数据时的多采样缓冲区交互的支持 ·纹理图傢和渲染缓冲区中的非规范化的整数值保留它们最初的表示,相对于 OpengL将这些值 映射到范围[01]的常规操作。 支持一维纹理数组和二维纹理数组。 ·附加的包装像素格式文持访问新的染缓冲区。 针对多渲染∏标,分开混合和写屏葳控制。 ·纹理压缩格式。 纹理的单成分和双成分的内部格式。 转换反馈。 顶点数组对象。 ·RGB帧缓冲区格式 ·废弃模式的深入讨论。 修复错误并更新标记名。 对于 OpenGL3!: 标识出 OpenGL3中因废弃而要删除的功能 新的功能: OpenGL着色培言更新,创建了GLSL140版。 °实例化渲染。 °缓冲区之间高效的服务器端数据复制。 ·在单个调用作用渲染多个类似的图元,用一个特殊标记(由用户指定)来表示何时重新启动 一个图元。 纹理缓冲区对象 纹理矩形。 uniform缓冲区对象。 带符号的规范化纹理单元格式。 阅读本书所需要的预备知识 本书假定读者知道如何使用C语言编写程序,并且了解一些数学背景知识(几何、三角、线性 代数、积分和微分几何)。即使读者对计算机图形技术领域了解不多,仍然能够理解本书所讨论的 绝大部分内容。当然,计算机图形学是一个巨大的主題,因此读者最好能够扩展己在这个领域的 知识。下面是我们推荐的两本参考书 ° Computer Graphics: Principles and Practice》:作者 James r, Foley、 Andries van dam Steven K feiner和 ohn F. Hughes( Addison-Wesley,1990)。该书是计算机图形学领域的百科 仝书,它包括了丰富的信息。但是,读者在阅读这本书之前最好已经对计算杋图形学有一定 程度的了解。 《3 D Computer Graphics》:作者 Andrew s. Glassner( The Lyons Press,1994) 。该书对计算机 图形学进行了非技术性的、通俗易懂的介绍。这本书重点介绍计算机图形学可以实现的视觉 效果,而不是实现这些效果所需要的技术 另外,读者还可以访问0 penGL的官方网站。这个网站包含了各种类型的通用信息,包括软件 ⅤI 示傀程序、文档、FAQ、讨论版和新闻等。如棵读者遇到任何 OpenGL问题,这是首先应该想到的 去处;httpawww,openglorga 另外,opcn(L官方网站记录了组成 OpenGL3版和 OpenGl3.1版所有过程的完整文档。这些 文档代替了Opcn(L体系结构审核委员会和 Addison Wesley ht版的《 OpenGL Reference Manual》 ( OpenGL参考手册) OpenGL实际上是一种独立于硬件的程序接口规范。在一种特定类型的硬件上,所使用的是它的 一种特定实现。木书解释了如何使用所有的opcn实现进行编程。但是,由于各种 OpenGL实现可能 存在微小的差别(例如,在渲染性能以及提供额外的,可选的特性方面),因此读者可能需要寻找与 白己所使用的特定 OpenGL实现相关的补充文档。另外,读者所使用的系统还可能提供了与 OpenGL相 关的实用函数库、工具箱、编程和调试支持工具、各种窗口泙件,示例程序和演示程序等。 如何获取本书示例程序的源代码 本书包含了许多示例程序,以说明各种 OpengL编程技巧的具体用法。由于本的读者背景各 不相同,从新手到老手,既有计算机图形学的知识又有 OpenGL的知识,本书中的示例递常都展示 了一个特定渲染条件下的最简单的方浃,并月使用 OpenGL30接口来说明。这么做的目的士要是为 了计那些刚开始接触 Opengl的读者能够吏宜接和更容易地接受本书所介绍的内容。对于那些有者 广泛经验、想罢寻找使用最新的API功能实现的读者,我们首先惡谢你耐心地阅读那些早已掌握的 内容,并且建议访问我们的Web站点:htp:www.opengredbook。 在那旦,你将会找到木书中所有示例的源代冯,使用最新功能的实现,以及介绍从个版本的 enCL迁移到另一个版本所需的修改的额外讨论。 木书中包含的所有程序都使用了 OpenGL Utility Toolkit(GLUT),其最初的作者是 Mark kilgard 对于这个版本,我们使用了开发reg项目的人们所编亏的LUT接凵的开源版本。他们扩展了 Mk最初的工作(那些工作任 Mark hilgard的 OpengL Programming for the X Window System Addison-Wesley,1996,一书中有详细的介绍)。可以从如下地址找到他们的开源项口页面: http://freeglut.sourceforge.net/ 可以从这个站点获取它们的实现的代码和二进制文件 本书1.6节和附录A给出了关于使用GLUT的更多倍息。其他有助于更快地学习和使用 OpengL和 GLUT编程的资源,可以在OpenGLWeb的资源页面找到:hup:/www.opengl.orp/resources/ 许多 OpenGL实现还可能包含一些示例代码,作为系统的一部分。这些源代码可能是这种 OpenGL实现应该使用的最佳代码,因为它可能针对当前的系进行了优化。读者可以参阅与自己 使用的系统相关的 OpenGL文档,了解从哪甲下载这些示例程序。 Nate Robin的 OpenGL教程 Nate robin编写了一套教学程序,用于演示 OpengL编程的基本概念。它允许用户修改函数 的参数,以交互的方式观察它们的效果。这套教程所涵盖的主题包括变换、光照、雾和纹理。 我们极力推荐使用这些教程。它们具有可移植性,并且使用了前面所提到的GLUT。要获取这 些教的源代码,可以访问下面这个网站: http://www.xmission.com/--nate/tutors.html VIII 勘误表 本书也会存在一些错误。此外,在本书出版过程中, OpenGL也在更新:随着规范和新规范的 发布,错误也会更正并加以澄清。我们在Web站点hrp:ww,peng- redbook. corr/维护了一个错误 和更新的列表,那里还捉供了工具来报告你可能会发现的任何新的错误。如果你发现一个错误,请 接受我们的道歉,并且提前感谢你的报告,我们将尽快地更止。 约定字体 本书使用如下的约定字体 粗体——一表示命令和函数的名称和矩阵。 变量、参数、参数名、空间维度、矩阵成员和第一次出现的关键术语。 常规宁体——每们类型和定义的常量。 代码示例以等字体显示,命令概览放在专门的框线中。 在命令概览部分,花括号表示可选的数据类型。在下面的例子中, cOMmand具有4个可能的 后缀;S、i、f和d,分别表示数据类型 GLshorl, GLint, FLoat和 GLdoublo。在 coMmand函数的 原型中,TYPE表示这些后缨所提示的数据类型 void glCommandsifd)(TYPE xl. TYPE y1, TYPE x2, TYPE y2) 区分废弃的功能 正如前面所提到的,本书的这一版本主要针对 OpenGL3.0和 OpenG,3 OpenGL3.对于目前可用的任何版衣完全向后兼容。然而. OpenGL31采用了废 兼容性扩展 glBegin 弃模式,删除了很多与现代图形系统不太兼容的旧功能。尽管很多功能从“核心| GL POLYGON 的” OpenGL中删除了,为了消除版本之间的过渡, OpenGL arb发布了 GL ARB_ compatibility扩展。如果你的实现支持这个扩展,它将能够使用所有删除的功能。为了便 于识别那些从 OpenGL31中删除了的、仍然得到兼容扩展支持的功能,在本书中,介绍命令或函数 的边框的旁边会给出-个信息表格,共中列出受到影响的函数或符号 烬管有些功能从 OpengL中废弃并删除了,但一些这样的功能影响着库,例如 OpenGL Utility Library,通常称之为GIU。这些在en3,1的变化中受到影响函数,也会在旁边的表格中列出。 目录 译者序 2,2描述点、直线和多边形………25 前言 22.什么是点、直线和多边形………25 篤⊥章 Opengl简介 22.2指定顶点……… 如11十t1曾曾 223 OpengL几何图元……………27 11怀么是 OpenGL………………………… 23基本状态管理… 31 12-段简单的OpeL代码…………………3 24显示点、有线和多边形 13 OpengL函数的语法…4 24.1点的细节… r32 14 OpenGL是一个状态机 24.2直线的细节 33 1.5 OpenG渲染管线…………… 6 2A,3多边形的细节r 36 51显示列表……… 25法线向量 152求值器………………………7 26顶点数组 ……………43 1.53基于顶点的操作…… 261步骤1;启用教组 1.54图元装配…………… 262步驶2:指定数组的数据………44 1.55像素操作 263步骤3:解引用和渲染…………46 156纹理装配………………8 264重启图元 5 1.5.7光栅化 265实例化绘制 1.58片断操作… 2.66混合数组 画t血t加1d 54 16与 OpenGl相关的函数库………927缕冲区对象……… 16.1包含文伴, 27.1刨建缓冲区对象… 57 162 OpengL实用工具库(GLUT)……10 2.72激活缓冲区对象…… -58 7动画 *.13 273用数据分配和初始化级冲区对象…58 17.1暂停刷新……14 274更新缓冲区对象的数据值 1.7.2动画=重绘+交换 5 2.75在缓冲区对象之间复制数据 62 18 OpenGL及其废弈机制… 2.7.6清除缓冲区对象………… 63 8.!Open渲染环境…………7 2,7.7使用缓冲区对象存储顶点数组 18.2访问 OpenGL函数… ……}B 数据………………………63 第2章状态管理和绘制几何物体 928顶点数组对象… ……65 21绘图工具箱………………20 29属性组……… 21l清除窗口 …………………--…-20 2.10创建多边形表面模型的一些提示……7 21.2指走颜色……………………22第3章视图…………………………77 2].3强制完成绘图操作 …23 31简介:用照相机打比方…………78 2.14坐标系统工具箱…………………24 31一个简单的例子:绘制立方体……80 X 3.12通用的变换函数 83 发射光… 25 32视图和模型变换……… 522材料颜色…………………26 321对变换进行思考…… 甲·1,圈L 52.3光和材料的RGB值…126 3.2.2模型变换 53一个简单的例子:流染光照球体……l27 323视图变换………… 54创建光源… 29 3.3投影变换………………-93 5.41颜色 ……∴730 33.1透视投影 ……∷…94 542位置和减… ∵…………}3 332正投影……………………95 54.3裘光灯… 44着““ ·了32 333视景伓裁剪 544多光源………………… …·J33 34视冂变换………………………………96 545控制光源的位置和方向 34l定义视[… 9 55选择光照模型 138 34.2变换深度坐标………… 55!全局环境光…… ……… 35和变换相关的敞障排除 552局部的观察真或无限远的观家点…38 36操纵矩阼琟栈………………00 553双面光照…………………-…3 361模型视图矩阵堆栈 “l0 554镜面辅助颇色……… -39 36,2投影矩阵堆栈 102 555启用光照……………………l40 37共他裁剪平面…………-……/02 56定义材料属性… …』40 3.8一些组合变换的例子…… …}04 5.61散射和环境反射 .447 3.8.1创建太阳系模型…………104 562镜面反射… 4 38.2创机器人手臂…………………107 553发射光颜色…………………l42 39遮变换和模拟变痪 ……-109 5.54更改材料属性 42 第4章颜色 ………………………-l/3 555颜色材料模式…… 143 4L颜色感知 …l3 57和光照有关的数学知识… …/46 4.2计算机颜色 ,,1..甲甲14·.s41a 11457材料的发射光… 47 43RGBA和颜色索引模式…… 5 572经过缩放的全局环境光……147 43.1RGBA显示模式…………………l6 5,73光源的贡献 …………47 43.2颜色索引模式………… I77 574完整的光照计算公式 48 433在RGBA和颜色索引模式中 575镜面辅助颜色…………… I48 进行选择……………………15 58颜色素引模式下的光照…………}49 4.34切换显示模式………i8第6章混合、抗锯齿、雾和多边形偏移…/51 44指定颇色和着色模型……………19 61混合 4.4在RGBA模式下指定颜色 19 源因子和目标四子 52 4.42在颜色索引模式下指定颜色…f20 6L2启用混合 443指定着色模型………………J22 6.3使用混合方程式组合像素 第5童光照… ……………123 614混合的样例用法…………156 51隐藏表面消除工具箱…………………24 6.1.5-个混合的例子…………57 52现实世界和 OpenGL光照 ∴}25 61.6便用深度缓冲区进行二维混合……59 52.1环境光、散射光、镜面光和 62抗锯齿……… XI 621对点和直线进行抗锯齿处理 8.52使用缓冲区对象提取像款数据……28 622使用多重采样刈几何图元进行 8.6提髙像素绘图速度的技巧………229 抗齿处理……… 169 8.7图像处理子集 …230 623对多边形进行抗锯齿处理……72 8.71额色表………………2 63雾 p1D甲号p.·由血山由自目dbBd、自1. l72 8.72卷积 234 63.l使用雾 -…----173 873顏色矩阵………240 632雾方程式………… 75 8.74柱状图…………………2H 64点参数… ………787 875最小最大值…………… 243 65多边形偏移 82第9章纹理贴图……45 第7章显示列表…8591概述和示例 ………-…-248 7为什么使用显示列表…………l85 9.t.纹理贴图的步骤……28 72一个使用显示列表的例子……………l 912一个示例程序…………249 73显示列表的设计哲学……………18892指定纹理……………………25 74创建和执行显示列表…… 921纹理代理…… 255 741命名和创建显不列表……………19 922替换纹理图像的全部成一部分……257 74.2存储在显示列表里的是什么………19 923一维纹理……………259 743执行显示列表………………193 924三维纹理………… 26I 744层次式显示列表…………19 92.5纹埋数组………………………264 74.5管理显示列表索引 194 92.6压缩纹理图像 265 75执行多个显示列表… 194 927使用纹理边框……… 267 7.6用显示列表管理状态变量………………199 92.8 miPmap:多重细节层……………267 第8章绘制像素、位图、字体和图像…20293过滤 …………275 RI位图和字体 203 94纹埤对象……………………………277 81.1当前光栅位置………………204 94.1命名纹理对象 77 8.1.2绘制位图… 205 942创建和使用纹理对象 278 81.3选择位图的颜色… ,福斯,, 2 943清除纹理对象……………………280 814宇体和显示列表… -206 944常驻纹理工作集……280 815定义和使用一种完整的宁体……20795纹理函数…………………∵………“282 8.2图像 …………209 96分配纹理坐标,…………… 284 83图像管线…… 25 91计算正确的纹理坐标………………285 831像素包装和解包…………216 952重复和截取纹理… 286 8.3.2控制像素存储模式……………2}79,7纹理坐标动生成………………289 8.3.3像素传翰操作…… 2y9 97l创建轮廓线……… 83,4像紊映射……………………22 972球体纹理………………293 83.5放大、缩小或翻转图像 22 9.73立方图紋理……………294 84谈取和绘制像素矩形……2249,8多重纹 -296 85使用缓洲区对象存取像表矩形数据…22799纹理组合器函数 299 8.5.!使用緩冲区对象传输像素数据……227910在纹理之后应用辅助颜色………303

...展开详情
试读 127P OpenGL编程指南第七版(PDF扫描版)
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    一个资源只可评论一次,评论内容不能少于5个字
    suezse 很有用,OPENGL红宝书!
    2012-10-29
    回复
    abc_bob_bob 不清晰,还是决定买书看,
    2012-08-27
    回复
    cjsworld 还算清晰,不过没有书签诶
    2012-07-16
    回复
    crazyinit 不错,很清晰,就是没有书签
    2012-03-25
    回复
    • 分享达人

      成功上传6个资源即可获取
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    OpenGL编程指南第七版(PDF扫描版) 45积分/C币 立即下载
    1/127
    OpenGL编程指南第七版(PDF扫描版)第1页
    OpenGL编程指南第七版(PDF扫描版)第2页
    OpenGL编程指南第七版(PDF扫描版)第3页
    OpenGL编程指南第七版(PDF扫描版)第4页
    OpenGL编程指南第七版(PDF扫描版)第5页
    OpenGL编程指南第七版(PDF扫描版)第6页
    OpenGL编程指南第七版(PDF扫描版)第7页
    OpenGL编程指南第七版(PDF扫描版)第8页
    OpenGL编程指南第七版(PDF扫描版)第9页
    OpenGL编程指南第七版(PDF扫描版)第10页
    OpenGL编程指南第七版(PDF扫描版)第11页
    OpenGL编程指南第七版(PDF扫描版)第12页
    OpenGL编程指南第七版(PDF扫描版)第13页
    OpenGL编程指南第七版(PDF扫描版)第14页
    OpenGL编程指南第七版(PDF扫描版)第15页
    OpenGL编程指南第七版(PDF扫描版)第16页
    OpenGL编程指南第七版(PDF扫描版)第17页
    OpenGL编程指南第七版(PDF扫描版)第18页
    OpenGL编程指南第七版(PDF扫描版)第19页
    OpenGL编程指南第七版(PDF扫描版)第20页

    试读已结束,剩余107页未读...

    45积分/C币 立即下载 >