第1章 绪论 1
1.1 OpenGL API 2
1.2 关于OpenGL的三种观点 3
1.2.1 程序员的观点 3
1.2.2 OpenGL状态机 4
1.2.3 OpenGL绘制流水线 4
1.3 OpenGL的组成 5
1.4 OpenGL的版本和扩展 6
1.5 语言 6
1.6 编程约定 6
1.7 编译 8
1.8 资源 9
1.9 本书的适用对象 10
1.10 全书概览 11
第2章 OpenGL中的二维编程 13
2.1 一个简单的示例程序 14
2.2 GLUT 15
2.3 事件循环和回调函数 16
2.4 矩形的绘制 17
2.5 修改GLUT中的默认值 19
2.6 OpenGL中的颜色 20
2.6.1 颜色的设置 20
2.6.2 颜色和状态 21
2.7 OpenGL和GLUT坐标系之间的差异 21
2.8 二维取景 22
2.9 视口 23
2.10 坐标系与变换 23
2.11 simple.c(第2版) 24
2.12 图元及其属性 26
2.12.1 点 27
2.12.2 直线 27
2.12.3 启用OpenGL特性 29
2.12.4 填充的图元 29
2.12.5 矩形 31
2.12.6 多边形的点划模式 31
2.13 多边形类型 31
2.14 颜色插值 34
2.14.1 离散处理与边标记 34
2.14.2 离散化与细分 35
2.15 文本 43
2.16 查询与错误 44
2.17 状态的保存 46
2.18 编程练习 47
第3章 交互与动画 49
3.1 重绘回调函数 50
3.2 Idle回调函数 51
3.3 一个旋转的矩形 52
3.4 双缓存 54
3.5 键盘的使用 54
3.6 鼠标回调函数的使用 56
3.7 鼠标的移动 59
3.8 菜单 60
3.9 NULL回调函数 62
3.10 子窗口与多窗口 62
3.11 例程:single_double.c 63
3.12 显示列表 66
3.12.1 多个显示列表 67
3.12.2 显示列表与文本 68
3.12.3 显示列表与对象 69
3.13 拾取和选择模式 69
3.14 编程练习 74
第4章 三维编程基础 75
4.1 摄像机与对象 76
4.2 OpenGL中的正交投影 79
4.3 观察一个立方体 80
4.4 摄像机的定位 81
4.5 对象的生成 84
4.5.1 数组的使用 85
4.5.2 顶点数组 86
4.6 消隐 88
4.7 GLU与GLUT对象 89
4.7.1 GLU二次曲面 90
4.7.2 GLUT对象 92
4.8 透视投影 94
4.9 编程练习 96
第5章 几何变换 97
5.1 线性变换 98
5.2 齐次坐标 98
5.3 模型-视图变换与投影变换 99
5.4 平移 99
5.5 旋转变换 102
5.6 比例变换 103
5.7 一个旋转的立方体 104
5.8 直接设置矩阵 106
5.9 变换与坐标系 109
5.10 基于变换的建模 110
5.10.1 实例化 110
5.10.2 层次模型 111
5.11 编程练习 118
第6章 光照与材质 119
6.1 光照与材质之间的交互 120
6.2 Phong模型 121
6.2.1 漫反射 122
6.2.2 镜面反射 122
6.2.3 环境反射 123
6.2.4 发射光 123
6.3 OpenGL中的光照 123
6.4 光源的指定 124
6.5 材质的指定 128
6.6 旋转立方体的明暗计算 130
6.7 对明暗计算的控制 133
6.8 平滑着色 134
6.9 法线的处理 135
6.10 透明度 135
6.11 编程练习 139
第7章 离散图元 141
7.1 像素和位图 142
7.2 位图 143
7.2.1 位图的显示 144
7.2.2 位图和几何图元的融合 146
7.2.3 颜色与模板 147
7.3 绘制模式 148
7.4 像素的读/写 151
7.4.1 像素的写操作 152
7.4.2 像素的读取 152
7.4.3 像素的复制 153
7.5 缓存的选择 154
7.6 像素存储模式 155
7.7 PPM图像的显示 155
7.8 灰度图像的使用 162
7.9 像素映射 162
7.10 像素的缩放 164
7.11 OpenGL中的图像处理 165
7.12 编程练习 166
第8章 纹理映射 167
8.1 什么是纹理映射 168
8.2 纹理图的创建 169
8.3 纹理坐标 172
8.4 纹理参数 173
8.5 一个带有纹理的旋转立方体 175
8.6 将纹理映射到表面 179
8.7 边界与尺寸调整 180
8.8 多级渐进纹理 180
8.9 纹理坐标的自动生成 182
8.10 纹理对象 186
8.11 用于图像操作的纹理图 187
8.12 编程练习 190
第9章 曲线与曲面 191
9.1 参数曲线 192
9.2 参数曲面 194
9.3 贝塞尔曲线和曲面 195
9.4 一维OpenGL求值器 196
9.5 二维求值器 198
9.6 一个交互式例程 199
9.7 其他类型的曲线 201
9.7.1 B样条 202
9.7.2 NURBS曲线 206
9.8 犹他壶 206
9.9 法向量与明暗 211
9.10 为表面映射纹理 213
9.11 编程练习 214
第10章 OpenGL着色语言 215
10.1 对流水线的回顾 216
10.2 着色器与着色语言 217
10.2.1 RenderMan 217
10.2.2 Cg与GLSL 218
10.3 GLSL 218
10.3.1 执行模型 219
10.3.2 一个简单的顶点着色器 219
10.3.3 一个简单的片段着色器 220
10.4 GLSL语言基础 221
10.4.1 限定符 221
10.4.2 运算符 223
10.4.3 控制结构 224
10.4.4 内置函数 224
10.4.5 采样器 225
10.5 建立与应用程序之间的接口 226
10.5.1 着色器对象的创建 226
10.5.2 着色器的读取和编译 227
10.5.3 编译和连接 228
10.5.4 错误检查 229
10.5.5 将数据送入着色器 229
10.6 顶点着色器示例 230
10.7 片段着色器示例 232
第11章 总结与展望 237
11.1 OpenGL各版本及扩展 238
11.1.1 OpenGL 1.1版本 238
11.1.2 OpenGL 1.2版本 238
11.1.3 OpenGL 1.3版本 239
11.1.4 OpenGL 1.4版本 239
11.1.5 OpenGL 1.5版本 239
11.1.6 OpenGL 2.0版本 240
11.1.7 OpenGL 2.1版本 240
11.2 OpenGL扩展 240
11.3 一些附加的OpenGL特性 240
11.4 其他缓存 241
11.4.1 累积缓存 241
11.4.2 模板缓存 242
11.4.3 片段测试 243
11.5 编写可移植、高效而又健壮的代码 243
索引 245