Delphi以其强大的界面编程能力吸引着众多的程序员,其严谨而简洁的程序结构更让大批编程爱好者纷至杏来。OpenGL作为国际上通用的开放式三维图形标准,同样令三维图形爱好者心驰神往。\r\n\r\n 本书对Delphi编程和OpenGL编程进行了完美的结合,首先讲解了如何在Delphi环境下正确设置环境以进行OpenGL程序设计,然后介绍了OpenlGL的基础知识和基本概念,并讲解了OpenGL的高级编程方法,最后通过一个蠕虫吃果游戏和一个模型编辑程序对本书内容作了一个全面总结。\r\n\r\n 本书无论是对大专院校的学生,还是对科研院所的研究人员,都是一本难得的三维图形技术指导和参考书。此外,本书亦可作为从事计算机图形工作人员的三维图形概念引导,同时本书也适合作为OpenGL三维图形编程的培训教程。\r\n\r\n \r\n
\r\n
第1章 Delphi与OpenGL \r\n\r\n 1. 1 Delphi编程的特点 \r\n\r\n 1. 2 OpenGL编程概述 \r\n\r\n 1. 2. 1 OpenGL的基本概念 \r\n\r\n 1. 2. 2 OpenGL的命令语法及各种状态的含义 \r\n\r\n 1. 3 利用Delphi编写0penGL程序 \r\n\r\n 1. 3. 1 OpenGL在Windows下的运行机制 \r\n\r\n 1. 3. 2 Windows环境下OpenGL基本程序结构 \r\n\r\n 1. 3. 3 最直接的实现方法 \r\n\r\n 1. 3. 4 本书的实现方法 \r\n\r\n 第2章 构造基本国元 \r\n\r\n 2. 1 绘制初始化命令 \r\n\r\n 2. 2 基本图元的绘制 \r\n\r\n 2. 2. 1 点. 线. 多边形的简单定义 \r\n\r\n 2. 2. 2 特殊多边形的绘制方法 \r\n\r\n 2. 2. 3 设置点. 线. 多边形的绘制属性 \r\n\r\n 2. 2. 4 顶点法向量的计算方法 \r\n\r\n 2. 2. 5 构造较复杂形体 \r\n\r\n 2. 2. 6 利用顶点数组优化绘制性能 \r\n\r\n 2. 3 基本图元绘制实例程序 \r\n\r\n 第3章 定义场景的坐标变换 \r\n\r\n 3. 1 坐标变换的基本概念 \r\n\r\n 3. 2 通用变换命令 \r\n\r\n 3. 3 造型变换和视图变换 \r\n\r\n 3. 3. 1 变换顺序及其结果 \r\n\r\n 3. 3. 2 造型变换 \r\n\r\n 3. 3. 3 视图变换 \r\n\r\n 3. 4 投影变换 \r\n\r\n 3. 4. 1 透视投影 \r\n\r\n 3. 4. 2 正交投影 \r\n\r\n 3. 4. 3 视图体裁剪 \r\n\r\n 3. 5 视口变换 \r\n\r\n 3. 5. 1 定义视口 \r\n\r\n 3. 5. 2 变换z坐标 \r\n\r\n 3. 6 变换综合实例1:空间飞行器探险 \r\n\r\n 3. 6. 1 主要程序代码 \r\n\r\n 3. 6. 2 模型数据定义文件 \r\n\r\n 3. 6. 3 程序运行结果 \r\n\r\n 3. 7 变换综合实例2:利用多线程绘制时钟 \r\n\r\n 3. 7. 1 多线程时钟主程序 \r\n\r\n 3. 7. 2 绘制时钟线程 \r\n\r\n 3. 7. 3 程序执行结果 \r\n\r\n 第4章 为物体设置颜色 \r\n\r\n 4. 1 色彩视觉原理 \r\n\r\n 4. 2 计算机中颜色的表示 \r\n\r\n 4. 2. 1 颜色生成原理 \r\n\r\n 4. 2. 2 RGB颜色模型 \r\n\r\n 4. 3 两种颜色模式 \r\n\r\n 4. 3. 1 RGBA颜色模式 \r\n\r\n 4. 3. 2 颜色索引模式 \r\n\r\n 4. 3. 3 两种模式的应用场合 \r\n\r\n 4. 4 在两种模式下指定颜色 \r\n\r\n 4. 4. 1 在RGBA模式下指定颜色 \r\n\r\n 4. 4. 2 在颜色索引模式下指定额色 \r\n\r\n 4. 4. 3 在RGBA模式下指定额色实例程序 \r\n\r\n 4. 5 用透明度模拟运动模糊 \r\n\r\n 第5章 在场景中加入光照 \r\n\r\n 5. 1 0penGL光照原理 \r\n\r\n 5. 1. 1 光照分量 \r\n\r\n 5. 1. 2 材质颜色 \r\n\r\n 5. 1. 3 光线与材质的RGB值 \r\n\r\n 5. 2 创建光源 \r\n\r\n 5. 2. 1 定义光源颜色 \r\n\r\n 5. 2. 2 定义光源的位置与衰减 \r\n\r\n 5. 2. 3 定义聚光灯 \r\n\r\n 5. 2. 4 定义多光源 \r\n\r\n 5. 3 选择光照模型 \r\n\r\n 5. 3. 1 全局环境光 \r\n\r\n 5. 3. 2 局部和无穷远视点 \r\n\r\n 5. 3. 3 双面光照 \r\n\r\n 5. 3. 4 启用光照 \r\n\r\n 5. 4 定义材质特性 \r\n\r\n 5. 4. 1 漫射和环境反射 \r\n\r\n 5. 4. 2 镜面反射 \r\n\r\n 5. 4. 3 发射光 \r\n\r\n 5. 5 利用CGLight类设置光照 \r\n\r\n 5. 5. 1 控件设置 \r\n\r\n 5. 5. 2 程序源代码 \r\n\r\n 5. 5. 3 程序执行结果 \r\n\r\n 第6章 制作一个模型编辑器 \r\n\r\n 6. 1 模型编辑器的基本功能 \r\n\r\n 6. 1. 1 程序主界面组织 \r\n\r\n 6. 1. 2 其他界面的组织 \r\n\r\n 6. 2 程序代码及详解 \r\n\r\n 6. 2. 1 主程序说明部分 \r\n\r\n 6. 2. 2 主程序创建函数. 销毁函数和初始化函数 \r\n\r\n 6. 2. 3 场景及其参数的装入和保存 \r\n\r\n 6. 2. 4 与绘制相关的程序 \r\n\r\n 6. 2. 5 模型编辑相关程序 \r\n\r\n 6. 2. 6 窗体事件服务程序 \r\n\r\n 6. 2. 7 设置图元参数 \r\n\r\n 6. 2. 8 向场景中添加图元 \r\n\r\n 6. 2. 9 设置坐标步长 \r\n\r\n 6. 2. 10 设置旋转步长 \r\n\r\n 6. 2. 11 显示等待信息 \r\n\r\n 第7章 字体和图像编程 \r\n\r\n 7. 1 字体及其在OpenGL中的使用 \r\n\r\n 7. 1. 1 OpenGL对字符显示的支持 \r\n\r\n 7. 1. 2 位图字体的使用 \r\n\r\n 7. 1. 3 矢量字体的使用 \r\n\r\n 7. 2 0penGL中图像编程 \r\n\r\n 7. 2. 1 像素的读写 \r\n\r\n 7. 2. 2 像素拷贝 \r\n\r\n 7. 2. 3 图像缩放 \r\n\r\n 7. 3 创建一个功能强大的二维绘图程序 \r\n\r\n 7. 3. 1 程序界面设计 \r\n\r\n 7. 3. 2 程序代码 \r\n\r\n 第8章 定义纹理映射 \r\n\r\n 8. 1 定义二维纹理映射的方法 \r\n\r\n 8. 2 控制纹理滤波 \r\n\r\n 8. 2. 1 纹理滤波 \r\n\r\n 8. 2. 2 纹理的重复与缩限 \r\n\r\n 8. 2. 3 纹理的映射方式 \r\n\r\n 8. 2. 4 定义纹理坐标 \r\n\r\n 8. 2. 5 自动生成纹理坐标 \r\n\r\n 8. 3 用图像文件创建纹理 \r\n\r\n 8. 3. 1 文件格式转换 \r\n\r\n 8. 3. 2 从文件中直接读写 \r\n\r\n 8. 3. 3 程序运行结果 \r\n\r\n 8. 4 用纹理映射实现环境映射效果 \r\n\r\n 8. 4. 1 实现代码 \r\n\r\n 8. 4. 2 程序运行结果 \r\n\r\n 8. 5 用纹理映射实现浮雕效果 \r\n\r\n 8. 5. 1 程序代码 \r\n\r\n 8. 5. 2 程序运行结果 \r\n\r\n 8. 6 用纹理实现地形漫游效果 \r\n\r\n 第9章 利用显示列表提高绘制性能 \r\n\r\n 9. 1 显示列表的基本概念 \r\n\r\n 9. 2 显示列表的建立. 执行和管理 \r\n\r\n 9. 2. 1 显示列表的建立 \r\n\r\n 9. 2. 2 显示列表中的存储内容 \r\n\r\n 9. 2. 3 执行显示列表 \r\n\r\n 9. 2. 4 显示列表的层次 \r\n\r\n 9. 2. 5 管理显示列表及其索引 \r\n\r\n 9. 3 建立一个绘制地形的显示列表 \r\n\r\n 第10章 各种特殊效果的实现 \r\n\r\n 10. 1 利用颜色融合实现各种特效 \r\n\r\n 10. 1. 1 源和目的因子 \r\n\r\n 10. 1. 2 颜色融合的应用 \r\n\r\n 10. 1. 3 一个颜色融合的实例 \r\n\r\n 10. 1. 4 利用深度缓存的三维融合 \r\n\r\n 10. 2 利用反走样使图像更平滑 \r\n\r\n 10. 2. 1 点或线的反走样 \r\n\r\n 10. 2. 2 多边形的反走样 \r\n\r\n 10. 3 雾化效果的实现 \r\n\r\n 10. 4 利用粒子系统实现特殊效果 \r\n\r\n 10. 4. 1 绘制动态喷泉程序代码 \r\n\r\n 10. 4. 2 喷泉程序运行结果 \r\n\r\n 10. 4. 3 创建一个屏幕保护程序 \r\n\r\n 10. 4. 4 用粒子系统绘制一堆簧火 \r\n\r\n 第11章 帧缓存与动画 \r\n\r\n 11. 1 缓存及其使用 \r\n\r\n 11. 1. 1 0penGL中的各种缓存 \r\n\r\n 11. 1. 2 清除缓存 \r\n\r\n 11. 1. 3 选择绘图的颜色缓存 \r\n\r\n 11. 1. 4 屏蔽缓存 \r\n\r\n 11. 1. 5 利用模板缓存实现镜面效果 \r\n\r\n 11. 1. 6 利用辅助缓存提高动画性能 \r\n\r\n 11. 2 检验和操作片断值 \r\n\r\n 11. 2. 1 剪裁检验 \r\n\r\n 11. 2. 2 A1pha检验 \r\n\r\n 11. 2. 3 模板检验 \r\n\r\n 11. 2. 4 深度检验 \r\n\r\n ll. 2. 5 融合. 抖动和逻辑操作 \r\n\r\n 11. 3 累积缓存 \r\n\r\n 第12章 高效生成曲线曲面 \r\n\r\n 12. 1 高效生成曲线 \r\n\r\n 12. 1. 1 绘制曲线举例 \r\n\r\n 12. 1. 2 曲线定义和启用 \r\n\r\n 12. 1. 3 曲线坐标运算 \r\n\r\n 12. 1. 4 定义均匀间隔曲线坐标值 \r\n\r\n 12. 2 构造曲面 \r\n\r\n 12. 2. 1 曲面定义和坐标计算 \r\n\r\n 12. 2. 2 定义均匀间隔的曲面坐标值 \r\n\r\n 12. 2. 3 NURBS曲面 \r\n\r\n 12. 2. 4 给NURBS曲面定义纹理 \r\n\r\n 12. 3 专业的曲面曲线造型 \r\n\r\n 12. 3. 1 创建一个插件 \r\n\r\n 12. 3. 2 读取曲面模型数据 \r\n\r\n 第13章 选择与反馈实现交互 \r\n\r\n 13. 1 选择模式 \r\n\r\n 13. 1. 1 选择的基本步骤 \r\n\r\n 13. 1. 2 建立名栈 \r\n\r\n 13. 1. 3 命中记录 \r\n\r\n 13. 1. 4 选择模式的例子 \r\n\r\n 13. 2 反馈模式 \r\n\r\n 13. 2. 1 反馈数组 \r\n\r\n 13. 2. 2 在反馈模式下利用标记 \r\n\r\n 13. 2. 3 反馈的简单应用 \r\n\r\n 13. 2. 4 反馈模式的完整示例 \r\n\r\n 13. 3 拾取 \r\n\r\n 第14章 维纳斯之舞 \r\n\r\n 14. 1 ASC文件格式说明 \r\n\r\n 14. 2 读取三维模型文件程序实例 \r\n\r\n 14. 2. 1 主程序代码 \r\n\r\n 14. 2. 2 库程序主控程序 \r\n\r\n 14. 2. 3 模型文件读取程序 \r\n\r\n 14. 2. 4 数值处理相关程序 \r\n\r\n 14. 2. 5 纹理映射相关程序 \r\n\r\n 14. 2. 6 程序运行结果 \r\n\r\n 第15章 蠕虫吃果游戏 \r\n\r\n 15. 1 程序界面设计 \r\n\r\n 15. 2 程序实现代码 \r\n\r\n 15. 2. 1 主程序代码 \r\n\r\n 15. 2. 2 绘制线程 \r\n\r\n \r\n
\r\n
1. Delphi与OpenGL程序设计
Delphi以其强大的界面编程能力吸引着众多的程序员, 其严谨而简洁的程序结构更使大批编程爱好者纷至杏来. 而OpenGL作为国际上通用的开放式三维图形标准, 同样令三维图形爱好者心驰神往. 然而长期以来, OpenGL似乎成为C语言程序员的专利. 一方面介绍OpenGL编程的书基本上都是以C语言为蓝本. 另一方面OPenGL编程的联机帮助系统也仅有C语言版本. 因此许多Delphi程序员只能对OpenGL编程望而却步. 尽管他们知道如果能将DelPhi强大的界面编程能力和简洁的程序结构与OpenGL绘制三维图形得天独厚的适应性相结合, 一定能快速地创作出理想的三维图形应用程序, 但苦于得不到有效的帮助而畏缩不前.
事实上, 由于OpenGL在Windows下是以动态链接库的方式提供的, 它的各种命令也均以库函数的形式出现, 而Delphi完全具备了利用动态链接库中库函数进行编程的能力, 因此利用DelPhi编写0penGL应用程序完全有可能.
当然使用Delphi编写OpenGL应用程序并非一帆风顺, 相信已经有许多人做了大量尝试, 并有了不少收获. 不过他们也一定饱尝了摸索前进的艰辛, 渴望身边能有一本可以指点迷津的参考书.
2. 本书内容
本书首先从一个简单的例子出发, 介绍如何设置Delphi的编程环境, 使之可以进行OpenGL编程, 从而使读者相信Delphi同样可以方便地进行OpenGL程序设计. 然后介绍利用OpenGL绘制具有色彩和光照效果的三维物体的基本方法. 接着说明如何将一些精细细节加入到三维场景中, 以增添场景的逼真度. 书中充分考虑了Delphi编程的鲜明特点, 并与OpenGL编程结构紧密结合, 努力提高应用程序的执行效率.
本书作者结合自己的实际开发经验以及使用时的大量心得, 通过丰富的教学实例, 系统地讲述了利用Delphi编写OpenGL三维图形程序的基本概念和方法. 全书共分15章, 第1章介绍OpenGL的基本概念. 基本操作及其处理流程, 并着重介绍了在Delphi中进行OpenGL编程的环境设置, 以及在Win32环境下OpenGL编程的基本结构和方法. 第2章介绍了如何构造基本图元, 例如构造各种不同属性的点. 线和多边形等. 第3章介绍了各种坐标变换的实现, 这些变换包括视图变换. 造型变换. 透视投影和平行投影变换以及视口变换等. 第4章介绍计算机颜色以及OpenGL中提供的两种颜色模式的基本概念和用法. 第5章讲解OpenGL光照的基本过程及如何建立光源. 选择光照模型和定义材质性质等, 并给出光照的数学依据. 有了光照的物体和场景才能真正呈现出三维效果来. 第6章给出一个用OpenGL制作的模型编辑器, 该程序综合利用了前面各章的知识, 并充分体现了OpenGL程序 与Delphi界面编程能力的完美结合. 第7章讨论在三维图形场景中如何处理位图和图像.
位图通常用于描述字体中的字符. 第8章说明如何将一维和二维纹理映射到三维物体上.
纹理映射可以取得很好的效果. 第9章介绍显示列表的设计原理, 以及建立. 执行和管理显示列表的方法. 利用显示列表可以提高OpenGL程序的性能. 第10章描述产生真实感场景的基本技术——颜色融合(生成透明效果). 反走样和大气效应(如烟雾等). 第11章描述在OpenGL中可能存在的各种缓存, 介绍它们的用法, 例如隐藏面消除. 模板屏蔽. 运动模糊和景深效果等. 第12章介绍高效生成曲线或曲面的高级技术. 第13章说明如何利用 OpenGL的选择机制来选取屏幕上的物体. 第14章给出了一个读取ASC格式的三维模型数据的程序. 第15章给出一个蠕虫吃果的游戏. 程序演示了前面几章的基础知识, 例如光照和坐标变换以及颜色融合和阴影等, 同时程序中还利用了多线程技术用于度量帧速率.
OpenGL编程已经广泛应用于科学计算可视化. 实体造型. CAD/CAM. 仿真. 图像处理. 地理信息系统. 虚拟现实等领域. 读者在学习完本书之后, 一定能结合所学知识在这些领域中一展所长. 即使读者的应用程序不涉及上述领域, 在应用程序中加入用OpenGL绘制的三维图形, 也能够为程序增辉, 使程序更富表现力.
本书适合Delphi中. 高级程序员阅读, 这里假设读者已经具备一定的图形学基础知识.
不过即使没有图形学知识, 根据本书内容循序渐进地学习, 也不会遇到太多困难. 无论是对大专院校的学生, 还是科研院所的研究人员, 本书都是一本难得的三维图形技术指导和参考书. 此外, 本书也适合作为OpenGL三维图形编程的培训教程.
3. 配套光盘使用说明
本书所有源代码均在Delphi 5. o版本下编译通过.
使用该光盘时请注意:首先将CGLib目录里的内容拷贝到DeLphi的Lib的目录下, 然后在硬盘上创建一个目录存放这里的所有例子程序. 所有程序均已按在所属章节中的出现顺序编号, 例如第3章第2个例子的目录名为“Exam0302”, 依此类推. 由于本书中的很多例子使用了glut库的一些功能, 所以读者还有必要将GlutDLL目录下的glut32. dll文件拷贝到Windows的System目录下, 或者应用程序的其他搜索路径上.
除了每个目录都有必要的源程序代码外, 大多数目录下还有一个TXT文本说明文件, 用来简要描述该程序的大体功能等. 目录没有程序说明文件, 说明该程序比较简单, 未做过多解释.
注意:如果你使用的不是Microsoft自带的OpenGL库, 请参照CGLib目录下的glunits. txt文件中的说明进行设置.
作 者