中文名: OpenGL超级宝典中文版
英文名: OpenGL SuperBible (2th Edition).
版本: 第二版
发行时间: 2002年
地区: 大陆
对白语言: 普通话
文字语言: 简体中文
简介:
《OpenGL超级宝典》
本书是OpenGL编程指南,涵盖了使用新版本的OpenGL进行编程所需要的主要知识。
全书分3个部分,共23章,另有3个附录。第一部分包括第1章到第12章,介绍经典OpenGL绘图的所有基础知识,包括3D图形和OpenGL简介,OpenGL空间绘图,几何转换,颜色、材料和光照,纹理贴图,曲线和表面,管线,交互式图形等内容。第二部分包括第13章到第15章,分别介绍了不同操作系统平台上的OpenGL功能特性和编程细节。第三部分是第16章到第23章,着重介绍OpenGL的一些高级功能以及OpenGL 1.5的新特性。附录部分给出了更多阅读建议、术语表和对OpenGL ES的简单介绍。随书光盘中包含了不同操作系统平台下的丰富的示例程序及其源代码。
本书适合于希望精通OpenGL以便对他们的图形编程和3D图形知识进行扩展的程序员,也可以帮助那些经验丰富的OpenGL程序员学习如何移植自己的应用程序。本书既可以作为学习OpenGL的教材,也可以作为随时查阅的参考手册。
目录
第一部分经典OpenGL
第1章3D图形和OpenGL简介3
1.1计算机图形的简单历史回顾3
1.1.1进入CRT3
1.1.2走向3D4
1.23D效果初探6
1.2.1透视(视角)6
1.2.2颜色和着色6
1.2.3光照和阴影7
1.2.4纹理贴图7
1.2.5雾7
1.2.6混和和透明8
1.2.7抗锯齿8
1.33D图形的常见用途9
1.3.1实时3D9
1.3.2非实时3D10
1.43D编程的基本原则11
1.4.1立即模式和保持模式(场景图)11
1.4.2坐标系统11
1.4.3投影(从3D到2D)14
1.5小结16
第2章使用OpenGL17
2.1什么是OpenGL17
2.1.1标准的演化18
2.1.2API战争19
2.2OpenGL的工作原理22
2.2.1泛型实现22
2.2.2硬件实现23
2.2.3管线24
2.3OpenGL是API而不是编程语言24
2.4API规范25
2.4.1数据类型25
2.4.2函数名约定26
2.5平台独立性27
2.5.1使用GLUT27
2.5.2设置编程环境28
2.5.3你的第一个程序28
2.5.4用OpenGL绘制形状32
2.6使用OpenGL和GLUT生成动画37
2.7OpenGL状态机40
2.8OpenGL错误41
2.9确认版本42
2.10调用glHint获得线索42
2.11使用扩展42
2.11.1检查扩展43
2.11.2这是谁的扩展43
2.11.3在Windows中使用OpenGL 1.1以后的版本44
2.12小结44
2.13参考45
第3章在空间中绘图(几何图元和缓冲区)55
3.1在3D中绘制点55
3.2设置3D画布56
3.33D空间中的点——顶点57
3.4绘制图形58
3.5设置点的大小60
3.6在3D空间中画直线62
3.6.1线带和线环63
3.6.2用直线构成近似曲线64
3.6.3设置直线的宽度64
3.6.4直线点画66
3.7在3D空间中绘制三角形68
3.7.1三角形——第一种多边形68
3.7.2环绕68
3.7.3三角形带69
3.7.4三角形扇69
3.8创建实心物体70
3.8.1设置多边形颜色72
3.8.2隐藏表面消除72
3.8.3剔除:隐藏表面,提高性能73
3.8.4多边形模式75
3.9其他图元75
3.9.1四条边的多边形——四边形75
3.9.2通用多边形76
3.9.3填充多边形,回顾点画76
3.9.4多边形创建规则79
3.9.5细分和边界80
3.10其他缓冲区技巧82
3.10.1使用缓冲区目标82
3.10.2操纵深度缓冲区83
3.10.3用剪刀进行裁剪84
3.10.4使用模版缓冲区85
3.11小结88
3.12参考88
第4章几何转换——管线100
4.1本章是不是枯燥的数学课100
4.2理解转换101
4.2.1视觉坐标101
4.2.2视图转换102
4.2.3模型转换102
4.2.4模型视图二元性103
4.2.5投影转换104
4.2.6视口转换104
4.3矩阵——3D图形的数学基础105
4.3.1什么是矩阵105
4.3.2转换管线105
4.3.3模型视图矩阵106
4.3.4单位矩阵108
4.3.5矩阵堆栈109
4.3.6一个原子例子110
4.4使用投影112
4.4.1正投影112
4.4.2透视投影113
4.4.3一个远处缩小的例子114
4.5高级矩阵操作116
4.5.1载入矩阵117
4.5.2自己执行转换118
4.5.3把转换放在一起120
4.6使用照相机和角色在OpenGL中移动121
4.6.1角色帧121
4.6.2欧拉角:“卢克!请使用帧”122
4.6.3照相机管理122
4.7综合应用123
4.8小结127
4.9参考128
第5章颜色、材料和光照基础知识134
5.1什么是颜色134
5.1.1光的波性134
5.1.2光的粒子性135
5.1.3人眼作为光子检测器136
5.1.4计算机作为光子检测器136
5.2PC颜色硬件137
5.3PC显示模式137
5.3.1屏幕分辨率138
5.3.2颜色深度138
5.4在OpenGL中使用颜色139
5.4.1颜色立方体139
5.4.2设置绘图颜色140
5.4.3着色140
5.4.4设置着色模型142
5.5现实世界的颜色142
5.5.1环境光143
5.5.2散射光143
5.5.3镜面光143
5.5.4综合考虑143
5.6现实世界的材料144
5.6.1材料属性144
5.6.2向材料添加光照144
5.6.3计算环境光效果144
5.6.4散射和镜面光效果145
5.7向场景添加光照145
5.7.1启用光照145
5.7.2设置光照模型146
5.7.3设置材料属性146
5.8使用光源148
5.8.1哪种方式最合适148
5.8.2表面法线149
5.8.3指定法线149
5.8.4单位法线150
5.8.5寻找法线151
5.8.6设置光源152
5.8.7设置材料属性153
5.8.8指定多边形153
5.9光照效果154
5.9.1镜面加亮154
5.9.2镜面光154
5.9.3镜面反射155
5.9.4镜面指数156
5.9.5法线均衡157
5.10综合讨论158
5.10.1创建亮点158
5.10.2绘制光点159
5.11阴影162
5.11.1什么是阴影163
5.11.2实现压平的代码163
5.11.3一个阴影例子164
5.11.4重新回顾球体世界166
5.12小结167
5.13参考167
第6章颜色和材料的更多细节174
6.1混合174
6.1.1组合颜色174
6.1.2修改混合方程式177
6.1.3抗锯齿177
6.2雾181
6.3累积缓冲区183
6.4其他颜色操作185
6.4.1颜色掩码185
6.4.2颜色逻辑操作185
6.4.3Alpha测试186
6.4.4抖动186
6.5小结186
6.6参考187
第7章OpenGL中的图像191
7.1位图191
7.2像素包装195
7.3像素图196
7.3.1经过包装的像素格式198
7.3.2一个颜色更丰富的例子198
7.3.3移动像素200
7.3.4保存像素201
7.4像素的更多乐趣203
7.4.1像素缩放208
7.4.2像素转移208
7.4.3像素映射211
7.5图像“子集”212
7.6小结222
7.7参考223
第8章纹理贴图基础知识239
8.1载入纹理239
8.1.1使用颜色缓冲区242
8.1.2更新纹理242
8.2将纹理贴图到几何图形243
8.3一个简单的2D例子244
8.4纹理环境249
8.5纹理参数250
8.5.1基本过滤250
8.5.2纹理环绕251
8.5.3带纹理的卡通252
8.5.4Mip贴图256
8.6纹理对象259
8.7小结266
8.8参考266
第9章纹理贴图高级知识279
9.1第二颜色279
9.2各向异性过滤281
9.3纹理压缩282
9.3.1压缩纹理283
9.3.2载入压缩纹理284
9.4纹理坐标生成284
9.4.1物体线性贴图289
9.4.2视觉线性贴图290
9.4.3球体贴图291
9.4.4立方体贴图292
9.5多重纹理294
9.5.1多重纹理坐标295
9.5.2一个多重纹理例子295
9.6纹理组合器298
9.7小结300
9.8参考300
第10章曲线和表面306
10.1内部支持的表面306
10.1.1设置二次方程状态307
10.1.2绘制二次方程图形308
10.1.3用二次方程进行建模311
10.2Bézier曲线和表面312
10.2.1参数方程表示形式313
10.2.2求值器314
10.3NURBS321
10.3.1从Bézier到B样条321
10.3.2结点322
10.3.3创建NURBS表面322
10.3.4NURBS属性323
10.3.5定义表面323
10.3.6修剪324
10.3.7NURBS表面326
10.4镶嵌326
10.4.1镶嵌器327
10.4.2镶嵌器回调函数327
10.4.3指定顶点数据328
10.4.4综合应用328
10.5小结332
10.6参考332
第11章这就是管线——更快的几何图形渲染353
11.1模型装配101353
11.2显示列表363
11.2.1批处理363
11.2.2预批处理364
11.2.3使用显示列表的一些注意事项365
11.2.4转换到显示列表365
11.3测量性能366
11.4顶点数组370
11.4.1载入几何图形373
11.4.2启用数组374
11.4.3数据在哪里374
11.4.4进行绘图375
11.4.5索引顶点数组376
11.5小结385
11.6参考385
第12章交互式图形395
12.1选择395
12.1.1为图元命名396
12.1.2在选择模式下工作397
12.1.3选择缓冲区398
12.1.4挑选399
12.1.5层次式挑选401
12.1.6反馈404
12.1.7反馈缓冲区404
12.1.8反馈数据405
12.1.9用户定义标记405
12.2一个反馈例子406
12.2.1对物体加上标签以便反馈406
12.2.2步骤1:选择物体408
12.2.3步骤2:从物体获取反馈信息409
12.3小结411
12.4参考411
第二部分OpenGL无处不在
第13章Windows上的OpenGL Wiggle417
13.1Windows上的OpenGL实现417
13.1.1泛型OpenGL418
13.1.2可安装客户驱动程序(ICD)418
13.1.3Mini客户驱动程序(MCD)418
13.1.4Mini驱动程序419
13.1.5扩展OpenGL419
13.2基本的窗口渲染420
13.2.1GDI设备环境420
13.2.2像素格式421
13.2.3OpenGL渲染环境426
13.3综合应用427
13.3.1创建窗口427
13.3.2使用OpenGL渲染环境430
13.3.3其他Windows消息433
13.4Windows调色板434
13.4.1颜色匹配434
13.4.2调色板仲裁435
13.4.3为OpenGL创建调色板436
13.4.4调色板的创建和销毁439
13.5OpenGL和Windows字体440
13.5.13D字体和文本441
13.5.22D字体和文本442
13.6全屏渲染444
13.6.1创建一个无边框窗口444
13.6.2创建一个全屏窗口445
13.7多线程渲染447
13.8OpenGL和WGL扩展448
13.8.1简单扩展448
13.8.2使用新入口449
13.8.3WGL扩展449
13.9小结470
13.10参考470
第14章MacOS X上的OpenGL482
14.1基础知识482
14.1.1框架482
14.1.2使用GLUT API483
14.2使用AGL和Carbon API483
14.2.1像素格式483
14.2.2管理渲染环境484
14.2.3执行双缓冲渲染485
14.2.4你的第一个AGL程序485
14.2.5使用位图字体494
14.3使用Cocoa API504
14.3.1NSOpenGL类504
14.3.2你的第一个Cocoa程序505
14.4小结512
14.5参考512
第15章GLX:Linux上的OpenGL516
15.1基础知识516
15.1.1使用OpenGL和X11函数库516
15.1.2使用GLUT函数库518
15.1.3Linux上的OpenGL518
15.1.4OpenGL模拟:Mesa519
15.2X Window系统的OpenGL扩展519
15.2.1X Window系统基础知识519
15.2.2选择画面519
15.2.3管理OpenGL渲染环境520
15.2.4创建OpenGL窗口521
15.2.5双缓冲窗口521
15.2.6综合应用521
15.3为OpenGL创建位图字体528
15.4离屏渲染537
15.4.1使用GLX Pixmap537
15.4.2使用Pbuffer541
15.5使用Motif函数库546
15.5.1GLwDrawingArea和GLwMDrawingArea546
15.5.2回调资源547
15.5.3函数548
15.5.4综合应用549
15.6小结557
15.7参考557
第三部分下一代OpenGL
第16章缓冲区对象565
16.1顶点数组566
16.1.1生成球状微粒云彩566
16.1.2启用顶点数组567
16.1.3使用更多的球体568
16.2迁移到缓冲区对象569
16.2.1缓冲区对象管理570
16.2.2用缓冲区对象进行渲染571
16.3把数据载入到缓冲区对象571
16.3.1把数据复制到缓冲区对象571
16.3.2直接映射缓冲区对象572
16.4补遗575
16.5小结576
16.6参考576
第17章遮挡查询581
17.1遮挡查询之前的世界581
17.2边框584
17.3对查询对象进行查询587
17.4小结589
17.5参考589
第18章深度纹理和阴影593
18.1作为光源594
18.1.1使场景正好占据整个窗口594
18.1.2去掉华而不实的东西594
18.2一种新类型的纹理597
18.3首先绘制阴影597
18.4然后是光照598
18.4.1投影阴影贴图:“为什么”598
18.4.2投影阴影贴图:“怎么做”599
18.4.3阴影比较600
18.5只用两个就够了605
18.6关于多边形偏移606
18.7小结606
18.8参考607
第19章可编程管线609
19.1旧的被淘汰609
19.1.1固定的顶点处理609
19.1.2固定的片断处理611
19.2新的占主导612
19.2.1可编程顶点着色器612
19.2.2固定功能胶水614
19.2.3可编程片断着色器614
19.3着色器扩展介绍615
19.3.1低层扩展615
19.3.2高层扩展617
19.4小结618
第20章低层着色(深入底层)619
20.1管理低层着色器619
20.1.1创建和绑定着色器619
20.1.2载入着色器620
20.1.3删除着色器621
20.1.4设置扩展621
20.2指令集622
20.2.1常用指令622
20.2.2专用于顶点的指令623
20.2.3专用于片断的指令624
20.3变量类型624
20.3.1临时变量625
20.3.2参数625
20.3.3属性626
20.3.4输出628
20.3.5别名629
20.3.6地址629
20.4输入和输出限定符630
20.4.1输入取负630
20.4.2输入Swizzle630
20.4.3输出写入掩码630
20.4.4输出限定630
20.5资源消耗和队列631
20.5.1解析器限制631
20.5.2本地限制632
20.5.3其他查询633
20.6着色器选项633
20.6.1位置不变性顶点选项634
20.6.2雾应用片段选项634
20.6.3精度提示片断选项634
20.7小结634
20.8参考634
第21章高层着色644
21.1管理高层着色器644
21.1.1着色器对象644
21.1.2程序对象646
21.1.3设置扩展647
21.2变量648
21.2.1基本类型648
21.2.2结构649
21.2.3数组650
21.2.4修饰符650
21.2.5内置的变量650
21.3表达式651
21.3.1操作符651
21.3.2数组访问652
21.3.3构造函数652
21.3.4成分选择653
21.4控制流653
21.4.1循环654
21.4.2if/else654
21.4.3discard654
21.4.4函数654
21.5小结656
21.6参考657
第22章顶点着色668
22.1初次试验668
22.2散射光照670
22.3镜面光照672
22.4改善镜面光照674
22.5基于顶点的雾680
22.6基于顶点的点大小683
22.7自定义的顶点转换685
22.8顶点混合687
22.9小结691
第23章片断着色器692
23.1颜色转换692
23.1.1灰度692
23.1.2调棕色694
23.1.3反色694
23.1.4热信号696
23.1.5基于片断的雾697
23.2图像处理699
23.2.1模糊699
23.2.2锐化702
23.2.3膨胀和侵蚀703
23.2.4边缘检测705
23.3光照707
23.3.1散射光照707
23.3.2多重镜面光照710
23.4过程纹理贴图714
23.4.1棋盘纹理714
23.4.2沙滩球纹理718
23.4.3玩具球纹理722
23.5小结727
附录A推荐读物728
A.1其他优秀的OpenGL书籍728
A.23D图形书籍728
A.3网站728
附录B术语表730
附录COpenGL ES733
C.1数据类型的削减733
C.2完全消除的特性733
C.3大幅度削减了的功能734
C.3.1纹理贴图734
C.3.2光栅操作734
C.3.3光照735
C.4小结735