掌握开发游戏所必需的
数学和
物理知识
如果你想踏入游戏行业,或者想对代数、几何和三角函数等知识有所了解的话,本书非常适合您!本书向读者介绍了成功开发一款游戏所必需的数学物理概念、定律和公式等。本书讨论了三角几何知识、向量和矩阵运算、变换、碰撞和能量,以及1D/2D/
3D空间内的运动等内容,循循善诱地指导读者如何利用数学与物理知识达到提升自身游戏开发水平的目的。
本书包括以下内容:
●进入3D实时游戏
编程高级领域的必备知识。
●以简易的形式提供开发3D游戏所必需掌握的重要公式。
●书中程序都采用C++语言编写,教导读者如何将相关概念在具体编程中实现。
●本书除包含读者应该掌握的
基础知识之外,还包含一些有用的工具,引导读者在实际项目中运用所学到的知识:
●可视化体验:这些演示程序在交互性环境下,用图形直观地阐述每章中的重要概念。
●自我测试:在进一步学习下一章之前,对您所学的知识进行
检验。
●练习与
程序设计:通过这些训练,提升在实践中运用所学知识的能力。
●问题讨论:这些问题会对每章中的一些重要概念进行思维拓展。
●
光盘资源:在光盘上可以找到“可视化体验”中用到的程序,使您能够直接感受到所涉及的每个概念。
●在线网站(www.prenhall.com/gamedesdev)包含以下内容:
●一些测
试题目和项目,可帮助您巩固本书所学内容。
●一些有用的链接,能够帮助您在游戏开发领域内进一步发展。
8年前,有人曾问我有哪些关于游戏编程中的数学和物理知识的书籍,但当时基本上没有该方面的参考书籍。虽然在一些游戏开发书籍或产业杂志上有一些零零碎碎的相关文章,但是没有一本书是集中讨论游戏编程中的数学物理知识的。于是,我便满怀热情地搜集和整理该方面的
资料,并查阅了经典数学、物理教科书和相关文献,结合游戏编程的相关书籍,最终完成了本书的核心部分。
当我在Full Sail公司研究游戏设计与开发时,又进一步整理和提炼了相关资料。此时,市面上也出版了一些相关书籍,然而由于这些书籍非常抽象难懂,看起来让人头疼,所以我便打算根据已有的资料为编程人员写一些通俗易懂的东西。起初,编写该书是想作为一本能够提供查阅的工具书而已,后来发现将其作为一本教科书会更合适一些。本书不仅可以作为学习游戏编程中数学物理知识的参考书籍,我更希望它能成为一座里程碑,使你能够在游戏开发的世界中展翅翱翔,获得无穷的乐趣!
适合读者
本书适合于所有对游戏开发与编程感兴趣的读者,书中的大部分实例源代码以及演示程序的代码都放在随书光盘上了。如果你已经对C++比较熟悉,可以对本书所讲的内容进行深一步的研究。不过,在理解具体概念之前,不应该直接进行编程练习,建议首先做一下自我测试中的问题。若要完成问题讨论和项目中的问题,则需要读者对C++有一个全面的理解。请记住,本书不是一本关于3D游戏编程的书籍,而只是介绍3D游戏编程中所涉及的数学物理知识,此外本书更不是介绍3D
高等数学的书籍,它只是一本入门书籍,讲解模拟真实3D场景的基础知识。如果你对代数学知识掌握扎实的话,本书你将会收获更多的知识。另外你也需对几何学和三角学知识有一定的掌握,这样才能获得更大的成功。
本书概览
本书的前一部分介绍数学基础知识,后一部分介绍物理相关知识,其中前面内容是学习后面物理知识的基础。
第1章从点和直线开始,对2D和3D中的点与直线进行了定义,然后讨论了它们在相交检测中的应用。
第2章介绍了游戏编程中的几何学知识,复习了勾股定理、两点间距离公式以及中点公式;然后分别介绍了几种常见几何体的方程,如圆、抛物线和球等,它们会在碰撞检测中进一步用到。
第3章介绍了游戏编程中用到的三角形知识,定义了6种基本的三角函数,然后讨论了在角度与弧度之间的转换过程,并用程序进行了实现。
第4章介绍了向量的概念,它可用来描述一个物理量,然后介绍了向量的不同形式,并讨论了向量相关的运算,如向量相加、相减、标量与向量相乘、点乘、叉乘和单位化等。
第5章介绍了矩阵以及相关的数学运算,如矩阵相加、相减、标量与矩阵相乘、矩阵相乘、转置等。
第6章介绍了矩阵最好的应用——变换,矩阵变换包括平移、缩放和旋转
控制了游戏中所有物体的运动,最后给出了一些关于游戏编程的优化技巧。
第7章介绍物理单位之间的转换,在编程中一定要将所有单位转换成一致的。
第8章开始介绍物理知识,定义了速度、加速度和位移的概念,并给出了它们在一维空间中与时间的关系。
第9章介绍速度和加速度的导数形式,并简单论述了微积分的基础知识。
第10章将前面两章的内容扩展到2D和3D空间中,本章侧重介绍了抛物运动。
第11章介绍作用力与物体运动之间的关系,由牛顿三大运动定律可以确定现实中的所有运动,本章的运动定律与以前章节内容具有很重要的联系。
第12章介绍了两种不同类型的能量,在游戏中可以利用另外一种方法——能量守恒去模拟物体的运动。
第13章介绍游戏中的一个有趣环节——碰撞,游戏若没有碰撞就没有物体间的交互性,该章描述了物体发生碰撞后的响应处理,即物体应该怎样运动。
第14章讨论物体的旋转运动,它对前面介绍的物理概念进行了扩展,以适应于旋转运动。
附录A列出了本书中的一些重要公式。
附录B给出了一些参考书籍和资料,你可以通过它们获得更多知识。
附录C给出了每章后面的自我测试答案。
附录D列出了随书光盘上的内容。
最后,给出了本书中用到的术语表。
每章的开始都提出了每章包含的主题,然后举一些例子来说明这些主题,每节后的“自我测试”部分给出与之相应的练
习题。自我测试的答案可以从附录C查阅到,在做完练习后你可以对照答案检验一下。许多章节还包含有“可视化体验”部分,随书光盘上有演示程序与之相对应,有些演示是为了说明书中的一些概念,有些则是具有交互性的演示。这些演示的C++代码都可从光盘上获得,你可以仔细
分析一下,弄清楚它们到底是如何实现的。每章都还包括“能力测试”部分,它包括选择题、练习题、程序设计和问题讨论,它们也和每章开头提出的主题是相对应的。
在学习完每章内容后,你将能够对书中的数学原理有一个深入的理解,并能够构造和实现一般的3D物理问题。从此时起,你掌握的知识将会有一个巨大的飞跃,就可以开始研究如何将这些知识运用到游戏引擎中,并且在以后的学习中处理更加高级、复杂的问题。
随书光盘内容
本书中包含一些可视化体验例子,它们能够以图像的方式说明书中的相关概念,而且这些例子的源程序也可以在随书光盘上找到,有一些是演示程序,另一些则具有交互性,它们的源代码都可从光盘上找到。通过这些演示程序,你可以明白在C++中是如何处理这些数学、物理运算的。
Circles演示:在第2章用到,它演示了两圆移动直到相交的全过程。
Matrix Vortex演示:在第4章用到,它是一个交互性演示程序,直观地演示了向量以及矩阵的不同运算规则。
Transformations演示:在第6章用到,它可以帮助读者理解对物体进行2D变换的原则,同时它也具有交互性,读者可以输入一些变换
信息,然后即可观看变换的结果。
1D Racer演示:在第8章用到,演示了具有恒定加速度的物体在一维空间中的运动,同时该演示也回顾了物体的5个运动方程。
Cannon Physics演示:在第10章用到,它是一个简单炮弹发射游戏,用户可以控制大炮的初始参数以及墙的位置,然后开始向对手发出攻击,在发射之后可以同时观察到轨道的位置信息以及移动路径等。
Basement Billiards演示:在第13章用到,演示了2D球体之间的碰撞,同时也说明了许多关于碰撞响应的相关概念。
上述演示程序都具有一定的趣味性,演示了本书中所讨论的一些数学、物理概念,同时也让读者亲身体验到了这些概念的应用,毕竟它们都是与程序相关的。
教学资源介绍
在本书的随书光盘上,提供了一些教学资源,包括:
教学
手册:提供教学中的一些小提示、各章内容概要、教学目标、教学建议、章末问题及解答等。
幻灯片:提供每章内容的相关幻灯片,可以用于教学。
测试题:该测试文件可以使用
软件Prentice Halls TestGen,它可以从wwwprenhallcom/testgen免费下载。TestGen软件是一个强大的测试生成程序,你可以容易地编辑测试题目,将它们转换成测试题,然后以合适的形式输出这些题目。该程序也提供许多选项用于组织和显示测试题,利用内置的随机数以及文本生成器,可以创建多个版本的测试题。此外,该软件强大的搜索和排序功能使你更容易地查找问题并随意地组织它们。
在线网站:wwwprenhallcom/gamedesdev
wwwprenhallcom/gamedesdev是一个为学习和教学提供在线支持的工具网站,这里有以下内容:
在线学习指导,具有交互性的自我测试网站,为学生提供便利的在线测试机制,以检查学生对课本知识的理解程度。
提供额外的项目资源,可直接用于每章内容的实践中。
作者简介
Wendy Stahler是位于美国佛罗里达州冬季公园市(Winter Park)的Full Sail Real World Education学院游戏设计与开发专业的首席教员。在Full Sail学院的6年里,她致力于游戏编程中数学、物理知识的教学研究。同时,Wendy也是罗林斯学院(Rollins College) IT工程系的副教授,并最近刚开始负责IT培训的任务。Wendy毕业于罗林斯学院,在那里她获得了数学和
计算机科学的学士学位,并获得企业传播与
技术专业硕士学位。
致谢
爸爸和妈妈——感谢你们的鼓励和支持!
Hap Aziz——感谢您将我带入游戏开发的世界!
Dr Douglas Child和Dr Donald Griffin——感谢你们提出的宝贵建议!
Gene Woolcock和Tony Judice——感谢你们在大学里对我数学与计算机科学方面知识的教导!
Stephanie Wall——感谢您的耐心和支持!
Marc Mencher——感谢您给我提供编写本书的
动力!
感谢Cody Kahrizi和Dustin Clingman为本书提供编程的练习题,同样要感谢程序的编写者Dustin Henry、Mike Wiggand和Mike Fawcett。
特别要感谢我的所有学生,感谢你们提供的有益启发!
质量保证
非常感谢质量保证小组的努力,是你们的认真工作和努力保证了程序的正确性。
技术编辑
Robert Smolenski
Delaware County Community College
Shai Neumann
Brevard Community College
校对
Philip Tavel
DeVry University
应朋友邀请,为明亮这本《游戏编程数学和物理基础》译著作序,因为书稿要马上付印,所以成文苍促,请作者和读者海涵。
电脑游戏技术日新月异, 游戏画面从早期的平面到立体, 从抽象到拟真。 使得玩游戏享受的不再只是娱乐性, 而是更具欣赏性。 现在许多游戏的画面看起来如同电影大片, 使得某些时候看别人玩游戏也是一种享受, 这是因为三维图形技术的不断进步。 三维技术的发展也是促使游戏产业市场高速发展的因素之一, 我认为其重要性仅次于
网络。画面技术的进步, 改变了许多人对游戏的印象, 不再认为游戏只
第1章点和直线
11点的定义
12线的定义
13线的属性
14在相交检测中的应用
本章总结
能力测试
第2章相关几何知识
21两点间的距离
22抛物线
23圆和球
24在碰撞检测中的应用
25碰撞检测的视觉体验
本章总结
能力测试
第3章三角函数
31角度和弧度
32三角函数
33三角函数的性质
34使用C++中的数学库
本章总结
能力测试
第4章向量运算
41向量与标量
42极坐标与笛卡儿坐标
43向量加法和减法
44标量与向量相乘
45点乘
46叉乘
47可视化体验
本章总结
能力测试
第5章矩阵运算
51相等矩阵
52矩阵的加减运算
53矩阵与标量相乘
54矩阵相乘
55矩阵转置
56可视化体验
本章总结
能力测试
第6章变换
61平移
62缩放
63旋转
64组合变换
65可视化体验
本章总结
能力测试
第7章单位换算
71公米制
72不同单位制间的转换
73计算机转换
本章总结
能力测试
第8章一维空间运动
81速度和速率
82加速度
83运动方程
84可视化体验
本章总结
能力测试
第9章一维空间的运动导数
91速度的图像和导数
92加速度图像和二阶导数
本章总结
能力测试
第10章二维和三维空间运动
101使用向量
102抛物运动
103可视化检测
本章总结
能力测试
第11章牛顿定律
111力
112牛顿定律
本章总结
能力测试
第12章能量
121功和动能
122势能和能量守恒定律
本章总结
能力测试
第13章动量和碰撞
131有关静止物体的碰撞
132向量和冲量
133碰撞建模
134可视化检测
本章总结
能力测试
第14章旋转运动
141圆周运动
142旋转力学
本章总结
能力测试
附录A一些数学和物理公式
附录B推荐资源
附录C自我测试答案
附录D光盘内容
术语表
图书在版编目(CIP)数据
游戏编程数学和物理基础/(美)斯达乐(Stahler,W.)著;徐明亮等译—北京:机械工业出版社,20084
(游戏开发技术系列丛书)
书名原文:Fundamentals of Math and Physics for Game Programmers
ISBN 978-7-111-23696-2
Ⅰ游…Ⅱ①斯…②徐…Ⅲ①游戏-应用程序-程序设计-应用数学②游戏-应用程序-程序设计-应用物理学ⅣTP3016
中国版本图书馆CIP数据核字(2008)第039483号