手把手教你架构3d游戏引擎pdf_一个在游戏行业摸爬滚打了十几年的人,为何我对这本书情有独钟...

Big News!《游戏开发:世嘉新人培训教材》今日开始预售啦!经过漫长的等待,这次终于可以买到了。现在下单,你将在图书出印厂的第一时间收到书哦~

这本书由世嘉一线开发者执笔,并被选为世嘉新人培训教材,荣获游戏开发者奥斯卡 CEDEC AWARDS 2009 著作奖。作者平山尚,1977 年生于日本北海道,曾在京都大学研究生院工学研究科进行基因研究,毕业后进入世嘉株式会社,参与了《电脑战机》(PS2)、《超级网球大奖赛3》(AC、PS3)的开发。他还著有《我的第一本编程书》。

这本书采用独特的口语化行文方式,以设计思路为切入点进行讲解,每一步都有明确的逻辑依据,让读者在知道“怎么做”的同时,明白“为什么”这么做。

本书译者罗水东老师,是游戏开发资深工程师,拥有 15 年软件和游戏开发经验。在翻译本书的过程中,更是三读原著,反复确认以确保翻译的精准。本文选自《游戏开发:世嘉新人培训教材》的译者序,来看看译者是怎么跟这本书相遇的?中间又发生了哪些故事?

2012 年夏天,我在东京的书店里闲逛时偶然发现了这本《游戏开发:世嘉新人培训教材》,翻了几下就被吸引住了。当时就想如果能把它翻译成中文该多好。然而考虑到版权等问题,此事就搁浅了。机缘巧合,三年前得知图灵引进了这本书的中文版权,于是便自告奋勇,开始了本书的翻译。 作为一个在游戏行业摸爬滚打了十几年的人,为何我对本书情有独钟呢? 在我的日常工作中,除了游戏产品的研究开发,还负责公司新人的一些培训工作。如何帮助行业新人扎实地建立起一套知识体系,是我这些年一直思考的问题。游戏行业发展至今已经非常成熟。与此同时,游戏开发这棵“技能树”也可谓枝繁叶茂。编程语言、软件工程、计算机图形学、高等数学、物理模拟、游戏引擎架构、动画控制、人工智能、网络编程……初学者难免陷入一种不知从何开始的窘境。对于有志进入这个行业的人来说,太需要一本提纲挈领、鸟瞰全局的参考书了。 有些读者可能不同意——今时今日,任何一个新手经过短期的学习,都不难用 Unity 开发出一个简单的游戏,似乎并不需要掌握那样一堆东西。其实,这只是一种错觉。借助强大的现代游戏引擎,让一个游戏“跑起来”确实非常简单。然而要完成一款真正的商业作品,没有相当充分的知识积累是完全不可能的。 本书内容大致分为三个部分:2D 游戏基础、3D 游戏基础,以及游戏开发实用技术。本书从命令行游戏开发讲起,然后介绍如何开发简单的 2D 动作游戏,最后介绍如何开发包含模型和动画的 3D 游戏。全书不借助任何引擎,从无到有最终开发出一个 3D 游戏。准确地说,这本书是在教我们如何开发出一个简易的引擎,然后用这个引擎开发出一个 3D 游戏。光是这个过程就足以令人激动了。 事实上,著名的游戏公司世嘉曾长期使用本书作为新人培训教材。说到这里,就需要介绍一下原书的由来了。原书作者平山尚老师曾在世嘉游戏公司负责新人培训工作,整理教材时发现相关的必读图书竟达十几本之多。苦于这种状况,便结合自己的开发经验编写了本书。所以读者可以看到,本书涵盖了编程、物理、数学等知识。若想快速习得游戏开发的相关技术,阅读本书再合适不过了。 一些读者可能会担心:“既然是教材,岂不是非常枯燥?”相信读者翻阅几章后就没有这种担心了。平山老师原本就是一名资深程序员,讲解时非常擅长从设计思路切入,每一步都有明确的逻辑根据。为什么要这样处理碰撞检测?为什么要抽象出各个状态基类?为什么要用矩阵来处理旋转?甚至对找 bug 的思路也有理有据地列出了许多建议。喜欢刨根问底的读者请不要错过本书。 本书的代码采用 C++ 编写,建议读者在阅读之前先大致了解一下 C++ 的基础语法。在 Unity 和其他各类 HTML 5 引擎大行其道的今天,直接使用 C++ 编写游戏的情况确实不常见。这是否意味着本书有些过时了呢?非也。Unity 这些高级引擎内部都是用 C++ 编写的,因此,学习本书之后会更容易理解这些引擎内部是如何工作的,以及引擎为什么要这样设计。这在优化游戏性能时会有很大帮助。 本书自翻译到付梓,大约用时三年。此间固然有工作繁忙之缘故,而更多的是理解原书、调试代码等耗时所致。为力求全书连贯通顺,译者已将原书熟读三遍。每想到若因词不达意而误人子弟,便诚惶诚恐。当然即便如此,疏漏之处也在所难免,还望读者朋友不吝赐教。 在翻译过程中,热心读者在社区里的留言,对我来说是最大的动力,感谢你们!我能做的唯有精益求精,回馈读者。同样,衷心感谢图灵的编辑老师们,没有你们耐心的指导与帮助,本书不可能问世。最后,借此机会我也要感谢我的妻子,没有她的支持,我想我很难完成这项巨大的工程。感谢所有人! 游戏行业是一个充满激情的行业。入行十几载,庆幸自己依旧斗志昂扬。我可以,你也一定可以。加油,朋友! 罗水东 2019年9月于大连 94cbb829662dded91736b64ddce61df3.gif a982a07f0fe65073fbf1962e5844bd2f.png 无数游戏制作者的入门教材 《游戏开发:世嘉新人培训教材》 平山尚 著  罗水东 译 本书获得 2009 年 CEDEC AWARDS 著作奖,被著名游戏公司世嘉选定为新人培训教材,是无数游戏制作者的入门教材,涵盖了游戏开发者都需要掌握的基础技术。这本书的学习曲线平缓,对初学者友好,全面介绍了游戏开发人员需要掌握的相关技术知识。 应读者要求,附上本书详细目录仅供参考,可 滑动 查看。

第1部分 2D 游戏........................1 

第1章 第一个游戏.....................2 

1.1 开发一个益智游戏 ....................3

1.2 示例代码解说 .........................7 

1.3 添加读取场景数据的功能..........16

1.4 C++ 课堂 .........................21 

1.5 补充内容:标志位和位运算.................26

1.6 补充内容:指针和内存 .............34

1.7 补充内容:引用 ................41

1.8 本章小结 .............46 

第2章 从像素开始学习2D 图形处理 ............47 

2.1 什么是2D 图形处理 .....................48 

2.2 准备工作 .......................50 

2.3 打印一个点 ...............54 

2.4 移植《箱子搬运工》 ............55 

2.5 补充内容:结束处理 ...........58

2.6 本章小结 ..................60 

第3章 使用图片素材 ......................61 

3.1 读取图片文件 ..........62

3.2 带图片的《箱子搬运工》的示例代码.....72 

3.3 使用透明通道 ............75 

3.4 头文件包含关系的组织策略 .............82

3.5 补充内容:透明混合的性能优化 ..........86

3.6 补充内容:加法混合 .................88

3.7 本章小结 ...................90 

第4章 实时游戏 .....................91 

4.1 什么是实时游戏 ..................92 

4.2 运行动画 .......................95 

4.3 带动画的《箱子搬运工》.............96 

4.4 获得游戏的帧率 ...............101

4.5 解决帧率差异 ..............103 

4.6 补充内容:根据帧率变化动态改变游戏运行速度 ............105

4.7 补充内容:影像撕裂现象 ..............110 

4.8 本章小结 ..................111 

第5章 简单的状态迁移 .............113 

5.1 往类库追加功能 .........114

5.2 相对直接的做法 ...........117 

5.3 试着增加状态 .............119 

5.4 代码审查 .............122 

5.5 示例代码解说 ................128 

5.6 本章小结 ...................136 

第6章 文本绘制方法 ................137 

6.1 字体图片 ..............138 

6.2 文本绘制函数 ..................138 

6.3 一些改进 ..................140 

6.4 成果验证 .................142 

6.5 示例代码解说 ................143 

6.6 注意著作权 .................147 

6.7 示例类库的功能 ...................147 

6.8 本章小结 ..............148 

第7章 动作游戏初体验 ...............149 

7.1 用到的类库 ..............150 

7.2 开发《炸弹人》 ...............151 

7.3 示例代码解说 ...............152 

7.4 添加背景显示 ..................157 

7.5 配置移动的对象 ............164 

7.6 游戏的改进方向 ............169 

7.7 本章小结 .................170 

第8章 2D 平面内的碰撞处理 ................171 

8.1 碰撞检测 ...................172 

8.2 碰撞响应 ..............174 

8.3 发生多个碰撞时的问题 ................179 

8.4 碰撞响应与操作性 ...........180 

8.5 移动的物体相互碰撞 ..............184

8.6 《炸弹人》的碰撞处理 ...........184 

8.7 本章小结 ..............186 

第9章 各种输入设备 ................187 

9.1 获取输入设备实例 ..................188 

9.2 键盘 ....................189 

9.3 鼠标 .................189 

9.4 手柄 .......................190 

9.5 在《炸弹人》游戏中使用手柄 ..........191 

9.6 本章小结 ...................193 

第10章 状态迁移详解 ..............194 

10.1 问题定位 ..........195 

10.2 使用继承 ................195 

10.3 实际运用 .............198 

10.4 补充内容:简化状态迁移的代码 ........201

10.5 补充内容:跨层级的状态迁移处理的改进 ...204

10.6 补充内容:继承的原理 ...........208

10.7 本章小结 .................213 

第11章 播放声音 .............215 

11.1 关于音频类库 .............216 

11.2 补充内容:计算机如何播放声音 ............218

11.3 补充内容:音高和音量 .................219

11.4 补充内容:音色 .............220 

11.5 补充内容:声音的叠加 ..............221

11.6 补充内容:do、re、mi 的原理 ............222

11.7 补充内容:演奏乐谱 ..........223

11.8 补充内容:读取WAV 音频文件 ............225

11.9 补充内容:使用Sound 模块来合成声波 ........226

11.10 本章小结 ........226 

第12章 旋转、缩放与平移 ...........227 

12.1 旋转 ............228 

12.2 引入向量和矩阵 ............241 

12.3 利用顶点来实现 ..............246 

12.4 缩放 ...............253 

12.5 在缩放的同时进行旋转........255 

12.6 矩阵的力量 .............256 

12.7 补充内容:旋转公式的由来 ...............263

12.8 补充内容:更为实用的旋转处理方法 ......266

12.9 补充内容:数学中的矩阵 .............267

12.10 本章小结 ................271 

第13章 显卡的力量 ..........272 

13.1 关于使用的类库 ..........273 

13.2 使用显卡绘制三角形 .............273 

13.3 将图像贴到三角形中.......275 

13.4 混合模式 .............278 

13.5 旋转、缩放和移动 .............278 

13.6 移植《炸弹人》 .................281 

13.7 本章小结 ............284 

第2部分 3D 游戏.............285 

第14章 绘制立体物体 .............286 

14.1 关于类库 ..............287 

14.2 开始制作3D 动作游戏《机甲大战》 .....287 

14.3 绘制三角形 ..............289 

14.4 按位置前后绘制物体 ............290 

14.5 将远处的物体绘制得小一些 ........294 

14.6 坐标变换 .............303 

14.7 用矩阵表示透视变换 ...........316 

14.8 开始制作《机甲大战》 ............322 

14.9 补充内容:Z 缓存的精度问题 ..........335

14.10 本章小结 ............338 

第15章 类库的封装方法 ................340 

15.1 整体设计 ................341 

15.2 资源的详细内容 .............342 

15.3 试运行 .............350 

15.4 从文件载入 ............352 

15.5 补充内容:将类库从游戏中分离....354

15.6 本章小结 ...........363 

第16章 伪XML 文件的读取 ......364 

16.1 确定文件格式 ..........365 

16.2 创建前的准备 .............366 

16.3 处理流程 .........368 

16.4 字符串解析 ...........371 

16.5 编写代码 ..............373 

16.6 运用 ............375 

16.7 示例代码解说 .............378 

16.8 补充内容:生成数据文件........382

16.9 本章小结 .............385 

第17章 编写高性能的代码 ............386 

17.1 算法与时间复杂度 .............387 

17.2 数据结构基础 .............390 

17.3 吞吐量与延迟 ..............402 

17.4 并行处理 .............404 

17.5 内存问题 ..........404 

17.6 STL 和数据结构 ...............411 

17.7 性能瓶颈分析 ............416 

17.8 补充内容:函数调用的开销 .............417

17.9 补充内容:高效运算与低效运算 ........420 

17.10 本章小结 .............422 

第18章 3D 碰撞处理 .............423 

18.1 长方体的碰撞处理 ........424 

18.2 使用浮点数的碰撞检测 .........427 

18.3 三角形和线段的相交检测 ........436 

18.4 实用性 ...........445 

18.5 其他问题 ..............447 

18.6 本章小结 ...........448 

第19章 《机甲大战》的设计 ......450 

19.1 状态迁移 ...........451 

19.2 操作 ...............451 

19.3 发射导弹 .............454 

19.4 将功能整合到一起 .............457 

19.5 前端展现 ...............461 

19.6 不足之处 ..............463 

19.7 本章小结 .............464 

第20章 光照 ............465 

20.1 看见物体的过程 ...........466 

20.2 光的衰减过程 .............469 

20.3 尝试计算 ................473 

20.4 整合到《机甲大战》中...........479 

20.5 补充内容:性能优化 ..............480 

20.6 补充内容:更好的绘制效果 .............483

20.7 本章小结 .............484 

第21章 角色动画 .........485 

21.1 相对运动 .........486 

21.2 层级Model 类 ......492 

21.3 自动构建树结构 ......495 

21.4 将动画数据化 ...........500 

21.5 补间方法 .....506

21.6 引入到《机甲大战》中.........518 

21.7 补充内容:联立方程组vs 斜率指定法 .......519

21.8 补充内容:不足之处 ........520 

21.9 本章小结 ...........523 

第3部分 通往商业游戏之路........525 

第22章 高效的碰撞检测 ........526 

22.1 低效的循环判断方法 ........527 

22.2 性能改善的基本思路 ..........528 

22.3 基于排序的方法 .........531 

22.4 依靠分割实现的方法 ......539 

22.5 补充内容:改进等分切割法.....545

22.6 补充内容:空间分割的高级技巧 ......548

22.7 本章小结 .....552 

第23章 数据加载 ........554 

23.1 为何加载时间越来越长.......555 

23.2 文件加载类 .......556 

23.3 通过合并文件提升性能....562 

23.4 通过压缩提升性能 .......571 

23.5 补充内容:多线程异步处理..........579

23.6 补充内容:编码技术 ..........590 

23.7 补充内容:用于加密的合并与压缩 .......591

23.8 本章小结 ...........592 

第24章 float 的用法 ........593 

24.1 位数限制 ......594 

24.2 float 的实现 ...........594 

24.3 位数截断带来的误差 .......596

24.4 误差程度 .....597 

24.5 减小误差的方法 ..........600 

24.6 特别的数 ........606 

24.7 本章小结 ............608 

第25章 随书类库概要 ........609 

25.1 类库中的类 .........610 

25.2 启动设定 .........611 

25.3 Framework 模块 ...........613 

25.4 WindowCreator 模块 .........614 

25.5 FileIO 模块 ............614 

25.6 Base 模块 ........615 

25.7 Math 模块 ................616 

25.8 Threading 模块 .............618 

25.9 Input 模块 .............620 

25.10 Sound 模块 ..........620 

25.11 PseudoXml 模块 ..........621 

25.12 Graphics 模块 .......621 

25.13 Scene 模块 .......628 

25.14 抗锯齿处理 .........630 

25.15 将《机甲大战》改用最终版类库实现 ...631 

25.16 X 文件 ...............633 

25.17 本章小结 ...........634 

第26章 bug 的应对方法 ...........635 

26.1 防火与灭火 ...........636 

26.2 bug 的种类............636 

26.3 bug 的预防................641 

26.4 bug 的处理........654 

26.5 《机甲大战》的处理 ..........656 

26.6 补充内容:如何检测内存溢出 .....657

26.7 本章小结...660 

第27章 进阶方向 ...........662 

27.1 应该学习什么 ...........663 

27.2 工具开发..........664 

27.3 AI ...........667 

27.4 网络 ............667 

27.5 shader ..........668 

27.6 参考文献 ..........669 

27.7 一些期待的书 ...........672 

后记 ........675 

致谢 ........676 

精美实拍图!

4a9ba313295d03eb9e05be0e52852cd7.png 2319c04fe7c5de954ec8f1a15cec44d2.png 18e0ca5f29370e0c3da5e2a0e5ec1ed7.png 2f3ff834e9f4ec61e9892f225c181dfc.png 912b154b970578f05de76a64fda0c2c3.png 点击预购吧!
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值