第1章 Delphi与OpenGL 1
1.1 Delphi编程的特点 1
1.2 OpenGL编程概述 3
1.2.1 OpenGL的基本概念 3
1.2.2 OpenGL的命令语法及各种状态的含义 5
1.3 利用Delphi编写OpenGL程序 6
1.3.1 OpenGL在Windows下的运行机制 6
1.3.2 Windows环境上OpenGL基本程序结构 7
1.3.3 最直接的实现方法 9
1.3.4 本书的实现方法 17
2.1 绘制初始化命令 20
第2章 构造基本图元 20
2.2 基本图元的绘制 21
2.2.1 点、线、多边形的简单定义 22
2.2.2 特殊多边形的绘制方法 26
2.2.3 设置点、线、多边形的绘制属性 27
2.2.4 顶点法向量的计算方法 36
2.2.5 构造较复杂形体 37
2.2.6 利用顶点数组优化绘制性能 39
2.3 基本图元绘制实例程序 41
第3章 定义场景的坐标变换 50
3.1 坐标变换的基本概念 50
3.2 通用变换命令 51
3.3.1 变换顺序及其结果 52
3.3 造型变换和视图变换 52
3.3.2 造型变换 54
3.3.3 视图变换 57
3.4 投影变换 59
3.4.1 透视投影 59
3.4.2 正交投影 61
3.4.3 视图体裁剪 62
3.5 视口变换 62
3.5.1 定义视口 62
3.5.2 变换z坐标 68
3.6 变换综合实例1:空间飞行器探险 68
3.6.1 主要程序代码 68
3.6.2 模型数据定义文件 72
3.6.3 程序运行结果 74
3.7 变换综合实例2:利用多线程绘制时钟 75
3.7.1 多线程时钟主程序 75
3.7.2 绘制时钟线程 76
3.7.3 程序执行结果 79
第4章 为物体设置颜色 80
4.1 色彩视觉原理 80
4.2 计算机中颜色的表示 81
4.2.1 颜色生成原理 81
4.2.2 RGB颜色模型 81
4.3 两种颜色模式 82
4.3.1 RGBA颜色模式 82
4.3.2 颜色索引模式 82
4.4 在两种模式下指定颜色 83
4.3.3 两种模式的应用场合 83
4.4.1 在RGBA模式下指定颜色 84
4.4.2 在颜色索引模式下指定颜色 84
4.4.3 在RGBA模式下指定颜色实例程序 89
4.5 用透明度模拟运动模糊 93
第5章 在场景中加入光照 97
5.1 OpenGL光照原理 97
5.1.1 光照分量 98
5.1.2 材质颜色 98
5.1.3 光线与材质的RGB值 99
5.2 创建光源 99
5.2.1 定义光源颜色 100
5.2.2 定义光源的位置与衰减 101
5.2.3 定义聚光灯 102
5.2.4 定义多光源 103
5.3 选择光照模型 103
5.3.1 全局环境光 104
5.3.2 局部和无穷远视点 104
5.3.3 双面光照 104
5.3.4 启用光照 105
5.4 定义材质特性 105
5.4.1 漫射和环境反射 106
5.4.2 镜面反射 106
5.4.3 发射光 106
5.5.1 控件设置 107
5.5 利用CGlight类设置光照 107
5.5.2 程序源代码 108
5.5.3 程序执行结果 110
第6章 制作一个模型编辑器 111
6.1 模型编辑器的基本功能 111
6.1.1 程序主界面组织 111
6.1.2 其他界面的组织 112
6.2 程序代码及详解 113
6.2.1 主程序说明部分 114
6.2.2 主程序创建函数、销毁函数和初始化函数 119
6.2.3 场景及其参数的装入和保存 123
6.2.4 与绘制相关的程序 130
6.2.5 模型编辑相关程序 135
6.2.6 窗体事件服务程序 142
6.2.7 设置图元参数 157
6.2.8 向场景中添加图元 160
6.2.9 设置坐标步长 162
6.2.10 设置旋转步长 164
6.2.11 显示等待信息 166
第7章 字体和图像编辑 167
7.1 字体及其在OpenGL中的使用 167
7.1.1 OpenGL对字符显示的支持 167
7.1.2 位图字体的使用 168
7.1.3 矢量字体的使用 170
7.2 OpenGL中图像编程 173
7.2.1 像素的读写 173
7.2.3 图像缩放 174
7.2.2 像素拷贝 174
7.3.1 程序界面设计 177
7.3 创建一个功能强大的二维绘图程序 177
7.3.2 程序代码 178
第8章 定义纹理映射 184
8.1 定义二维纹理映射的方法 184
8.2 控制纹理滤波 185
8.2.1 纹理滤波 185
8.2.2 纹理的重复与缩限 186
8.2.3 纹理的映射方式 186
8.2.4 定义纹理坐标 186
8.2.5 自动生成纹理坐标 186
8.3.1 文件格式转换 187
8.3 用图像文件创建纹理 187
8.3.2 从文件中直接读写 188
8.3.3 程序运行结果 191
8.4 用纹理映射实现环境映射效果 192
8.4.1 实现代码 192
8.4.2 程序运行结果 194
8.5 用纹理程序实现浮雕效果 195
8.5.1 程序代码 195
8.5.2 程序运行结果 200
8.6 用纹理实现地形漫游效果 201
第9章 利用显示列表提高绘制性能 206
9.1 显示列表的基本概念 206
9.2 显示列表的建立、执行和管理 208
9.2.1 显示列表的建立 209
9.2.2 显示列表中的存储内容 209
9.2.3 执行显示列表 210
9.2.4 显示列表的层次 211
9.2.5 管理显示列表及其索引 213
9.3 建立一个绘制地形的显示列表 214
第10章 各种特殊效果的实现 218
10.1 利用颜色融合实现各种特效 218
10.1.1 源和目的因子 219
10.1.2 颜色融合的应用 220
10.1.3 一个颜色融合的实例 220
10.2 利用反走样使图像更平滑 223
10.1.4 利用深度缓存的三维融合 223
10.2.1 点或线的反走样 225
10.2.2 多边形的反走样 227
10.3 雾化效果的实现 227
10.4 利用粒子系统实现特殊效果 232
10.4.1 绘制动态喷泉程序代码 233
10.4.2 喷泉程序运行结果 235
10.4.3 创建一个屏幕保护程序 236
10.4.4 用粒子系统绘制一堆篝火 246
第11章 帧缓存与动画 261
11.1 缓存及其使用 261
11.1.1 OpenGL中的各种缓存 262
11.1.2 清除缓存 263
11.1.3 选择绘图的颜色缓存 264
11.1.4 屏蔽缓存 265
11.1.5 利用模板缓存实现镜面效果 265
11.1.6 利用辅助缓存提高动画性能 269
11.2 检验和操作片断值 272
11.2.1 剪载检验 272
11.2.2 Alpha检验 272
11.2.3 模板检验 273
11.2.4 深度检验 279
11.2.5 融合、抖动和逻辑操作 280
11.3 累积缓存 281
第12章 高效生成曲线曲面 286
12.1 高效生成曲线 286
12.1.1 绘制曲线举例 287
12.1.2 曲线定义和启用 289
12.1.3 曲线坐标运算 290
12.1.4 定义均匀间隔曲线坐标值 291
12.2 构造曲面 291
12.2.1 曲面定义和坐标计算 292
12.2.2 定义均匀间隔的曲面坐标值 292
12.2.3 NURBS曲面 296
12.2.4 给NURBS曲面定义纹理 300
12.3 专业的曲面曲线造型 303
12.3.1 创建一个插件 304
12.3.2 读取曲面模型数据 309
13.1 选择模式 316
第13章 选择与反馈实现交互 316
13.1.1 选择的基本步骤 317
13.1.2 建立名栈 318
13.1.3 命中记录 318
13.1.4 选择模式的例子 319
13.2 反馈模式 324
13.2.1 反馈数组 325
13.2.2 在反馈模式下利用标记 325
13.2.3 反馈的简单应用 326
13.2.4 反馈模式的完整示例 327
13.3 拾取 332
14.1 ASC文件格式说明 337
第14章 维纳斯之舞 337
14.2 读取三维模型文件程序实例 338
14.2.1 主程序代码 338
14.2.2 库程序主控程序 342
14.2.3 模型文件读取程序 346
14.2.4 数值处理相关程序 352
14.2.5 纹理映射相关程序 354
14.2.6 程序运行结果 362
第15章 蠕虫吃果游戏 363
15.1 程序界面设计 363
15.2 程序实现代码 364
15.2.1 主程序代码 364
15.2.2 绘制线程 371