前言
绪论
第1章 OpenGL基本要素
1.1 5DG的Win32编程框架
1.1.1 定义
1.1.2 ResizeWindowGL()设置OpenGL绘制场景的大小
1.1.3 创建Win32窗口
1.1.4 WinMain()
1.1.5 Initialize()
1.1.6 DrawSceneGL()
1.1.7 Update()
1.1.8 DeInitialize()
1.2 2D图形
1.2.1 定义
1.2.2 DrawSceneGL()
1.2.3 疑难解答
1.3 阴暗处理
1.3.1 DrawSceneGL()
1.3.2 彩色三角形
1.3.3 单色正方形
1.3.4 绿色椭圆
1.3.5 疑难解答
1.4 3D图形
1.4.1 改窗口标题
1.4.2 DrawCube()绘制绿色立方体
1.4.3 绘制金字塔和十字架
1.4.4 疑难解答
1.5 旋转
1.5.1 定义控制旋转的变量
1.5.2 glPushMatrix()和glPopMatrix()
1.5.3 glRotatef()旋转坐标轴
1.5.4 Update()中的按键控制
1.5.5 疑难解答
1.6 纹理贴图
1.6.1 定义
1.6.2 LoadImage()载入BMP图片
1.6.3 LoadTexture()创建纹理
1.6.4 在Initialize()里载入纹理
1.6.5 第一个纹理矩形
1.6.6 纹理金字塔
1.7 3D建模与绘制
1.7.1 物体建模
1.7.2 定义
1.7.3 LoadTextureGL()创建纹理
1.7.4 Initialize()
1.7.5 香皂
1.7.6 香皂盒
1.7.7 香皂盒的开关动画控制
1.7.8 疑难解答
1.8 简单的光照
1.8.1 定义
1.8.2 设置光源属性
1.8.3 DrawCube()绘制长方体
1.8.4 使用光源
1.8.5 Update()
1.8.6 疑难解答
1.9 雾
1.9.1 定义
1.9.2 LoadTextureGL()创建纹理
1.9.3 初始化雾
1.9.4 三个金字塔
1.9.5 Update()
1.10 透明
1.10.1 定义
1.10.2 DrawPic()绘制平面
1.10.3 指定混合算子
1.10.4 DrawSceneGL()
1.10.5 Update()
1.10.6 疑难解答
1.11 地月系
1.11.1 定义
1.11.2 Initalize()
1.11.3 DrawSceneGL()
1.11.4 疑难解答
1.12 习题
第2章 光照和材质专题
2.1 聚光
2.1.1 定义
2.1.2 初始化光源
2.1.3 绘制机器人
2.1.4 绘制场景
2.1.5 按键控制
2.1.6 疑难解答
2.2 材质
2.2.1 光源和材质定义
2.2.2 Initialize()
2.2.3 光源的移动控制
2.2.4 提示信息
2.2.5 绘制小球
2.2.6 按键控制
2.2.7 疑难解答
2.3 习题
第3章 显示表专题
3.1 显示表的应用
3.1.1 定义
3.1.2 建立显示表
3.1.3 调用显示表
3.1.4 删除显示表
3.1.5 疑难解答
3.2 Bitmap和Outline字体
3.2.1 位图字体(Bitmap Fonts)
3.2.2 轮廓字体(Outline Fonts)
3.3 中文字体
3.3.1 定义
3.3.2 建立字体
3.3.3 删除字体
3.3.4 显示字体
3.3.5 中文的输出
3.3.6 疑难解答
3.4 习题
第4章 纹理专题
4.1 纹理导入
4.1.1 本工程文件
4.1.2 创建纹理
4.1.3 获取导入的图片信息
4.1.4 建立临时位图
4.1.5 TGA格式图片导入
4.1.6 定义(Main.cpp)
4.1.7 载入纹理图片
4.1.8 绘制主场景
4.1.9 纹理切分
4.1.10 动画控制
4.1.11 疑难解答
4.2 户外地形
4.2.1 工程文件构成
4.2.2 导入文件数据
4.2.3 获取高度值
4.2.4 绘制地形
4.2.5 绘制主场景
4.2.6 疑难解答
4.3 天空纹理
4.3.1 天空盒(Skybox)
4.3.2 设置纹理滤波方式
4.3.3 绘制天空盒
4.3.4 疑难解答
4.4 纹理特效综合
4.4.1 定义
4.4.2 建立黑色纹理(BuildBlackTexture)
4.4.3 程序初始化
4.4.4 运动模糊
4.4.5 运动的隧道
4.4.6 绘制电影胶片
4.4.7 电视雪花特效
4.4.8 蝶形曲线和曲面
4.4.9 主场景绘制
4.5 习题
第5章 缓冲区专题
5.1 切割技术
5.1.1 深度测试
5.1.2 利用深度测试切割
5.1.3 使用自定义的切割面(clipping plane)
5.1.4 按键控制
5.2 透视技术
5.2.1 Stencil测试
5.2.2 透视技术
5.2.3 按键控制
第6章 坐标系和视图专题
6.1 gluLookAt()详解
6.1.1 gluLookAt()介绍
6.1.2 定义
6.1.3 Initialize()
6.1.4 移动Camera
6.1.5 坐标系及锥体绘制
6.1.6 总场景绘制
6.2 透视投影和正射投影
6.2.1 定义
6.2.2 修改ResizeWindowGL()
6.2.3 绘制公路路标
6.2.4 绘制公路和汽车
6.2.5 绘制视口场景
6.2.6 汽车引擎声音的播放
6.2.7 建立视口
6.2.8 设置正射投影
6.2.9 透视投影
6.3 阴影的实现
6.3.1 定义
6.3.2 阴影矩阵的计算
6.3.3 绘制投影平面
6.3.4 绘制十字架及阴影
6.3.5 绘制直升飞机及其阴影
6.3.6 绘制模拟光源
6.3.7 按键控制
6.3.8 疑难解答
6.4 习题
第7章 复杂物体建模专题
7.1 二次对象
7.1.1 操作二次对象流程
7.1.2 定义
7.1.3 ChangeStatus()
7.1.4 resetstatus()
7.1.5 SetBusy()
7.1.6 创建二次曲面对象
7.1.7 按键控制
7.1.8 场景绘制
7.1.9 释放空间
7.2 曲线和曲面
7.2.1 定义
7.2.2 Bezier曲线
7.2.3 Bezier曲面
7.2.4 NURBS对象
7.2.5 NURBS曲线
7.2.6 NURBS曲面
7.2.7 按键控制
7.3 OBJ文件载入
7.3.1 标准模板库
7.3.2 重要定义
7.3.3 函数声明
7.3.4 关键函数定义
7.3.5 法向量计算
7.3.6 初始化设置
7.3.7 绘制场景
7.3.8 释放存储空间
7.4 3ds文件载入
7.4.1 3ds文件格式简介
7.4.2 3ds文件导入及使用
7.5 习题
第8章 粒子系统专题
8.1 简单粒子系统——星云
8.1.1 粒子的定义
8.1.2 粒子系统初始化
8.1.3 绘制星空粒子
8.1.4 更新粒子属性
8.1.5 粒子死亡和再生
8.1.6 绘制星空粒子系统
8.1.7 疑难解答
8.2 5DGS MatriX粒子系统
8.2.1 Matrix01粒子系统
8.2.2 5DG粒子系统
8.2.3 绘制5DG和Matrix01粒子系统
8.3 习题
第9章 高级专题
9.1 音频系统
9.1.1 链接音频库
9.1.2 定义
9.1.3 初始化音频系统
9.1.4 释放音频文件
9.1.5 初始化场景
9.1.6 绘制钢琴
9.1.7 播放控制
9.1.8 疑难解答
9.2 检选
9.2.1 实现检选的基本步骤
9.2.2 主要函数
9.2.3 定义
9.2.4 背景绘制
9.2.5 检选的实现
9.2.6 DrawObjects()
9.2.7 获取鼠标的屏幕坐标
9.2.8 转换鼠标的坐标
9.2.9 绘制鼠标指针
9.2.10 疑难解答
9.3 反馈
9.3.1 定义
9.3.2 插入物体标记
9.3.3 MakeSelection(int n Choice()
9.3.4 绘制物体外形方框
9.3.5 显示物体信息和帮助
9.3.6 疑难解答
9.4 习题
第10章 小飞机游戏设计专题
10.1 小飞机游戏的设计说明
10.1.1 需求
10.1.2 类的设计
10.1.3 技术要点
10.2 小飞机游戏的实现
10.2.1 模块设计
10.2.2 游戏的初始化
10.2.3 Opening
10.2.4 Runnin
10.2.5 Ending
10.2.6 DrawSceneGL()
10.3 习题
附录
附录A 建立5DG工程
A.1 使用简单的5DG框架
A.2 使用复杂的5DG框架
附录B 光盘资源说明
参考文献