1.1 5DG的Win32编程框架 4
1.1.1 定义 4
第1章 OpenGL基本要素 4
1.1.2 ResizeWindowGL()设置OpenGL绘制场景的大小 6
1.1.3 创建Win32窗口 6
1.1.4 WinMain() 14
1.1.5 Initialize() 16
1.1.6 DrawSceneGL() 17
1.1.7 Update() 17
1.1.8 DeInitialize() 18
1.2 2D图形 18
1.2.1 定义 18
1.2.2 DrawSceneGL() 18
1.2.3 疑难解答 20
1.3 阴暗处理 20
1.3.2 彩色三角形 21
1.3.1 DrawSceneGL() 21
1.3.3 单色正方形 22
1.3.4 绿色椭圆 22
1.3.5 疑难解答 22
1.4 3D图形 23
1.4.1 改窗口标题 24
1.4.2 DrawCube()绘制绿色立方体 24
1.4.3 绘制金字塔和十字架 25
1.4.4 疑难解答 26
1.5 旋转 26
1.5.1 定义控制旋转的变量 27
1.5.2 glPushMatrix()和glPopMatrix() 27
1.5.3 glRotatef()旋转坐标轴 27
1.5.4 Update()中的按键控制 28
1.6 纹理贴图 29
1.6.1 定义 29
1.5.5 疑难解答 29
1.6.2 LoadImage()载入BMP图片 30
1.6.3 LoadTexture()创建纹理 30
1.6.4 在Initialize()里载入纹理 32
1.6.5 第一个纹理矩形 32
1.6.6 纹理金字塔 33
1.7 3D建模与绘制 34
1.7.1 物体建模 34
1.7.2 定义 35
1.7.3 LoadTextureGL()创建纹理 35
1.7.4 Initialize() 36
1.7.5 香皂 36
1.7.6 香皂盒 38
1.7.7 香皂盒的开关动画控制 39
1.7.8 疑难解答 40
1.8.1 定义 41
1.8 简单的光照 41
1.8.2 设置光源属性 42
1.8.3 DrawCube()绘制长方体 42
1.8.4 使用光源 43
1.8.5 Update() 44
1.8.6 疑难解答 44
1.9.1 定义 45
1.9.2 LoadTextureGL()创建纹理 45
1.9 雾 45
1.9.3 初始化雾 46
1.9.4 三个金字塔 47
1.9.5 Update() 48
1.10 透明 48
1.10.1 定义 49
1.10.2 DrawPic()绘制平面 50
1.10.3 指定混合算子 50
1.10.4 DrawSceneGL() 51
1.10.5 Update() 51
1.11 地月系 52
1.10.6 疑难解答 52
1.11.1 定义 53
1.11.2 Initalize() 53
1.11.3 DrawSceneGL() 54
1.11.4 疑难解答 57
1.12 习题 57
第2章 光照和材质专题 58
2.1 聚光 58
2.1.1 定义 58
2.1.2 初始化光源 59
2.1.3 绘制机器人 60
2.1.4 绘制场景 61
2.1.5 按键控制 64
2.1.6 疑难解答 64
2.2 材质 64
2.2.2 Initialize() 65
2.2.1 光源和材质定义 65
2.2.3 光源的移动控制 66
2.2.4 提示信息 66
2.2.5 绘制小球 67
2.2.6 按键控制 69
2.2.7 疑难解答 70
2.3 习题 71
3.1.1 定义 72
3.1.2 建立显示表 72
3.1 显示表的应用 72
第3章 显示表专题 72
3.1.3 调用显示表 73
3.1.4 删除显示表 74
3.1.5 疑难解答 75
3.2 Bitmap和Outline字体 75
3.2.1 位图字体(BitmapFonts) 76
3.2.2 轮廓字体(Outline Fonts) 80
3.3.1 定义 81
3.3 中文字体 81
3.3.2 建立字体 82
3.3.3 删除字体 83
3.3.4 显示字体 83
3.3.5 中文的输出 85
3.3.6 疑难解答 86
3.4 习题 86
4.1.1 本工程文件 87
4.1.2 创建纹理 87
4.1 纹理导入 87
第4章 纹理专题 87
4.1.3 获取导入的图片信息 89
4.1.4 建立临时位图 90
4.1.5 TGA格式图片导入 91
4.1.6 定义(Main.cpp) 93
4.1.7 载入纹理图片 94
4.1.8 绘制主场景 95
4.1.9 纹理切分 96
4.1.10 动画控制 97
4.1.11 疑难解答 99
4.2 户外地形 100
4.2.1 工程文件构成 100
4.2.2 导入文件数据 100
4.2.3 获取高度值 101
4.2.4 绘制地形 102
4.2.6 疑难解答 104
4.2.5 绘制主场景 104
4.3 天空纹理 105
4.3.1 天空盒(Skybox) 105
4.3.2 设置纹理滤波方式 105
4.3.3 绘制天空盒 106
4.3.4 疑难解答 109
4.4 纹理特效综合 109
4.4.1 定义 110
4.4.2 建立黑色纹理(BuildBlackTexture()) 110
4.4.4 运动模糊 111
4.4.3 程序初始化 111
4.4.5 运动的隧道 114
4.4.6 绘制电影胶片 115
4.4.7 电视雪花特效 116
4.4.8 蝶形曲线和曲面 117
4.4.9 主场景绘制 118
4.5 习题 119
第5章 缓冲区专题 120
5.1 切割技术 120
5.1.1 深度测试 120
5.1.2 利用深度测试切割 121
5.1.3 使用自定义的切割面(clipping plane) 122
5.1.4 按键控制 124
5.2 透视技术 124
5.2.1 Stencil测试 124
5.2.2 透视技术 125
5.2.3 按键控制 127
6.1 gluLookAt()详解 128
6.1.1 gluLookAt()介绍 128
第6章 坐标系和视图专题 128
6.1.2 定义 129
6.1.3 Initialize() 129
6.1.4 移动Camera 130
6.1.5 坐标系及锥体绘制 131
6.1.6 总场景绘制 133
6.2.2 修改ResizeWindowGL() 134
6.2 透视投影和正射投影 134
6.2.1 定义 134
6.2.3 绘制公路路标 135
6.2.4 绘制公路和汽车 135
6.2.5 绘制视口场景 136
6.2.6 汽车引擎声音的播放 136
6.2.7 建立视口 137
6.2.8 设置正射投影 137
6.2.9 透视投影 139
6.3 阴影的实现 140
6.3.1 定义 141
6.3.2 阴影矩阵的计算 141
6.3.3 绘制投影平面 143
6.3.4 绘制十字架及阴影 143
6.3.5 绘制直升飞机及其阴影 144
6.3.6 绘制模拟光源 145
6.4 习题 146
6.3.8 疑难解答 146
6.3.7 按键控制 146
第7章 复杂物体建模专题 148
7.1 二次对象 148
7.1.1 操作二次对象流程 148
7.1.2 定义 148
7.1.3 ChangeStatus() 149
7.1.4 resetstatus() 150
7.1.7 按键控制 151
7.1.5 SetBusy() 151
7.1.6 创建二次曲面对象 151
7.1.8 场景绘制 153
7.1.9 释放空间 154
7.2 曲线和曲面 155
7.2.1 定义 155
7.2.2 Bezier曲线 156
7.2.3 Bezier曲面 157
7.2.4 NURBS对象 159
7.2.5 NURBS曲线 159
7.2.6 NURBS曲面 160
7.2.7 按键控制 161
7.3 OBJ文件载入 161
7.3.1 标准模板库 164
7.3.2 重要定义 164
7.3.3 函数声明 165
7.3.4 关键函数定义 165
7.3.5 法向量计算 168
7.3.6 初始化设置 171
7.3.7 绘制场景 171
7.3.8 释放存储空间 172
7.4 3ds文件载入 173
7.4.1 3ds文件格式简介 173
7.4.2 3ds文件导入及使用 175
7.5 习题 177
第8章 粒子系统专题 179
8.1 简单粒子系统——星云 179
8.1.1 粒子的定义 179
8.1.2 粒子系统初始化 180
8.1.3 绘制星空粒子 181
8.1.4 更新粒子属性 181
8.1.5 粒子死亡和再生 182
8.1.6 绘制星空粒子系统 182
8.2.1 Matrix01粒子系统 183
8.2 5DG'S Matrix粒子系统 183
8.1.7 疑难解答 183
8.2.2 5DG粒子系统 187
8.2.3 绘制5DG和Matrix01粒子系统 189
8.3 习题 190
第9章 高级专题 191
9.1 音频系统 191
9.1.1 链接音频库 191
9.1.2 定义 191
9.1.3 初始化音频系统 192
9.1.4 释放音频文件 193
9.1.5 初始化场景 193
9.1.6 绘制钢琴 194
9.1.7 播放控制 195
9.1.8 疑难解答 196
9.2 检选 196
9.2.2 主要函数 197
9.2.3 定义 197
9.2.1 实现检选的基本步骤 197
9.2.4 背景绘制 198
9.2.5 检选的实现 198
9.2.6 DrawObiects() 200
9.2.7 获取鼠标的屏幕坐标 202
9.2.8 转换鼠标的坐标 203
9.2.9 绘制鼠标指针 203
9.3 反馈 204
9.2.10 疑难解答 204
9.3.1 定义 205
9.3.2 插入物体标记 205
9.3.3 MakeSelection(int nChoice) 206
9.3.4 绘制物体外形方框 209
9.3.5 显示物体信息和帮助 210
9.3.6 疑难解答 211
9.4 习题 211
10.1.2 类的设计 212
10.1.1 需求 212
10.1 小飞机游戏的设计说明 212
第10章 小飞机游戏设计专题 212
10.1.3 技术要点 216
10.2 小飞机游戏的实现 217
10.2.1 模块设计 217
10.2.2 游戏的初始化 217
10.2.3 Opening 219
10.2.4 Running 219
10.2.5 Ending 221
10.2.6 DrawSceneGL() 222
10.3 习题 222
附录 224
附录A 建立5DG工程 224
A.1 使用简单的5DG框架 224
A.2 使用复杂的5DG框架 226
附录B 光盘资源说明 227
参考文献 228