基本信息
- 原书名:OpenGL SuperBible: Comprehensive Tutorial and Reference (5th Edition)
- 原出版社: Addison Wesley
- 作者: (美)Richard S.Wright,Jr. Nicholas Haemel Graham Sellers Benjamin Lipchak
- 译者: 付飞 李艳辉
- 出版社:人民邮电出版社
- ISBN:9787115274564
- 上架时间:2012-6-1
- 出版日期:2012 年5月
- 开本:16开
- 页码:698
- 版次:1-1
- 所属分类:计算机 > 图形图像、多媒体、网页制作 > OpenGL
【插图】

编辑推荐
1、作者为OpenGL资深专家
2、内容全面,最佳学习用书
3、针对OpenGL 3.3全面升级
4、增加OpenGL for iPhone、iPad
5、一刀未剪足本
6、亚马逊五星图书
内容简介
计算机书籍
《OpenGL超级宝典(第5版)》是OpenGL及3D图形编程最好的入门指南,涵盖了使用最新版本的OpenGL进行编程所需要的主要知识。全书分三部分,共16章,另有3个附录。第一部分包括第1章到第7章,介绍如何构建一个使用OpenGL的程序、如何设置3D渲染环境,以及如何创建基本对象和光线并对他们进行着色。然后深入研究如何使用OpenGL,并向读者介绍GLSL,以及如何创建自己的着色器。第二部分包括第8章到第12章,将进行更深入的研究,而懂得如何应用这些高级特性将使读者超越业余3D玩家的水平。这一部分不仅能够使我们掌握更多的可视化效果,同时也考虑了性能表现。第三部分包括第13章到第16章,着重介绍OpenGL如何支持和连接Windows、Mac OS X、Linux和掌上设备。附录部分给出了更多阅读建议、术语表和API参考介绍。
《OpenGL超级宝典(第5版)》适合希望精通OpenGL以便对图形编程和3D图形知识进行扩展的程序员阅读,也可以帮助经验丰富的OpenGL程序员学习如何移植自己的应用程序。本书既可以作为学习OpenGL的教材,也可以作为随时查阅的参考手册。
作译者
NIcho,aSHaemeI在ATl和AMO的8年中引导了3D图形硬件和软件结构设计与开发,并对OpenGL的3.0、3.1、3.2和3。3标准作出了贡献。
Graham Sellers是AMO的OpenGL小组的一位管理者,领导着一个OpenGL软件开发团队,致力于开发AMD的OpenGl驱动程序。他是ARB中的AMD代表,并对核心OpenGL3.2、3.3和4.0规范作出了贡献。
Benjamin Lipchak是苹果公司的软件工程主管,领导着一个致力于图形开发技术和标准测试程序的团队,并负责iPhone和iPodtouch的OpenGLES-致性测试。他曾经在AMD管理一个OpenGLES驱动程序小组,并领导着Khronos的OpenGl生态系统小组,在那里他创建了OpenGL SDK和OpenGL Pipeline等刊物。
目录
第一部分 基本概念
第1章 3D图形和OpenGL简介 2
1.1 计算机图形的简单历史回顾 2
1.1.1 进入电子时代 3
1.1.2 走向3D 3
1.2 3D图形技术和术语 6
1.2.1 变换(Transformation)和投影(Projection) 6
1.2.2 光栅化(Rasterization) 6
1.2.3 着色 7
1.2.4 纹理贴图 8
1.2.5 混合 9
1.2.6 将点连接起来 9
1.3 3D图形的常见用途 9
1.3.1 实时3D 10
1.3.2 非实时3D 12
1.3.3 着色器 12
1.4 3D编程的基本原则 13
1.4.1 并非工具包 13
1.4.2 坐标系统 13
前言
无论读者在Windows、Mac OS X、Linux,还是在手持游戏设备上进行编程,本书都是开始学习OpenGL,以及在读者特定平台上最大程度利用它的好工具。本书的主体是以GLUT或FreeGLUT工具箱为宿主的高度可移植的C++代码。读者还可以在本书中看到特定操作系统的章节,这些章节展示如何将OpenGL写入本地窗口系统。在本书中,我们自始至终努力不去假设读者有多少3D图形编程预备知识,这样就促成了这本初学的程序员和经验丰富的程序员开始学习OpenGL时都能接受的教程。
第5版有哪些更新
本书前几版的读者可能会立刻注意到,这本书变薄了。这是怎么回事?在OpenGL3.0中,某些特性被标记为“不鼓励使用的”,也就是说,这些特性在未来的OpenGL版本中可能会被删除。到目前为止,OpenGL中还没有正式删去任何特性,这在很大程度上是迫于广大开发人员的压力。这样一来,我们在讲解OpenGL就有了两种思路,即包括所有最新功能和“不鼓励使用的”功能的完整框架,以及不包括任何“不鼓励使用的”功能的核心框架。鉴于标记“不鼓励使用的”功能的主要目的是推动OpenGL标准的发展,本版没有包含任何“不鼓励使用的”功能,而只专注于核心框架。这些核心框架是基于OpenGL3.3的。
我们保留了已经证实非常受欢迎的书后参考资料,不过同样删去了所有“不鼓励使用的”功能。如果读者想实现最新的和具有前瞻性的OpenGL程序,那么从这一部分开始是非常好的选择。教程部分的各章内容95%(或以上)都是新素材。我们不想采用基于“不鼓励使用的”功能的方式,所以就产生了采用全新素材的全新方式。这其中包括本版中关于操作系统特性的各章内容,这些内容几乎是完全重写的。
关于OpenGLES的章节特别加入了在iPhone上使用OpenGLES的内容,其中还包括了iPod和iPad,并且本书前面的一些例子也引入了这些设备。这些新加入的内容是非常受欢迎的,因为在本书编写时,再没有一种主流OpenGLES设备能够像它们这样为任何(使用Mac)用户轻松使用。
在本版中,GLTools库部分也被明显地加强了。书中归纳的存储着色器(stockshader)能帮助读者在真正开始研究编写自己的着色器前就尽快学会如何使用着色器。另外,本书归纳的轻量级C++类允许对我们的几何批处理进行管理,并帮助我们创建和操作自己的矩阵堆栈。像过去的GLU库一样,这个库也应只被视为一套帮助例程,而不是一个完整的OpenGL应用框架。
本书的组织结构
本书共分为3部分。第一部分是OpenGU3D图形学基本教程;第二部分涵盖了更加深入的OpenGL编程主题;第三部分则涵盖了一些操作系统特定性质,帮助读者在选定的平台上对OpenGL进行充分的利用。这3部分之后是3个附录,包含了其他OpenGL优秀参考资源和教程的汇总、一个简短的术语表,以及OpenGL核心框架的完整参考。
第一部分基本概念
在这一部分,读者将学到如何构建一个使用OpenGL的程序,如何设置3D渲染环境,以及如何创建基本对象和光线并对他们进行着色。然后,我们将深入研究如何使用OpenGL,并向读者介绍GLSL,以及如何创建自己的着色器。这些章节是读者认识使用OpenGL进行3D图形编程很好的方式,并提供关于本书后面将讲到的更多高级性能的基础概念。
第1章3D图形和OpenGL简介本章是一个针对3D图形新手的介绍性章节。它介绍了基本概念和一些通用词汇。
第2章入门指南在本章,我们向读者提供了关于OpenGL是什么、它从何而来以及将如何发展的应用知识。读者将编写自己的第一个使用OpenGL的程序,找出需要使用哪些头和库,学习如何设置环境,并发现一些通用惯例如何帮助读者记住OpenGL函数调用。本章还会介绍OpenGL状态机和错误处理机制。
第3章基础渲染在本章,我们展示3D图形编程的构造块。读者可以大致明白如何告诉计算机用几何图元、着色器在OpenGL中创建一个三维对象,建立统一样式和属性。读者也可以学到如何消除隐藏表面和使用模板缓冲区的方法,以及查询OpenGL驱动获得实现细节的各种不同方式。
第4章基础变换:初识向量/矩阵现在我们在虚拟世界创建三维形状,如何使它们移动?如何使自己移动?这些都在这一章学习。本章真正属于OpenGL的内容很少,但却澄清了读者继续深入学习所需要了解的概念。
第5章基础纹理纹理贴图在任何3D图形工具箱中都是最有用的特性之一。我们将学到如何将图像缠绕到多边形上,以及如何立即载入和形成多纹理。
第6章跳出“盒子”:非存储着色器现在我们已经具备OpenGL客户端程序设计基础,可以开始在服务器端如何使用GLSL编写着色器下功夫了。本章通过一些基于前面所学内容使用存储着色器创建的例子来介绍这方面内容。
第7章纹理高级知识学习基础纹理后,在本章我们将学习立方体贴图、3D纹理,并且只用纹理存储数据。我们还可以学习点精灵和一些其他类型的非可视纹理应用。
第二部分深入探索
在本书的第二部分,我们将进行更深入的研究。这一部分关于OpenGL的内容更加令人振奋,而懂得如何应用这些高级特性将使读者超越业余3D玩家的水平。这一部分不仅能够使我们掌握更多的可视效果,而且其中很多内容还是性能导向的。
序言
对于OpenGL来说也是如此,在OpenGL3.0中,首次将“不推荐” (deprecated)这个词引入到规范中,对很多特性和功能都进行了删除标记,并强烈鼓励开发者转向新的技术,预期得到的是一个更加简洁清晰的OpenGL版本,可以看成是从开发包中抛弃了固定管线部分,然而,事情并不总是按照预期的情况发展。在上世纪90年代后期,OpenGL陷入了一场现在所谓的“APl战争” (APlWars),这是由微软公司的Direct3DAPl引起的,但是,开发者最终会选择更加优越的APl,而OpenGL拒绝消亡;相反,它变得更加繁荣,并且成为了实时3D图形渲染的世界性标准。开发者似乎又一次表明了态度,无论ARB中OpenGL的捍卫者如何努力,看来固定管线都拒绝消亡。现在,我们可以选择两种OpenGL,即兼容版本(compatibilityprofile)和核心版本(coreprofile)。
出于这点考虑,由于本书的第4版覆盖了现在可以称为“经典OpenGL2.1固定管线版本”的内容,在未来的几年内完全有理由继续受欢迎,固定功能管线拥有大量的传统优势。它的编程非常容易,并且目前能够在现代图形加速卡上进行完全的硬件加速,在未来一段时期内,很多性能要求不高和非图形专业的专家可能会非常推荐这种编程模型,只有时间能证明一切。
同时,我们还面临着在本书的第5版中该怎样做的问题,每隔6个月左右,OpenGL就会进行一次升级,而在本书编写过程中我们就经历了两次升级,如果试图同时覆盖兼容版本和核心版本的内容,则会产生很多混淆之处,另外,很多更新、更现代的效果只能在着色器上实现。随着时间一年一年地推移,很多人还在使用的图形编程的固定管线模式看来是越来越过时了。因此,考虑到技术的进步,我们认为在第5版中最好专注于介绍核心版本,就我所知,这将是第一本这样做的图书。当我在佛塞大学(或译为全航大学,Full Sail University)讲授OpenGL时,我在试图寻找如何讲授不包含固定管线的OpenGL时遇到了巨大的挑战。我和所注意到的其他很多人都是将着色器编程作为固定管线的一个扩展来讲授的,我们怎样才能跳过在刚开始的时候非常麻烦的关于着色器编程的几章内容,而先开始使用OpenGL呢?有很多工具可以帮助我们在一个IDE类型环境中编写着色器,其中某些还将这种方式作为初始方式,这样做有它的好处,而我对此也并不排斥,但是,我更喜欢能够运行的实际程序,以便做一些有趣的事情,这就是我学习编程的方式。然后我可以将程序发送给我的母亲、女朋友、伙伴、老板等,向他们展示我的聪明才智。当我们开始掌握新技术时,这是一种强有力的反馈机制。
这是我的学习方法,也是本书(畅销的)前4版所采用的模式,在第5版我仍然不愿意放弃这种方
式,希望你会喜欢我的努力成果。
—Richard S.Wright,Jr
媒体评论
因此,即使我们还没有能力在脑海中默算出两个矩阵的乘法,也要明白矩阵是什么,以及这些矩阵对于OpenGL处理来说意味着什么。但是,在清理线性代数的老课本(每个人都有,对吧?)之前,不要紧张,GLTools库中有一个组建叫做Math3d,其中包含了大量好用的与OpenGL一致的3D数学例程和数据类型。虽然我们不必亲自进行所有的矩阵和向量操作,我们仍然知道它们是什么,以及如何应用它们。看,这样我们就二者兼得了。
4.23D图形数学速成课
关于3D图形数学的书籍数不胜数,我们发现了一些非常好的,附录A中列出了这些书籍。我们并不会做出一副要讲完所有需要了解的重要问题的架势,甚至并不试图讲完所有应该了解的问题。在本章,我们只涉及真正需要了解的。如果已经是数学高手,那么就应该跳过这一部分,立即开始学习模型视图矩阵部分。这并不只是因为您已经知道了我们将要讲解的内容,还因为大多数数学高手会因为没有提供足够的空间来讨论它们喜爱的齐次坐标空间特性而感到不快。
想象一下一个我们必须从一大群鳄鱼逃脱出来的电视真人秀吧。我们到底要知道多少3D数学才能生存?这就是接下来两部分的内容-3D数学生存技能。鳄鱼才不在乎我们是不是真正懂得齐次坐标
空间呢。
4.2.1向量
在第1章和第2章,我们已经介绍了顶点和3D笛卡尔坐标。基本上,一个顶点就是XYZ坐标空间上的一个位置,而在空间中给定的一个位置恰恰是由一个且只由一个单独的XYZ三元组定义的。然而, 一组XYZ值还能表示一个向量(实际上,从纯粹的数学思维上讲一个顶点其实同时也是一个向量……这里我们只讨论主要问题)。在使用向量来操纵3D几何图形时,向量可能就变成了最重要的基本概念了(没有之一)。这3个值(×、Y和Z)组合起来表示两个重要的值——一个方向和一个数量。
如图4.1所示为空间中(任意选择)的一个点,以及空间中从坐标系原点到这个点坐标的一条带箭头的线段。在拼接三角形时,这个点可以视为一个顶点,而这个带箭头的线段则可以视为一个向量。一个向量首先是空间中从原点指向这个点的方向。在中,我们总是使用向量来表示带方向的量。例如,X轴就是向量(1,0,0)。在×方向为+1,而在Y方向和Z方向则为0。
……
书摘
因此,即使我们还没有能力在脑海中默算出两个矩阵的乘法,也要明白矩阵是什么,以及这些矩阵对于OpenGL处理来说意味着什么。但是,在清理线性代数的老课本(每个人都有,对吧?)之前,不要紧张,GLTools库中有一个组建叫做Math3d,其中包含了大量好用的与OpenGL一致的3D数学例程和数据类型。虽然我们不必亲自进行所有的矩阵和向量操作,我们仍然知道它们是什么,以及如何应用它们。看,这样我们就二者兼得了。
4.23D图形数学速成课
关于3D图形数学的书籍数不胜数,我们发现了一些非常好的,附录A中列出了这些书籍。我们并不会做出一副要讲完所有需要了解的重要问题的架势,甚至并不试图讲完所有应该了解的问题。在本章,我们只涉及真正需要了解的。如果已经是数学高手,那么就应该跳过这一部分,立即开始学习模型视图矩阵部分。这并不只是因为您已经知道了我们将要讲解的内容,还因为大多数数学高手会因为没有提供足够的空间来讨论它们喜爱的齐次坐标空间特性而感到不快。
想象一下一个我们必须从一大群鳄鱼逃脱出来的电视真人秀吧。我们到底要知道多少3D数学才能生存?这就是接下来两部分的内容-3D数学生存技能。鳄鱼才不在乎我们是不是真正懂得齐次坐标
空间呢。
4.2.1向量
在第1章和第2章,我们已经介绍了顶点和3D笛卡尔坐标。基本上,一个顶点就是XYZ坐标空间上的一个位置,而在空间中给定的一个位置恰恰是由一个且只由一个单独的XYZ三元组定义的。然而, 一组XYZ值还能表示一个向量(实际上,从纯粹的数学思维上讲一个顶点其实同时也是一个向量……这里我们只讨论主要问题)。在使用向量来操纵3D几何图形时,向量可能就变成了最重要的基本概念了(没有之一)。这3个值(×、Y和Z)组合起来表示两个重要的值——一个方向和一个数量。
如图4.1所示为空间中(任意选择)的一个点,以及空间中从坐标系原点到这个点坐标的一条带箭头的线段。在拼接三角形时,这个点可以视为一个顶点,而这个带箭头的线段则可以视为一个向量。一个向量首先是空间中从原点指向这个点的方向。在中,我们总是使用向量来表示带方向的量。例如,X轴就是向量(1,0,0)。在×方向为+1,而在Y方向和Z方向则为0。
……