本书讲述如何使用OpenGL进行编程。
从实际应用的角度出发,全书以OpenGL在实际应用中频繁出现的技术重点和难点为讲解内容,完全以对实例的精心讲解贯穿全书,并在各个实例中穿插OpenGL和3D图形学的相关原理和概念,舍弃OpenGL中与实际3D图形应用开发关联不大的琐碎知识细节,以一种全新的方式引导读者快速掌握实际开发中所必须掌握的最重要,最实用的概念、原理和编程技巧,事半功倍的进入相关开发领域。本书中的实例代码都是从大量实际应用中精心筛选出来的,并经过适当的修改、完善和严格测试。
OpenGL编程精粹
Essential OpenGL Programming
杨柏林 陈根浪 徐静 编著
内容精粹:涉及OpenGL 3.1应用最广的概念、原理、技巧
实例精彩:实用有趣,交互性强,易于扩展
代码精炼:取自实际项目,有流程图和UML图,经过完善和严格测试
学习精专:采用一个通用程序框架
本书在继承《OpenGL游戏编程》广受读者欢迎的写作风格的基础上,重点突出了OpenGL技术的通用性、实用性和前沿性,力图每个实例都精挑细选、切中要点、深入浅出、言简意赅,其特色如下。
内容精粹:介绍OpenGL最新3.1版本中所涉及的与实际应用关联度大的内容,引导读者快速掌握最实用的概念、原理和编程技巧。
实践的精粹:全书以OpenGL在实际应用中频繁出现的技术重点和难点为讲解内容,对实例的精心讲解贯穿全书。
实例精粹:力求通过实用有趣、交互性强、易于扩展的应用实例帮助读者深刻领会复杂、枯燥的原理与概念。
代码精粹:书中代码均源于实际项目,并经过完善和严格测试,复用性强,可“即插即用”,注释完整并配有清晰的流程图和UML图。
学习精粹:精心开发了一个通用程序框架,每个实例都采用该框架,读者可专注学习相关技术要点而不必深陷复杂的无关代码细节。
本书适合于欲进入游戏开发、影视特效、仿真系统、虚拟现实与增强现实、图形图像处理、移动图形应用等领域的初、中级程序员以及高校或科研机构的相关研究人员;进行毕业设计、课程设计的学生;其他对图形编程有兴趣的业余爱好者。本书还可以作为高校图形学、游戏程序设计课程的教辅。
OpenGL(Open Graphics Library)即“开放的图形程序接口”,它于1992年由SGI公司开发,得到广大硬件和软件厂商的支持和参与,并成为该领域的工业标准。由于OpenGL是一个与硬件无关的软件接口,同时可以在不同的平台如Windows 95、Windows NT、UNIX、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。随着OpenGL版本升级,功能不断增强,基于OpenGL开发的应用程序已经从传统的简单三维模型绘制扩展到复杂场景绘制,并被广泛应用到科学计算可视化、军事仿真、体育仿真、虚拟漫游、增强现实、商务虚拟展示等领域。
与已有的市面上多种关于OpenGL的书籍相比,本书在内容安排上有3个特点:
1)从最基础的平台和程序框架开始,并介绍了相关图形学基础知识,使读者能够快速进入本书内容;
2)提供的OpenGL编程技术内容翔实,范围从OpenGL的基本绘制技术延伸到场景优化和高级特性,并扩充了目前的研究热点;
3)针对每部分内容,都有典型例子来说明,从而使读者能够快速理解所讲授的内容。
本书共分28章。第1、2章,概述了OpenGL图形开发的基本方法和基本程序框架,通过这两章的学习读者能够实现一个最简单的OpenGL程序。第3章~第9章,主要介绍了进行三维绘制所需要的基本要素,包括基本图形绘制、颜色、光照和材质、显示列表、位图和图像、纹理映射以及混合等方面。第10章~第21章详述了对三维场景的优化方法及其相关高级特性,主要涉及字体、反走样、雾、各种几何处理、多种高级纹理映射和光照技术、阴影和拾取。第22章~26章详述了在各种3D系统开发中用到的典型技术,包括动画、摄影机漫游、天空和地形绘制以及粒子系统。第27章和第28章分别介绍了目前得到广泛应用的OpenGL的着色语言和在移动设备上使用的移动图形库—OpenGL ES。
本书第4,6,9,11,12,13,16和28章由浙江大学宁波理工学院陈根浪老师编写;其余部分由浙江工商大学杨柏林副教授编写;全书的示例程序由徐静女士调试实现。在编写过程中,作者参考了国内外有关OpenGL的书刊和文献资料,并得到了《OpenGL游戏编程》原作者之一的王琬先生的大力支持和协助,特此表示感谢。
由于时间仓促和水平有限,书中疏漏之处在所难免,希望读者提出宝贵意见,以便再版时修正。如有任何问题,请发邮件至programminggame@gmailcom。
编者
2010年4月
计算机\程序设计
本书将从实际应用的角度出发,全书以OpenGL在实际应用中频繁出现的技术重点和难点为讲解内容,完全以对实例的精心讲解贯穿全书,并在各个实例中穿插OpenGL和3D图形学的相关原理和概念,舍弃OpenGL中与实际3D图形应用开发关联不大的琐碎知识细节,以一种全新的方式引导读者快速掌握实际开发中所必须掌握的最重要,最实用的概念、原理和编程技巧,事半功倍的进入相关开发领域。
本书力求通过翔实有趣,操作性强,有实用价值的例子帮助读者领会图形学理论,并先在实践上获得深刻的感性认识。本书中的实例代码都是从大量实际应用中精心筛选出来的,并经过适当的修改、完善和严格测试,它们不但有较大的教学和研究价值,而且也能为该领域的中、高级开发人员方便地提供实际项目中所需的可复用代码。如果读者辅之一本计算机图形学理论书和一本OpenGL接口参考文档,效果将更好,再将书中实例都调试通过并有所思考最后必有所得。最终,通过本书,读者可以学习到OpenGL在3D图形开发中最重要最实用的知识和技能。
杨柏林 陈根浪 徐静 编著:暂无简介
序
前言
第1章OpenGL图形开发快速入门
11OpenGL基础知识
111OpenGL的历史
112OpenGL 的特点
123D图形学理论入门
121点
122向量
123矩阵
124变换
125投影
126裁剪
127光照
第2章OpenGL程序框架
21窗口渲染环境
211GDI设备环境
212OpenGL渲染环境
22窗口创建
221Win32 SDK风格的框架
222面向对象风格的框架
23增加环境设置选项
第3章OpenGL基本图形的绘制
31OpenGL的数据类型
32函数命名的语法
33OpenGL是一种状态机
34OpenGL变换
341视点变换
342模型变换
343投影变换
344视口变换
345裁剪变换
35OpenGL基本图形的绘制
36OpenGL基本图元的属性细节
第4章OpenGL颜色及3D图形的绘制
41计算机颜色
42OpenGL颜色模式
43着色模式
44顶点数组
453D彩色物体绘制实例
第5章OpenGL光照和材质
51光照及材质介绍
52OpenGL光照模型
521法线向量
522创建光源
523选择光照模型
524启用光照
53材质
531材质的定义
532颜色材质模式
54光照实例
55材质实例
第6章显示列表
61使用显示列表的优势
62显示列表的适用场合
63创建显示列表
64执行显示列表
65管理显示列表
66显示列表实例
第7章位图和图像
71位图
711位图与字符
712绘制位图
713绘制位图实例
72图像操作
721像素读写
722像素复制
723像素缩放
724像素操作实例
第8章纹理映射
81简介
82纹理映射的过程
821纹理定义
822纹理控制
823纹理映射方式
824指定纹理坐标
825纹理对象
83纹理资源载入
831BMP位图介绍
832TGA介绍
833纹理资源的载入
84纹理映射实例
第9章混合
91混合因子
92启用混合
93实现步骤
94混合实例
第10章字体
101OpenGL显示英文字体
1011平面文字的显示
1012立体文字的显示
102OpenGL显示中文
10213D文字的显示
1022平面文字的显示
第11章反走样
111行为控制
112点和直线的反走样
113多边形的反走样
第12章雾
121概述
122启用雾
123设置雾的属性
124雾坐标
125雾效实例
第13章网格化
131网格化步骤
132创建网格化对象
133网格化回调函数
134网格化属性
135定义多边形
136删除网格化对象
137网格化实例
第14章二次几何体
141渲染二次几何体步骤
142二次对象
143二次对象的属性
144二次图元
145实例
第15章贝赛尔曲线和曲面
151求值程序
152贝赛尔曲线
1521启用求值程序
1522定义一维求值程序
1523执行一维求值程序
1524贝赛尔曲线实例
153贝赛尔曲面
1531启用求值程序
1532定义二维求值程序
1533执行二维求值程序
1534贝赛尔曲面实例
第16章多重纹理
161OpenGL扩展
1611扩展名
1612使用OpenGL扩展
162多重纹理
163多重纹理实例
第17章凹凸映射
171凹凸映射的一般原理
1711介绍
1712切空间
1713原理
172浮雕凹凸映射
1721原理
1722实现方法
173本章实例
第18章环境映射
181环境映射介绍
182环境映射分类
1821球形映射
1822立方体映射
183环境映射实例
1831Sphere Mapping实例
1832Cube Mapping实例
第19章镜面反射
191模板缓存
1911模板缓存的启用
1912设置、清除模板缓存区
1913模板测试
192镜面反射实例
第20章阴影
201介绍
202阴影生成方法
2021平面投射
2022阴影图
2023阴影体
203阴影实例
2031平面投射实例
2032阴影体实例
第21章拾取
211介绍
2111基本步骤
2112名字栈
2113命中记录
2114拾取
212拾取实例
第22章骨骼动画
221介绍
222骨骼蒙皮动画
2221基本原理
2222实现
223本章实例
第23章摄像机漫游
231介绍
232摄像机漫游
233漫游实例
第24章天空绘制
241天空盒
242天空顶
243天空绘制实例
2431天空盒实例
2432天空顶实例
第25章地形渲染
251LOD技术简介
252ROAM模型
253ROAM简单实例
254ROAM地形实例
第26章粒子系统
261粒子系统简介
262粒子系统类
263暴雪实例类
第27章OpenGL着色语言
271OpenGL着色语言简介
272OpenGL着色语言环境设置
2721着色器创建流程
2722创建一个着色器
2723创建一个程序
2724查询函数与清理工作
2725OpenGL与OpenGL着色语言的通信
273GLSL语法基础
2731数据类型
2732变量限定符
2733流控制
2734函数
274实例分析
2741GLSL简单实例
2742颜色处理实例
2743变形实例
第28章OpenGL ES应用基础
281OpenGL ES和EGL
2811OpenGL ES介绍
2812EGL介绍
282OpenGL ES初始化方法
283OpenGL ES应用实例
2831OpenGL ES在Windows CE上的使用
2832OpenGL ES在BREW上的使用
2833OpenGL ES在Java上的使用
参考文献