附录A 进阶游戏编程书籍总结与推荐

章节导读
很多游戏编程书籍都有一个通病, 一本书写完,读者看完之后,不知道下一步该如何前进。这里的附录就是让大家看完这本书后,知道自己接下来可以学习什么,如何进一步提升自己。为学习思路不清晰不科学的读者们指明一条康庄大道。
所谓师傅领进门,修行在个人。读完这本书,以后的游戏开发之梦, 就要靠接下来给大家推荐的这些书籍和源代码为精神寄托了。
想想看,如果从翻开这本书的第一页的那一刻开始算起,我们已经从对Windows下的编程一无所知,到目前可以熟练地C++&DirectX 代码随心所欲地构造出属于自己的三维游戏世界,这是一个质的飞跃。
然而, 游戏编程的大门才刚刚为我们打开而已。想要创造出更加精美绝伦的游戏,还需要更多更优秀的书籍和代码来指引。
这个附录中的内容, 就是在为了给大家指明以后的游戏编程道路中,哪个方面有哪些书具有参考和阅读的价值。

因为列举和介绍的广泛, 每本都去自己专研是不太现实的事情,毕竟我们的精力有限。大型三维游戏的编写往往是一个团队花费数年时间才能完成的,团队中的一份子只在某特定领域有所造诣,做好自己分内的事情即可。所以,在3D 游戏编程领域入门之后,最好找到自己喜欢的一个具体方向去精研,去选择性地阅读与摄取知识。

A.1 零基础游戏编程学习大体阶段概括

第一阶段, C++ 的入门
C++ 的入门学习首推《C++ Primer》。这本C++的经典之作完全可以让你从对编程语言一无所 知的编程小白,成长为略微了解

C++的老手。
想要走最短最有成效的学习路线,在这一阶段中了解基本的C++语法特性其实就够用了,并不用去纠结更深层次的知识,如模板、泛型、STL。这些更深一层的内容在游戏编程学习初期基本上涉及不到,在以后学游戏编程的过程中用到的时候,再翻翻书去现学现用,会更加事半功倍。
如果你真是精力旺盛,看《C++ Primer》一本学C++还满足不了你, 《Effectrive C++》《More Effecitve C++》 

《Effective STL》 《C++沉思录》等等一大堆C++著作一定可以填饱你的肚子。
对于第一阶段,总结起来就是C++编程语言的学习。说浅它很浅, 一本《C++ Primer》或者大学的C++教程足矣(作者当年就是一本《C++程序设计教程》入的门) ; 说深它很深, C/C++是计算机高级编程语言的泰斗,讲解C++编程语言高级特性的专著数不胜数。总之,想要走最短最有成效的学习路线,在这一阶段中了解基本的C++语法特性其实就够用了,并不用去纠结更深层次的知识,如模板、泛型、STL。
第二阶段, 熟悉windows 下的编程。
第三阶段, Visual C++ 的学习
看完本书前面的内容,第二阶段和第三阶段基本上算是可以过关了。所以在这里我们把重点放在百花齐放的第四阶段。

第四阶段, 图形API与游戏引擎的学习
走到这一阶段, 算是正式开始了游戏编程的学习。从这一阶段开始, 深入一点的游戏编程书籍基本上都是英文的了。
很多学习游戏编程的朋友都应该有这样一个印象,国内很少能有一本有足够分量和水准的游戏编程书籍面世,而在国外,出版的游戏编程书籍却常常都能成为高水准的经典之作。而出版时间方面, 讲述新技术的游戏编程书籍往往在国外面世两年甚至三年之后,才可能会有中文版面世。因为国内写不出这样水平的著作来,所以需要从国外的出版社引进。而引进方面需要国内出版社与国外出版社之间的协商,需要一定的时间,而翻译成中文往往得花费一年甚至更久的时间。
比如,我们就拿学习DirectX 必读的经典,我们俗称“红龙书”的《Introduction to 3D Game Programming with DirectX9.0》来看,这本书的中文译版为《DirectX 9.0 3D游戏开发编程基础》。这本DirectX 的经典之作《Introduction to 3D Game Programming with   DirectX 9.0》出版时间为2003 年6 月,而译文《DirectX 9.0 3D游戏开发编程基础》的出版时间为2007 年4 月, 中间的跨度为3年10个月,而且,后来《Introduction to 3D Game Programming with DirectX 9.0》出了第二
版,基本上进行了完全的重写,主要是在讲可编程渲染线编程,而不是第一版中的固定功能渲染流水线编程。

而只有像“红龙书”这样经典的书籍才有机会引进并翻译成中文, 一般的游戏编程书籍由于专业性很明显(比如专门讨论3D 地形编程的书),在国内受众很少,引进了不能保证销量,所以很少被引进。
以上的这些无非是想向大家说明,游戏编程后面的学习,常常需要阅读原版的英文书籍( 一般SDK 文档, Samples 自然也是英语) 。其实,阅读原版的英文书籍对英语水平的要求没有想象中的那么高,书中并不会故意去用一些晦涩的单词,一般有大学英语四级的水平,就可以畅读原版游戏编程书籍和SDK 文档了。
开始学习专门介绍游戏开发的教程〈有DirectX 和OpenGL 两条路可选,这里我们选择DirectX,DirectX 在国内为主流。推荐书籍为《DirectX 9.0 3D游戏开发编程基础》, 《Windows 游戏编程大师技巧》、《DirectX 游戏开发终极指南》等等。下面我们会详细探讨。

另外需要注意的是,下面我们介绍的书籍和开源代码(3D 引擎、动画实现)都是针对引擎程序员的底层技术和引擎开发方向的。而对于游戏性程序员需要修习的主技能并非如此,游戏性程序员应该把功夫花在对某种引擎的炉火纯青的使用之上,再根据自身发展方向修习其他技艺(可偏美术和设计),如3D 建模( Technical Art 方向) 。

A.2 Windows 游戏编程入门书籍推荐

学习Windows 游戏编程不得不提的是一代游戏编程大师André LaMothe 的鸿篇巨著一一 《Windows 游戏编程大师技巧》

《3D 游戏编程大师技巧》两部曲。
值得一提的是《Windows 游戏编程大师技巧》的主题是关于Windows 2D 游戏编程的基础。它的内容过于陈旧,不建议使用这本书学习游戏编程。书中作为重点讲解的DirectDraw 在十年前发行的DirectX 8 中就已经被抛弃了。现在看这本书的话,主要是看其中的编程思想。
然后是《3D 游戏编程大师技巧》,这本书可谓是理解3D 游戏程序的内部原理最经典的著作,每个对3D 程序有兴趣的朋友都应该读一下。书中的内容基本上是把目前流行的图形API 都实现了一次,而且解释得非常详细,十分值得一读。读完后,你会更加理解图形渲染管线的内部实现方式。

A.3 游戏编程进阶书籍推荐

A.3.1 DirectX 入门

1. “红龙书” 第一版和第二版
学习DirectX , 首推“红龙书”的第一版和第二版。第一版上面我们提到过,就是《Introduction  to 3D Game Programming with DirectX 9.0 》, 有中文版《DirectX 9.0 3D游戏开发编程基础》,主 要是讲解固定功能渲染流水线;

“ 红龙书” 第一版中讲解的内容基本上在我们这本书中都做了更有条理更符合我们习惯的演绎,所以在读完本书之后,承接读下去的最好选择是更偏向于可编程渲染流水线介绍的“ 红龙书”的第二版

《Introduction to 3D Game Programming with DirectX 9.0c A Shader Approach>。
另外, 红龙书的作者Frank Luna 在2012 年出版了红龙书的DirectX 11 版本一一《Introduction to 3D Game Programming with DirectX 11 > , DirectX 11 有点像Windows 8 , 都是叫好不叫座, 短时间还不能普及,目前依旧是Direct 9.0c 的天下。
2. 《DirectX 游戏开发终极指南》
这本书的英文原版名为《Ultimate Game Programming With DirectX》, 教你如何用DirectX 9写出一个简单的第一人称射击游戏,还算是不错的DirectX 入门书籍, 书本的配套代码有一定的借鉴意义。
专门介绍DirectX 的书籍其实是比较多的, 而且其实内容都大同小异,我们更多的是去看看它们的配套源代码。学完本书, 接下来去看“红龙书”的第二版《Introduction to 3D Game Programming with DirectX9.0c A Shader Approach 》, 去了解可编程渲染流水线, 是最好的选择。同样的, 接下来,我们介绍一下学完DirectX 基础知识后一些进阶的书籍。

A.3.2 地形方面

1. 《Focus On 3D Terrain Programming》
这本书算是3D 场景的必备基础书, 主要是讲解外部场景如山水、风景的实现方法。这本书中讲解很多流行的算法,从最简单的、到优化过的都有对比和demo 。
不过由于有一定的年代,现在比较流行的一些技术,如clipmap 没有介绍到。
2. 《Real Time 3D Terrain Engines Using C++ And DX9》
这是一本理论优秀,实践欠缺的地形书籍。非常全面地时论了关于地形渲染的各种技术, 至少应该把第5~9 章都浏览一遍。之后便可以到virtual terrain 查阅近期的地形渲染技术。
3. 《Level of Detail for 3D Graphics》
LOD 技术即Levels of Detail 的简称, 意为多细节层次。LOD 方面,阅读这本《Level of Detail for 3D Graphics》就够了。

A.3.3 物理方面

《Game Physics 》《游戏开发物理学( Physics for Game Developers )》以及《Game Physics Engine Development》都不错。
1.
2. 《游戏开发物理学 (Physics for Game Developers) 》
3. 《Game Physics Engine Development》
这本书最好随时结合代码一起看, 因为书上的跳跃性有点大。
4. 《实时碰撞检测算法技术(Real-time Collision Detection)》
《Real-time Collision Detection》算是碰撞检测方面最好的书, 国内引进了中文版《实时碰撞检测算法技术》。
另外,《3D Game Engine Design, 2nd 》的8 、9 章也值得一看, 除此之外,就是各种开源碰撞引擎,比如Bullet 。

A.3.4 数学方面

《3D 游戏与计算机图形学中的数学方法》,介绍了游戏数学的各个方面, 游戏编程数学方面,这本书足矣。

A.3.5 引擎设计方面

1. 《Game Engine Architecture》
这本书算是游戏引擎方面最好的一本了, 它非常清楚和详细讲解了游戏引擎的架构, 而且包含大量丰富的细节,仔细读的话很有收获。亮点有三:
  •  讲解现代游戏引擎架构, 非常新的实例, 包括作者自己公司的引擎, 和商业引擎例,如Unreal 的实例。
  •  清楚的讲解实现细节,代码少而思想多, 往往一段话就可以让你了解某个部分的实现。
  •  在调试和性能测量引擎方面有很好的描述。
2. <3D Game Engine Programming>
这本书讲了游戏引擎的一个大概, 最重要的是提出了引擎平台无关性, 是游戏引擎的入门读物,但总的来说, 讲得比较浅。不能独当一面。
3. 《Pro OGRE 3D Programming》
这本书虽然只有200 多页,但是短小精悍, 可以让读者快速了解一个既有引擎的设计和构架。在这本书里面不仅仅是几个图形学的知识,更多的时候渗透着的软件工程的思想。
4. 《3D Game Engine Design》
这本书有一千多页, 讲解了游戏引擎设计的方方面面,是《3D Game Engine Architecture Engineering》更新版, 强烈推荐阅读。

A.3.6 实时渲染方面

《Real-Time Rendering 》, 没得说,就推荐这本拓宽实时渲染技术视野的好书,它对于实时渲染相关的各种技术都有涉及。不过想要读懂和啃透它,需要一定的功力。

A.3.7 图形学方面

以上对3D 计算机图形学的了解都是实践性的,要真正在3D 计算机图形学里游刃有余,则需要深厚的理论做基石。
1. 《3D 计算机图形学》
纯理论的教科书读本《3D 计算机图形学》,经典之作。
2. 《3D Graphics for Game Programming》
比较新的一本书,个人觉得是不错的游戏图形学入门书籍。
3. 《计算机图形学几何工具算法详解》
这本书介绍算法很多,但是错误也不少。
4. 《3D 数学基础:图形与游戏开发(3D Math Primer for Graphics and Game Development)》
这本书浅显易懂, 有中文引进版, 可作为三维数学的“速食”。
5. 《Mathematics for 3D Game Programming&ComputerGraphics》
这本书目前出到第三版了,比《3D Math Primer for Graphics and Game Development》深入一些,证明推理的数学气也浓一些,可作为专业的数学书与编程实践一个过渡的桥梁。内容涉猎也广,射线追踪,光照计算,可视裁剪,碰撞检测,多边形技术,阴影算法, 刚体物理,流体水波,数值方法,曲线曲面, 还真够丰富的。

A.3.8 Al 方面

1. 《游戏人工智能编程案例精粹》
英文原版为《Programming Game AI by Example》,非常不错的一本书,程序示例很丰富。
2. 《游戏开发中的人工智能》
这本书适合科普,对AI 感兴趣的初学者看看会很受益。总的来说内容简介却也丰富, 而且比较有意思。

3. 《Al 游戏引擎程序设计》
这本书英文原版为《AI Game Engine Programming》。虽然说这是一本名不副实的书,并没有完全介绍一个“one for all ”类型的引擎,也没有具体算法讨论,但针对各种不同类型游戏的AI 设计做了详细介绍,可作为一本参考指导性书选择阅读。

A.3.9 网络方面

1. 《网络游戏服务器端编程》
这本书涵盖了网络游戏服务器端编程的基本知识,从网络连接的基本知识开始,到具体的网络游戏服务器端设计与实现,算是网络游戏服务器端编程方面的一本不错的工具书。
2. 《网络游戏客户端编程》
与上面提到的《网络游戏服务器端编程》相辅相成的,自然还有一本讲客户端的《网络游戏客户端编程》。
3. 《网络游戏开发》
英文原版名称为《Developing Online Games:An Insider’s Guide 》, 就像名为反模式的书讲软件团队运营一样,这本书讲网络游戏的商业运作。这本书汇集了许多大型网络游戏开发的优秀经验,值得一读。
4. 《网络游戏编程教程》
个人认为讲得比较杂,也算是可以作为可用的学习参考资料。

A.3.10 系列书籍方面

1. 《游戏编程精粹》系列
游戏编程杂文集《Game Programming Gems》 (游戏编程精粹)系列, 现在出到8 本了。
这个系列的书有一定高度,由于内容涉及得过于广泛,而且比较深入难懂,文章质量参差不齐也不乏错误,选择性阅读就可以了。
2 . 《GPU 精粹》系列
《GPU 精粹》(《GPU Gems》)系列可谓是游戏图形学的圣经, 可惜的是自出了这第三卷以来, NVIDIA再没继续出了。它针对shader 和GPU 的内容比较多,建议喜欢华丽效果或者对于CPU负荷太重的问题,应该可以从这本书得到一些启发。值得一提的是,这套丛书现在可以从NVIDIA 的网站上直接看到在线版。
3. 《ShaderX》系列
高阶图形渲染系列书籍,约定是每年出版一本,在2013 年6 月份己经出了6 本,非常具有阅读和参考价值。

4. 《Game Engine Gems 》系列
这是关于引擎设计的新系列丛书, 约定是每年出一本, 在2013 年6 月份已经出版了两册。
5. 《Al Programming Wisdom 》系列
游戏Al 编程方面的系列书籍, 在2013 年6 月份已经出了4 本。

A.3.11 策划方面

1. 《Creating Emotion in Games:The Craft and Art of Emotioneering》
在壮丽煌目的宏伟三维世界背后,在残酷的杀戮, 动人心魄的情节背后, 我们还需要什么来抓住玩家的心? 答对了, 就是情感( emotion ) 。真正打动人心的, 才是令人印象深刻的游戏作品。
2. 《Ultimate Game Design:Building Game WorIds 》
从名字可以看出, 这本书是写给关卡设计师的。在游戏设计方面还算不错的一本书,特别是讲室外自然场景的构建方面, 颇有可取之处。

A.3.12 美工方面

1. 《The Animator’s Survival Kit》
这本书绝对是动画师必备手册, 奥斯卡奖得主一生的经验之谈, DreamWorks 的动画师以及Disney 的资深动画师都大力推荐。虽然是英文书籍, 但是以图片为主,外语要求很低。通过这本书的学习, 对各种类型的动画工作,包括传统动画、三维动画、Flash 动画都有非常大的指导意义。
2. 《The Dark Side of Game Texturing》
用Photoshop 制作材质贴图, 还真有些学问。

A.3.13 小说&电影

1 . 《DOOM 启世录》
英文原版为《 Masters of DOOM:How Two Guys Created an Empire and Transformed Pop Culture 》
勿庸置疑,在计算机界历史是英雄们所推动的。这本书真实地记录了这些尘世英雄的所为所思。
看完这本书, 请坚定自己的信念, 找回曾经的狂热,不要虚度自己的一生!

2. 《独立游戏大电影》
《独立游戏大电影》, 英文名为《Indie Game: The Movie》,难得一见的记录游戏开发之路的电影,道出了无数独立游戏开发者的心声。
感谢这部影片能把这些独一无二的故事记录下来。他们都是一个人,或者是分隔两地的两个人,为了心中的梦想,不懈地坚持努力, 虽然他们也会有无助、挫败的时候,但是,他们最终都坚持下来了。
看到Jonathan Blow 一个人站在昏暗的房间里,对面显示器啪啪啪地敲着代码,那个侧面的身影, 孤独又坚强。
愿以这部影片为寄托,纪念那些执着的日子,无论过去还是将来。

A.3.14 其他

这一部分算是软件工程方面的书籍的列举,不局限于游戏编程。就列举一些吧,其实豆瓣编程书籍榜单里面有更详细更丰富的书单:
《大话设计模式》《重构·改善既有代码的设计》《代码大全》《Effective C++》《C++沉思录》《程序员修炼之道》
《编程之美:微软技术面试心得》《设计模式:可复用面向对象软件的基础》。

A.4 开源游戏源代码推荐

1. lrrlicht
著名的鬼火引擎,源代码优雅,高效, 且不故弄玄虚。值得每个C++程序员一读, 并不限于 图形编程者。它的周边中也有不少轻量级的东西,如Lightfeather 扩展引擎、ICE 、IrrlichtRPG 、 IrrWizard ,还有IrrEdit、IrrKlang 、IrrXML 可用。(可能是为了效率原因,很多开源作者往往喜欢 自己写XML 解析库,如以上的IrrXML 库,即使有现成的tinyXML 库可用。这真会让Tomcat 里 面塞Axis, Axis 里面塞只JUDDI ,弄得像俄罗斯套娃玩具的JavaWebServiceCoder 们汗颜。)
2. OGRE
排名第一的开源图形引擎,当然规模是很大的,周边也很多。除了以C#写就的OgreStudio , ofusion 嵌入3DSMAX 作为WYSWYG 式的三维编辑器也是棒棒的,特别是其几个场景、地形插件 值得研究。以至于《Pro OGRE 3D Programming 》一书专论其用法。搜狐的《天龙八部》游戏就是 以其作为图形引擎,当然还另外开发了引擎插块。
3. RakNet
基于UDI 的网络库,还能支持声音传输。和OpenVision 结合起来做个视聊程序,或许是个很 棒的选择。
4 . Blender
声誉最盛的开源三维动画软件,还带着一个游戏引擎。虽然操作以快捷键驱动,也就是说要背上百来个快捷键才能熟练使用。但是作为从商业代码变为开源之作,严重威胁着三维商业巨头,它历经十年锤炼,代码达百万行。此代码只应天上有,人间哪得几回看,怎可不作为长期的源码参考?
5 . 风魂
二维图形库,云风大哥的成名之作。虽然不代表其最高水平(最高水平作为商业代码保存在广州网易互动的SVN 里呢),但是也可以一仰风采了。
6 . 圣剑英雄传
二维RPG ,几个作者己成为成都锦天的主力程序员。锦天的老总从一百万发家, 三年时间身价过亿,也是一代枭雄了。这份代码作为几年前的学生作品也算可以了,因为一个工程讲究的是四平八稳,并不一定要哪个模块多么出彩。
7 . Yake
比较好的轻量级游戏框架,源代码有一定的参考价值。
8. Quake 与Doom
Quake 和Doom 系列游戏源码,强烈推荐大家阅读,非常经典。卡马克这种开源的黑客精神就值得赞许。把商业源代码放出来,走自己的创新之路,让别人追去吧。Quake 与Unreal 引擎的三维编辑器是现在所有编辑器的鼻祖,非常有必要好好研究研究。
9. Nvidia SDK9.X
三维图形编程的大宝库,这些Diret3D 与OpenGL 的示例程序都是用来展示其最新的显卡技术的。硬件厂商往往对软件产品不甚在意,源代码给你看,东西给你用去吧, 学完了还得买我的硬件。Intel 的编译器, PhysX 物理引擎大概也都是这样。Havok 会把它的Havok 物理引擎免费给别人用吗?别说试用版,连个demo 都看不到。所以这套SDK 的内容可比MSDirectXSDK 里面那些入门
级的示例酷多了,反正对很多游戏编程爱好者而言是如获至宝, 三月不知愁滋味。







你可能感兴趣的:(Windows游戏开发)