前言 1
第1章 OpenGl入门 1
1.1 OpenGL概览 1
1.2 简单的OpenGL程序举例 3
1.3 基本OpenGL操作 5
1.4 OpenGL的命令语法 6
1.5 作为状态机的OpenGL 7
1.6 OpenGL相关函数库 8
1.6.1 OpenGL相关函数库简介 8
1.6.2 OperGL辅助库(GLAUX) 9
4.8.1 建立一个太阳系模型 9
1.7 动画 11
7.1.1 发射光,环境光,散射光和镜面反射光 13
2.1.1 系统硬件配置要求 17
2.1 开发环境 17
第2章 Windows 95及Windows NT环境下开发OpebGL应用程序的基本过程 17
2.1.2 开发OpenGL应用程序的软件要求 17
2.2.2 Win32控制台风格应用程序的开发 18
2.2 OpenGL应用程序开发基本过程 18
2.2.1 源代码的编写 18
2.2.3 Win32MFC风格应用程序的开发 22
第3章 实体建模基础 24
3.1 一个绘图补救工具包 24
3.1.1 清除窗口 25
3.1.2 指定颜色 27
3.1.3 完成绘图 28
3.1.4 隐藏面的消除 29
3.2 点、线和多边形的描述 30
3.2.1 点、线和多边形的定义 30
3.2.2 定义顶点 33
3.2.3 OpenGL的几何绘图图元 34
3.2.4 使用glBegin()和glEnd()的限制 37
3.3 显示点、线和多边形 38
3.3.1 关于点的细节 38
3.3.2 关于线的细节 39
3.3.3 关于多边形的细节 43
3.4 法线向量 49
3.5 创建表面的多边形模型需注意的问题 51
第4章 视图 59
4.1 概述:照相机类比法 60
4.1.1 照相机类比法及其在计算机中的实现 60
4.1.2 一个简单的例子:绘制立方体 62
4.1.3 多种用途的变换函数 66
4.2 视图变换和模型变换 67
4.2.1 关于变换的说明 68
4.2.2 模型变换 70
4.2.3 视图变换 74
4.3 投影变换 78
4.3.1 透视投影 78
4.3.2 正交投影 80
4.4.1 定义视区 82
4.4 视区变换 82
4.3.3 视图体的裁剪 82
4.4.2 变换后的Z坐标 84
4.5 变换的诊断 84
4.6 矩阵堆栈的操作 86
4.6.1 模型视图矩阵堆栈 88
4.6.2 投影矩阵堆栈 88
4.7 附加裁剪平面 89
4.8 组合变换举例 92
4.8.2 建立一个有关节的机器人手臂模型 95
第5章 显示列表 100
5.1 一个使用显示列表的范例 100
5.2 显示列表设计准则 102
5.3 显示列表的创建和执行 104
5.3.1 显示列表的存储内容 106
5.3.2 执行显示列表 107
5.3.3 显示列表的层次结构 109
5.4 显示列表及其索引的管理 110
5.5 执行多个显示列表 111
5.6 封装模式的改变 117
第6章 颜色 119
6.1 颜色的感知 119
6.2 计算机的颜色 120
6.3 RGBA模式与颜色索引模式 122
6.3.1 RGBA模式与颜色索引模式的对比 122
6.3.2 RGBA显示模式 123
6.3.3 抖动操作 123
6.3.4 颜色索引显示模式 125
6.3.5 在RGBA模式与颜色索引模式之间进行选择 126
6.4 指定颜色和阴影模型 126
6.4.1 在RGBA模式下指定颜色 127
6.4.3 指定阴影模型 128
6.4.2 在指定颜色索引模式下指定颜色 128
第7章 光照 132
7.1 真实世界与OpenGL光照 133
7.1.2 材料颜色 134
7.1.3 光线与材质的RGB值 134
7.2 一个简单的例子:光照球体的渲染 135
7.2.1 为所有的物体顶点定义法线向量 137
7.2.2 创建,定位和激活一个或多个光源 137
7.2.3 选择光照模型 137
7.2.4 定义场景中物体的材质属性 137
7.3 创建光源 138
7.2.5 一些重要说明 138
7.3.1 颜色 139
7.3.2 定位和衰减 140
7.3.3 聚光灯 140
7.3.4 多光源 141
7.3.5 控制光源的位置与方向 142
7.4 选择光照模型 147
7.4.1 全局环境光 147
7.4.2 局部或无穷远的视点 147
7.5 材料属性的定义 148
7.4.3 双面光照 148
7.4.4 激活光照 148
7.5.1 散射和环境光反射 150
7.5.2 镜面反射 150
7.5.3 发射光颜色 151
7.5.4 改变材质属性 151
7.6 光照的数学计算 156
7.6.3 光源的贡献 157
7.6.4 聚光灯效果 157
7.6.2 放大的全局环境光 157
7.6.1 材质的发射光 157
7.6.5 环境光项 158
7.6.6 散射光项 158
7.6.7 镜面反射光项 158
7.6.8 求和 159
7.6.9 颜色索引模式下的光照 159
7.6.10 颜色索引模式下光照的数学计算 160
第8章 混合、反走样、雾 161
8.1 混合 161
8.1.1 源因子和目标因子 162
8.1.2 混合的简单使用 163
8.1.3 混合操作范例 164
8.1.4 具有深度缓存的三维混合 167
8.2 反走样 171
8.2.1 点和线的反走样 173
8.2.2 多边形的反走样 178
8.3 雾 182
8.3.1 雾的使用 182
8.3.2 雾的方程 186
9.1 位图和字体 191
第9章 绘制像素、位图、字体和图像 191
9.1.1 当前光栅位置 194
9.1.2 绘制位图 195
9.1.3 字体和显示列表 196
9.1.4 一个完整的字体定义和使用 197
9.2 图像 203
9.2.1 像素数据的读、写和拷贝 203
9.2.2 图像的放大与缩小 206
9.3 像素的存储、变换和映射 206
9.3.1 像素模式概论 206
9.3.2 像素存储控制模式 207
9.3.3 像素传递操作 209
9.3.4 像素矩形 210
9.3.5 像素读取过程详解 212
9.3.6 像素映射 213
第10章 纹理映射 215
10.1 概述及范例 217
10.1.1 纹理映射的步骤 217
10.1.2 一个简单的程序 218
10.2 指定纹理 221
10.2.2 细节等级(Level of Details) 222
10.2.1 使用纹理边界 222
10.2.3 控制过滤 228
10.2.4 一维纹理 230
10.3 调节和混合 230
10.4 分配纹理坐标 232
10.4.1 计算纹理坐标 232
10.4.2 纹理的重复和截取 233
10.5 自动纹理坐标生成 235
10.5.1 创建轮廓 236
10.5.2 环境映射 239
10.6.1 纹理矩阵堆栈 240
10.6 高级特性 240
10.6.2 纹理的q坐标 241
第11章 帧缓存 242
11.1 缓存及其使用 243
11.1.1 各种缓存概述 244
11.1.2 清空缓存 245
11.1.3 为写操作选择颜色缓存 246
11.1.4 缓存屏蔽 246
11.2 片原的测试与操作 247
11.2.2 alpha测试 248
11.2.1 剪取测试 248
11.2.3 模板测试 249
11.2.4 深度测试 254
11.2.5 混合,抖动及逻辑操作 255
11.3 累积缓存 257
11.3.1 场景反走样 257
11.3.2 运动模糊度 269
11.3.3 景深 270
11.3.4 柔和阴影 276
11.3.5 抖动 276
12.1 概述 278
第12章 求值程序和非均匀有理B样要(NURBS) 278
12.2 求值程序 279
12.2.1 一维求值程序 279
12.2.2 二维求值程序 284
12.3 GLU的NURBS接口程序 296
12.3.1 简单的NURBS范例 296
12.3.2 修剪 302
第13章 选择机制 306
13.1 选择 306
13.1.2 创建命名堆栈 307
13.1.1 基本步骤 307
13.1.3 选中记录 309
13.1.4 一个选择的实例 309
13.1.5 拾取 314
13.1.6 用多个命名和分层模型进行拾取 320
13.1.7 拾取和深度值 322
13.1.8 在编程中使用选择机制的一些提示 326
13.2 反馈 327
13.2.1 反馈数组 328
13.2.2 在反馈模式下使用标记 329
13.2.3 一个反馈的例子 330
第14章 OpenGL应用及提高应用程序性能的技巧 335
14.1 轻松制作透明物体 336
14.2 轻松实现淡出效果 337
14.3 利用后缓存进行物体选择 337
14.4 方便的图像变换 338
14.5 分层显示 339
14.6 字符反走样 340
14.7 绘制圆形的点 342
14.8 插入图像 342
14.9 制作贴花 342
14.10 用模板缓存绘制填充的凹多边形 343
14.11 确定重叠区域 344
14.12 阴影 345
14.13 消除隐藏线 345
14.14 纹理映射的应用 346
14.15 绘制深度缓存图像 347
14.16 笛里希累(Dinrichlet)域 347
14.17 生命游戏(Life Game) 348
14.18 交替使用glDrawPixelsO和glCopyPixelsO 349
第15章 高级应用(一):OpenGL与AutoCAD的图形接口 351
15.1 AutoCAD简介 351
15.2.1 DXF文件的基本结构 352
15.2 DXF文件分析 352
15.2.2 实体段分析 354
15.3 DXF接口程序的编写 356
15.4 OpenGL的DXF扩展库函数的制作 362
15.5 高级应用实例 363
第16章 高级应用(二):三维随机分形地形的生成 372
16.1 分形的基本原理 372
16.1.1 自相似 373
16.1.2 一维中点变换 373
16.1.3 Diamond-Square算法 376
16.1.4 蓝天白云的生成 380
16.2 分形地形生成实例 381
16.2.1 程序的运行 381
16.2.2 代码结构分析 382
附录1 OpenGL中的操作顺序 405
附1.1 概述 405
附1.2 几何操作 406
附1.2.1 顶点操作 406
附1.2.2 图元装配 406
附1.5 补充说明 407
附1.3 像素操作 407
附1.4 片元操作 407
附录2 OpenGL状态变量 409
附2.1 查询命令 409
附2.2 出错处理 410
附2.3 状态变量的保存和恢复 411
附2.4 OpenGL的状态变量 412
附2.4.1 当前值和相关数据 413
附2.4.2 变换 413
附2.4.3 颜色 414
附2.4.4 光照 414
附2.4.6 纹理 416
附2.4.5 光栅化 416
附2.4.7 像素操作 417
附2.4.8 帧缓存控制 418
附2.4.9 像素 419
附2.4.10 求值程序 420
附2.4.11 提示 420
附2.4.12 依赖执行的值 420
附2.4.13 像素深度 422
附2.4.14 混合 422
附3.1 纹理映射中的图像操作 423
附录3 OpenGL实用库 423
附3.2 变换坐标 424
附3.3 多边形网格化 425
附3.4 回调机制 425
附3.5 网格化物体 425
附3.6 指定回调函数 426
附3.7 描述网格化多边形 427
附3.8 渲染球体、圆柱和圆盘 428
附3.9 NURBS曲线和曲面 429
附3.10 错误的描述 430
附4.2 控制渲染 431
附4.2.1 管理OpenGL渲染内容 431
附录4 OpenGL对X窗口系统的扩展 431
附4.1 初始化 431
附4.2.2 后台渲染 432
附4.2.3 同步执行 432
附4.2.4 交换缓存 432
附4.2.5 使用X字体 432
附4.3 GLX库函数原型 432
附5.1 初始化及退出窗口 434
附录5 OpenGL辅助库 434
附5.3 装载颜色图 435
附5.4 初始化和绘制三维物体 435
附5.2 处理窗口和输入事件 435
附5.5 管理后台进程 437
附5.6 运行程序 437
附录6 计算法线向量 438
附6.1 为解析表面确定法线 438
附6.2 由多边形数据确定法线 440
附7.2 变换 442
附7.2.1 顶点变换 442
附7.1 齐次坐标 442
附录7 齐次坐标与变换矩阵 442
附7.2.2 法线变换 443
附7.2.3 变换矩阵 443
附录8 OpenGL编程要点 446
附8.1 OpenGL正确编程技巧 446
附8.2 提高OpenGL程序性能 447
附8.3 GLX的技巧 448
附录9 OpenGL的不变性 449
B 450
附录10 术语表 450
A 450
C 451
D 452
E 453
F 453
G 454
H 455
I 455
N 456
L 456
M 456
O 457
P 457
R 458
S 458
T 459
V 459
X 460