首页>参考读物>计算机科学与技术>数码/设计

OpenGL游戏编程
作者 : 徐明亮 卢红星 王琬
出版日期 : 2007-01-06
ISBN : 7-111-22670-3
定价 : 55.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 392
开本 : 16开
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

3D游戏是当前游戏的主流,对于初学者来说,其核心技术就是3D图形编程。长久以来,OpenGL都是3D游戏开发领域的主流开发包之一,也是开发者追逐顶尖技术的利器。
  与DirectX相比,OpenGL语言简单易懂,前后版本的兼容性也比较好,对于希望进入游戏开发、3D图形处理、模拟仿真、虚拟现实等领域的初学者来说,学习OpenGL是他们最好的起点。基于此,本书将在游戏开发的背景下,舍弃OpenGL中与游戏开发关联不大的琐碎知识细节,引导读者快速掌握游戏开发中所必须掌握的最重要、最实用的概念、原理和编程技巧,事半功倍地进入游戏开发领域。

本书特色
  ●参阅了国内外大量最新的图形开发和游戏编程方面的资料,所讲解的内容都依据图形开发领域的成熟方法和技术。
  ●所有的例子都共用一个在实际项目中经过严格测试的方便、稳定、实用的程序框架,该框架提供两个版本:面向过程的传统Win32 API风格和更方便实用的面向对象风格,读者只要具有C/C++和图形学基本知识就可以看懂。
  ●全书代码保持一种良好的编码风格,提供清晰的注释和规范的UML设计。
  ●所有实例都力求实用、新颖、有趣,并取材于实际项目,具有极高的可复用价值,完全能在实际项目中“即插即用”。
  ●涵盖游戏开发、仿真系统、多媒体应用等主要图形应用领域。
  ●实例中深度剖析一些目前市面图书中所从未涉及的实用技术细节。

图书特色

图书前言

1958年世界上第一款电脑游戏Tennis For Two诞生了。虽然今天看来,在当时极其简陋的计算机上所开发出的这个游戏实在是乏善可陈,但它却为人类开创了一种全新的娱乐方式,并激发了人们创造游戏的热情和对游戏开发技术探索的好奇心。
  今天,游戏已经发展成为一个庞大的产业,其产值已在全球范围内超过影视等传统娱乐产业,并且未来还将持久快速增长。于是有越来越多的人渴望加入到这一行业来,然而,现在一款商业游戏的开发,需要涉及策划、监制、美工、程序、测试、维护、运营和市场推广等诸多方面,已经不是一两个人能完成的了。
  但也不要沮丧,如果您有一点C++编程的基础,并有足够的兴趣想编写一个属于自己的小游戏,或有志于以后成为一个专业的游戏开发程序员,那么本书将耐心的引导您学会游戏编
  程—只要您认真按照本书循序渐进地学习和实践!
  3D游戏是当前游戏的主流,对初学者来说,其核心技术就是3D图形编程。因此,对3D图形学原理的讲解以及如何运用该原理熟练使用一个3D图形开发包就成为本书要讲解的重点,在本书中我们将选择OpenGL开发包作为初始学习3D图形编程的工具。
  OpenGL的英文全称是“Open Graphics Library”,即“开放的图形程序接口”,它于1992年由SGI公司开发,并得到广大硬件和软件厂商的支持和参与,从而成为占据主导地位的跨平台专业3D图形应用开发包,也是该领域的工业标准。长久以来,OpenGL都是游戏开发领域的主流开发包,而且由id公司开发的世界上最早的3D游戏和3D游戏引擎都是基于OpenGL实现的。即便现在微软的DirectX也是PC平台上的主要游戏开发包,但是OpenGL仍是开发者追逐顶尖技术所必需掌握的开发包。
  与DirectX相比,OpenGL语言简单易懂,前后版本的兼容性也比较好,而且OpenGL的学习门槛相对于DirectX要低很多。读者无须了解复杂的COM机制和熟练的C++技巧,只需稍微了解C语言就可学习它。对于希望进入游戏开发、3D图形处理、模拟仿真、虚拟现实等领域的初学者来说,学习OpenGL是他们最好的起点。基于此,本书将在游戏开发的背景下,舍弃OpenGL中与游戏开发关联不大的琐碎知识细节,引导读者快速掌握游戏开发中所必须掌握的最重要、最实用的概念、原理和编程技巧,事半功倍的进入游戏开发领域。需要说明的是,考虑到本书主要针对初学游戏编程的读者,或是对游戏开发有兴趣的业余爱好者,因此我们没有准备引入比较专业的GPU编程技术,这将是您掌握完本书内容后应该学习的内容。
  虽然本书的重点是讲解游戏开发中如何使用OpenGL接口进行3D图形处理,但游戏开发涉及的技术内容非常广阔,单单学习OpenGL的图形处理部分还不能开发一个完整的游戏,所以本书也在后续章节适当地介绍了DirectX的Direct Sound/Direct Music(合称Direct Audio)和Direct Input组件,用以处理游戏中的音频和输入设备控制。除此之外,本书还使用OpenGL接口模拟了游戏世界里的物理规律。当然由于篇幅所限,本书未能深入讲解个别方面,比如游戏人工智能,它是创造更有趣游戏的关键技术,希望以后有机会再对这些知识进行介绍。
  通过本书,读者不但可以学习到OpenGLd在游戏开发中最重要最实用的知识和技能,还可学习到游戏开发中所涉及到的其他重要技术,最终会使读者对游戏开发过程有一个全面的认识,并掌握如何使用OpenGL与这些技术模块集成和交互。
本书参阅了国内外大量最新的图形开发和游戏编程方面的资料,所讲解的内容都依据图形开发领域最新的成熟方法和技术。本书尽量做到对原理、概念的讲解清晰透彻,言简意赅,提供了丰富、新颖、原创、实用的大量实例。书中的代码好多都来源于作者所参与的一些实际项目,并在各种开发环境下经过严格测试,完全能直接应用到实际的工作项目中去。在编写过程中,我们力图精益求精,但由于能力有限,书中难免存在不足之处,恳请广大读者批评指正。如有任何问题或意见,请发E-mail到develop_game@yahoo,com.cn与我联系。
  本书得以完成,更多的是这些人的工作:
  感谢陈冀康编辑和吴怡编辑,他们对本书倾注了大量的心血,给了我巨大的帮助和指导;感谢我的好搭档王琬,没有他难以想象这本书将要拖到什么时候才能完成;感谢卢红星老师,他引导我进入游戏开发这一有趣的领域;感谢我的导师叶阳东教授,他给了我自由的空间和悉心的指导;感谢浙江大学CAD&CG国家重点实验室的潘志庚教授,他对本书提出了许多有益的指导意见,并在百忙中抽出时间作序;感谢我的妻子徐静,她每天都能给我许多灵感、鼓励和帮助;感谢我的朋友崔广伟和吴承浩,他们帮我解决了许多棘手的技术问题。
  希望本书能帮助您进入游戏开发的殿堂。

  徐明亮
  2007年9月

封底文字

3D游戏是当前游戏的主流,对于初学者来说,其核心技术就是3D图形编程。长久以来,OpenGL都是3D游戏开发领域的主流开发包之一,也是开发者追逐顶尖技术的利器。 与DirectX相比,OpenGL语言简单易懂,前后版本的兼容性也比较好,对于希望进入游戏开发、3D图形处理、模拟仿真、虚拟现实等领域的初学者来说,学习OpenGL是他们最好的起点。基于此,本书将在游戏开发的背景下,舍弃OpenGL中与游戏开发关联不大的琐碎知识细节,引导读者快速掌握游戏开发中所必须掌握的最重要、最实用的概念、原理和编程技巧,事半功倍地进入游戏开发领域。 本书特色 ●参阅了国内外大量最新的图形开发和游戏编程方面的资料,所讲解的内容都依据图形开发领域的成熟方法和技术。 ●所有的例子都共用一个在实际项目中经过严格测试的方便、稳定、实用的程序框架,该框架提供两个版本:面向过程的传统Win32 API风格和更方便实用的面向对象风格,读者只要具有C/C++和图形学基本知识就可以看懂。 ●全书代码保持一种良好的编码风格,提供清晰的注释和规范的UML设计。 ●所有实例都力求实用、新颖、有趣,并取材于实际项目,具有极高的可复用价值,完全能在实际项目中“即插即用”。 ●涵盖游戏开发、仿真系统、多媒体应用等主要图形应用领域。 ●实例中深度剖析一些目前市面图书中所从未涉及的实用技术细节。

图书序言

夯实图形编程基础,掌握游戏设计技巧
  应忘年交朋友徐明亮的邀请,希望为本书写一个序言。从小时候记事时起,记得书的序言通常是由一些学术泰斗、著名专家、社会名流或政界要人来写的,而自己也只是一般的大学研究人员,所以应下这个任务颇有点惶惶然,也一直不敢动笔。
  想到作者是一后起之秀,对计算机图形学和三维游戏情有独钟,有多年的实战经验,对OpenGL/DirectX均有很深的理解,他愿意花时间把这些经验写出来,和大家分享是一件好事情。作为师长的我,这一点忙还是应该帮的。又想到书稿马上付印,作者又多次请求,便在酝酿了多日后,仓促成文。
  从1986年开始接触图形学,转眼已经过去了20多年。图形学技术本身也发生了很大的变化,可以用下面的两句话来概括图形学的发展:
  绘点绘线绘面绘体,描绘五彩世界
  求好求快求新求美,追求永无止境
  而图形学的应用也是无所不在,特别是2000年后兴起的数字娱乐(游戏)业,对产业和社会产生了巨大的影响。而游戏设计的一个重要基础,就是图形编程。我之前给全国第一届教育游戏和虚拟现实会议(2007年8月大连)写了如下的对联:
  教育游戏,教娱相辅寓教于乐
  虚拟现实,虚实结合视虚为实
  这里,我要表达一个愿望:寓教于乐,而不鼓励去开发为娱乐而娱乐的游戏。 另外,我写的一个与数字娱乐有关的对联是:
  图形图像声音动画,学术先行
  艺术媒体娱乐游戏,生活至上
  再下面,是我给本书读者的祝福:
  勤勤恳恳,夯实图形编程基础
  兢兢业业,掌握游戏设计技巧
  这是我第一次为正式出版的书写序言,虽然以前在为我的导师编辑出版《计算机图形学研究—石教英教授论文选集》时,写过后记,也算有一定的基础。但仓促完成的文字,肯定有不少问题,请作者和读者海涵。
  希望有一些读者是因为看了我写的序言,而购买这本书,从此进入图形编程专业和蓬勃发展的游戏行业。如果真能这样,我会感到很欣慰,因为这是一个皆大欢喜(现在流行叫“多赢”)的事情:读者学到了知识和技能;作者的著作得到了社会的认可;出版社扩大了市场;而我希望自己通过这次锻炼,为后面再写类似的材料积累一些经验。

  潘志庚
  浙江大学CAD&CG国家重点实验室研究员
  中国图像图形学会虚拟现实专业委员会 主任
  中国系统仿真学会数字娱乐专业委员会 副主任

作者简介

徐明亮 卢红星 王琬:徐明亮: 徐明亮,郑州大学硕士研究生毕业,曾在大学生挑战杯科技竞赛中以“3D MMO网络游戏通用引擎”项目获奖。读研期间,研究方向为游戏引擎与游戏人工智能,先后参与了游戏AI引擎、山盟网络休闲游戏平台、3D虚拟酒吧、专业围棋网络对弈平台等项目的研发工作,并在相关会议和期刊上发表多篇有关游戏引擎的论文。

图书目录

目   录

前言
作者简介

第1章  游戏开发快速入门 1
1.1  游戏软件开发概述 1
1.1.1  游戏软件开发流程 1
1.1.2  游戏软件的构成 2
1.1.3  游戏软件的运行原理 3
1.2  OpenGL与DirectX简介 3
1.2.1  OpenGL基础知识 4
1.2.2  DirectX基础知识 5
1.3  3D图形学快速入门 7
1.3.1  点和向量 7
1.3.2  坐标系与矩阵 11
1.3.3  3D图形处理流程 14
1.3.4  坐标变换 14
第2章  OpenGL程序框架 23
2.1  窗口渲染环境 23
2.1.1  GDI设备环境 23
2.1.2  OpenGL渲染环境 27
2.2  创建Win32 SDK风格的窗口 31
2.3  面向对象风格的窗口框架 47
2.3.1  窗口类GLWindow的设计及实现 49
2.3.2  键盘类Keys的设计与实现 56
2.3.3  应用程序类GLApplication
的设计与实现 57
2.3.4  一个简单的实例 67
第3章  OpenGL变换 71
3.1  OpenGL的数据类型 71
3.2  函数命名的语法 71
3.3  OpenGL是种状态机 72
3.4  OpenGL变换 72
3.4.1  视点变换 73
3.4.2  模型变换 74
3.4.3  投影变换 74
3.4.4  视口变换 76
3.4.5  裁剪变换 76
3.4.6  矩阵堆栈 77
3.5  OpenGL变换实例 77
第4章  OpenGL光照、材质和纹理 87
4.1  真实感图形基本概念 87
4.2  OpenGL光照模型 87
4.2.1  法线向量 88
4.2.2  创建光源 89
4.2.3  选择光照模型 91
4.2.4  光照实例 91
4.3  材质 99
4.3.1  材质RGB值与光源RGB值的关系 99
4.3.2  材质的定义 99
4.3.3  颜色材质模式 100
4.3.4  材质实例 101
4.4  纹理映射 105
4.4.1  纹理资源的载入 105
4.4.2  OpenGL纹理映射 110
4.4.3  OpenGL多重纹理 116
第5章  OpenGL字体 121
5.1  位图字体 121
5.1.1  位图字体类 121
5.1.2  具体实现 122
5.1.3  实例 125
5.2  显示中文 126
5.2.1  字体类 127
5.2.2  具体实现 128
5.2.3  实例 132
第6章  摄像漫游 133
6.1  漫游原理 133
6.2  准备工作 134
6.3  摄像机类 135
6.4  摄像漫游实例 142
第7章  构造天空和地形 151
7.1  天空构造 151
7.1.1  天空盒原理 151
7.1.2 天空类实现 152
7.2  地形 157
7.2.1  地形构造原理 157
7.2.2  地形类实现 158
7.3  实例 170
第8章  模型载入 176
8.1  3DS文件载入 176
8.1.1  3DS文件简介 176
8.1.2  准备工作 176
8.1.3  载入类定义 178
8.1.4  3DS文件载入实例 191
8.2  MD2文件载入 192
8.2.1  MD2文件简介 192
8.2.2  准备工作 193
8.2.3  MD2文件载入类 197
8.2.4  MD2文件载入实例 211
第9章  实时阴影 215
9.1  简介 215
9.2  实时阴影 215
9.2.1  平面投射 215
9.2.2  阴影体 216
9.3  平面投射实例 217
9.4  阴影体实例 226
第10章  DirectInput的使用 237
10.1  DirectInput简介 237
10.2  DirectInput的使用 239
10.2.1  安装和配置DirectX9.0 239
10.2.2  创建DirectInput接口对象 240
10.2.3  创建设备对象 241
10.2.4  设置设备的数据格式 242
10.2.5  设置设备的协作层次 243
10.2.6  设置设备的属性 243
10.2.7  设备的捕获 244
10.2.8  设备输入的获取 244
10.2.9  关闭 245
10.3  建立输入系统 245
10.3.1  键盘类CKeyboard 245
10.3.2  鼠标类CMouse 248
10.3.3  游戏杆类CJoystick 252
10.3.4  输入系统类CInputSystem 254
10.4  DirectInput应用实例 257
10.4.1  键盘实例 257
10.4.2  鼠标实例 257
第11章  DirectSound的使用 259
11.1  声音的基础知识 259
11.2  DirectSound介绍 260
11.3  DirectSound的使用 262
11.3.1  创建DirectSound对象 262
11.3.2  设置设备的协作级别 262
11.3.3  创建主缓冲区 263
11.3.4  创建辅助缓冲区 264
11.3.5  加载声音数据 266
11.3.6  声音的播放与控制 268
11.4  3D音效 269
11.4.1  3D空间与缓冲区 269
11.4.2  最大最小距离 269
11.4.3  处理模式 270
11.4.4  声音圆锥 270
11.4.5  声源的创建 271
11.4.6  听者对象的创建 271
11.5  封装音频处理模块 272
11.6  音频实例 274
第12章  游戏中的物理模拟 276
12.1  物理学基础知识 276
12.1.1  基本概念 276
12.1.2  牛顿运动定律 277
12.1.3  冲量、动量 278
12.2  物理规律的模拟 279
12.2.1  匀速运动模拟 279
12.2.2  平抛运动模拟 280
12.2.3  摩擦力模拟 282
12.3  碰撞检测 282
12.3.1  碰撞检测概述 282
12.3.2  碰撞检测 283
12.3.3  碰撞检测实例 283
第13章  粒子系统 293
13.1  粒子系统简介 293
13.1.1  概述 293
13.1.2  分类 293
13.1.3  粒子系统的生命周期 293
13.2  粒子系统设计 294
13.2.1  形式描述 294
13.2.2  数据结构 295
13.3  粒子系统的实现 295
13.4  粒子系统实例1—雪花 298
13.5  粒子系统实例2—喷泉 304
第14章  构造游戏引擎 311
14.1  游戏引擎简介 311
14.2  游戏引擎的体系结构 312
14.3  基础公用模块 313
14.3.1  基础结构和操作 313
14.3.2  数学运算模块 315
14.3.3  计时器CTimer类 317
14.3.4  字体类 317
14.3.5  摄像机类 318
14.3.6  INI文件读取类 319
14.4  窗口引擎模块 320
14.5  输入系统模块 324
14.5.1  输入法IME编程 324
14.5.2  输入系统类 326
14.6  场景管理模块 327
14.6.1  对象管理模块 327
14.6.2  游戏场景模块 335
14.6.3  场景管理模块 337
14.7  资源管理模块 337
14.8  GUI界面设计模块 340
14.8.1  GUI模块构架 342
14.8.2  按钮类CButton 344
14.8.3  复选框类CCheckBox 345
14.8.4  文本编辑类Edit 345
14.8.5  对话框类Dialog 347
14.8.6  滚动条类CScrollBar 347
14.8.7  列表框类ListView 348
14.8.8  进度条类CProgressBar 349
14.8.9  小地图类MapView 350
14.9  消息系统模块 351
14.10  音频系统模块 354
14.11  粒子特效模块 356
第15章  3D RPG游戏 359
15.1  游戏简介 359
15.2  角色设计 359
15.3  加入怪物 362
15.4  游戏场景 365
15.5  光标动画 367
15.6  游戏界面 369
15.7  运行界面 377
第16章  Quake室内场景实例 379
16.1  BSP技术 379
16.1.1  为什么要使用BSP 379
16.1.2  BSP原理 380
16.1.3  渲染BSP 380
16.2  隐藏面剔除 381
16.3 Quake室内场景绘制 381
16.3.1  Quake3 BSP文件格式 381
16.3.2  Quake3 BSP文件的载入 384
16.3.3  运行结果 385
第17章  指环王动画特效 386
17.1  实例介绍 386
17.2  关键技术 386
17.2.1  ASE模型读取 386
17.2.2  火焰的绘制 388
17.2.3  场景的绘制 389

教学资源推荐
作者: 姚敏 等编著
作者: 朱洁 等编著
作者: 陈传波 金先级 编著
作者: (加)Ze-Nian Li,Mark S.Drew
参考读物推荐
作者: [美] 罗谢尔·肯(Rochelle King) 伊丽莎白 F.邱吉尔(Elizabeth F.Churchill)凯特琳·谭(Caitlin Tan) 著
作者: 罗庚 王红蕾 谷鹏 等编著
作者: Alexis D.Gutzman