有什么中文编程游戏引擎擎


VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

还剩29页未读 继续阅读

此篇文章献给那些为了编程不怕困难的热血青年它的神秘要我永远不间断的去挑战自我,超越自我这样才能攀登到游戏技术的最高峰   

这篇文章是我一年半前,找工作時候写的那时是发到学校的BBS上。现在我工作了想法和以前也有不同,但对编程理念还是基本差不多在我没遇到U3以前,一直研究WILDMAGIC可鉯说是GAMEBRYO的前身吧,他们基本框架都差不多是完全面向对象,代码容易读但它发展存在严重的弊端,这个也是它为什么不是牛B引擎的原洇但从渲染和动画方面来看,U3的 MATERIAL TREE 和 ANIM TREEE 是2个飞跃的当我对我自己引擎渲染材质和光照一筹莫展的时候,MATERIAL TREE带来的希望对比 zfx (wildmagic)gamebryo 和ogre 还有U3,各有优缺点而且你可以看到一个引擎发展,从一个以多边形为渲染单元变成以mesh做为渲染单元(现在很少有引擎场景管理分割多边形来做的 我始终喜欢zfx引擎,它是00-02之间的引擎完全让你可以理解那时候显卡不是很强的时候,一个引擎应该具备的特征对于架构来讲,(wildmagic)gamebryo 和ogre 做的很好u3的特点就是架构乱,没有什么可读性的技术文档研究起来十分吃力。做为一个商业引擎对于渲染方面,我认为(wildmagic)gamebryo 输给了ogre框架设计还囿弊端,ogre确实是一个好引擎而U3对于渲染过程,光照阴影,就是一帧的渲染过程处理的十分得当。动态生成shader是一个引擎的发展的必然趨势而往往动态生成最多的,也就是材质和光照它们不能分开,分开谈无意义MATERIAL TREE 我始终认为是个太好的想法了,任何特效不需要程序員过多参与美术可以搞定一切,什么水反射,折射这些效果,编写起来易如反掌还可以实时光看效果。其他动态生成也就是根據配置不同,来做处理动态编译shader弊端太大,不能做到所有而且不灵活,如果动态生成和动态编译合起来简直牛B透顶了。现在我的引擎已经有了MATERIAL TREE这个功能ANIM TREEE在制作中。
这里面我重点谈的是图形方面略带些动画方面,一个引擎最基本的是内核包含内存管理,文件读写资源管理等等吧,也十分重要我的引擎这些写的都很简单,基本都是wildmagic里面的。
第一阶段是了解3D原理和数学基础大学里面学的线性代数,概率统计和高等数学完全足够在3D中都有充分体现。最好自己能做一个软引擎这样整个3D流水线自己完全可以掌控,然后在学DX之类的API很嫆易
第二阶段不要看引擎,还是应该以实现各种效果和基本算法为基础包括各种图形特效,场景管理剪裁算法,各种动画算法等等,所有那些单一的算法如果这些都不是了解很好,那么做引擎时引擎框架的接口也不会设计好!再添加这些算法和效果时 会很困难效率也不会很高。
第三阶段就是看大量的引擎,对引擎有很深刻的概念3D引擎只是引擎的一部分,引擎主要是框架如果框架搭建好了,那么引擎的效率是很显著的其他底层细节优化,也会有明显的优势体现
第四阶段,再好的引擎没有成功的游戏支撑都是白费你不僅仅是做引擎,而是做的有价值的引擎可以很好的为游戏服务的引擎。
下面这段话写于一年半前~~ 本人不才姑且以自己经验来谈如哬学游戏编程,这个话题我酝酿了很久它确实很难写,因为我也不是资深高手才刚刚登堂入室,游戏编程大师功力一般都十几年左右所以让我这样的小卒写的深入浅出更何谈容易,错误出现并不奇怪高手见笑也在所难免,请大家指正我会欣然笑纳。但这几年走过嘚路让我知道这么学是正确的,大体过程经验告诉我这样做是对的,高手的指引告诉我这样做是对的。
这篇文章主要讨论如何学习遊戏图形编程和中文编程游戏引擎擎编程告诉没有接触游戏过编程或者现在关于怎么学好游戏编程还迷惑的PEOPLE所要走的方向,完全抛开技術和代码实现进行谈论至于游戏逻辑这几年重点没有发到这个上面上,很难总结
经验的限制,对于如何编写一个好的引擎(至于“好”这个词都是相对而言能做的满意就是我所期望的),至今为止我还没有这个能力但我相信经过我的努力,不久的将来我会实现这個愿望,因为我的一个愿望就是实现一个好的引擎

我从下面几个方面来说明如果学习,记住只是如何学习要想学好就要靠你自己。


1 伱真的喜欢游戏编程吗?
3 学会读书,自学与思考交流与合作
4。 游戏编程需要的基础知识
8浅谈游戏物理和AI

一。游戏编程你真的爱她嗎?


当你听完我的介绍后你就要决定游戏编程是否适合你。
游戏编程可简单可复杂简单的2D 《蛇吃豆》,复杂的现在流行的3D游戏咱们鈈说简单的,因为你不想学习游戏编程就为了做一个简单的游戏确实每个人对他所向往的东西都想彻底了解清楚,可是我给你的第一个警告复杂的3D游戏,复杂到难以想象

1 你思想需要改变吗?

打开话题游戏是一个结合体,她是一个音乐美术,技术创意相结合的艺術品,你要用艺术的眼光去欣赏的因为好的游戏是用艺术的眼光来设计,除了某国的不算外很多经典的游戏流芳百世,成为真正游戏玩家佳话


中国的游戏为什么这么落后,你要联想下当年中国为什么会被八国联军所侵略。腐朽的思想是根本原因从而导致了腐朽的社会制度。游戏行业也是这样看待游戏的中国人,始终带着眼镜用腐朽思想看待游戏,所以现在出现腐朽的游戏行业导致中国游戏發展缓慢,有人曾经说中国游戏不久就赶超日本和美国我认为是扯淡,而且不是一般的扯淡具体原因后面我会详细说明。
从小的时候国外的电子游戏产品就跑进了我的空间,废寝忘食的玩个没玩因为耽误学习,从此电子游戏被老师和家长全部封杀任何事物都有利囿弊,鲁迅的《拿来主义》曾说过“去其糟粕取其精华”。在中国电子游戏被视为过街老鼠。确实要承认电子游戏有负面影响但这些负面影响是谁产生的,本质上是我们自己最后本来是精华的东西从我们身边擦肩而过,从小霸王以后的国外游戏机没有任何仿造导致了游戏机技术从此断代,现在却又想起来赶超
而现在,国人知道努力了国家看到有钱可赚开始支持了,腐朽的游戏思想却还在蔓延网络游戏就是这样环境下成长的新生儿,国内网络游戏每年要大批量生产但存活的基本没几个。不能否定没有利益的事情没人干,泹你还不能否定有些事情即使没有利益,但还是有人干哪怕知道自己并不能得到什么。国内的人很少是第2种人,他们把游戏做为赚錢工具垃圾游戏隔三差五的纷纷涌出。相比来讲我只拿日本举例子,虽然小日本和咱们有愁但我们不得不承认小日本在游戏这方面思想层次完完全全超越我们,他们有严格游戏教育背景他们做一款游戏,要按照严格的流程从设计到编程,以至最后的测试都有着幹一行敬一行的精神,否则《生化危机》这样游戏你是永远看不到的
所以你要改变自己的思想,游戏是一种艺术品你要有一种艺术境堺来去欣赏她。

2 你有毅力爱她爱到底吗

也许我上面的话,你还能接受残酷的在下面,以我的经验告诉我如果你编程和游戏理论起步昰零,你要对游戏编程达到略有小成的水平最少要4到5年我比较蠢,花了6年这6年来,几乎每天平均学习4-5个小时左右当然假期都要算上。头3年半基本学习计算机基础知识包括数学,数据结构计算机体系结构,汇编,编译原理操作系统,网络软件工程,离散数学算法分析。我们大学4年基本就学这东西这些都是基础,游戏编程都需要还有一个就高等物理我没有学,导致我现在对于一些物理微積分方程很难理解当然这里并不一定是问题,只要你肯努力没有学不会的。完全把这些学好花4年时间真的不容易。我曾经抱怨自己沒保研而痛苦的经历考研现在我却认为是值得的,我很难有时间在集中精力的复习这些专业课了尤其是数学。


在游戏编程中上面的基本知识都可以用到,所以我说游戏编程很复杂一点不假就拿游戏中最难的部分——一个好的中文编程游戏引擎擎来说(这里说的好引擎),世界上能把她做出来的人很少中国更是寥寥无几。
上面只是理论基础要走进游戏编程最基本的。过硬的编程技能更是需要的其实这些理论学习可以和编程相结合,在编程中学习理论为了学习理论而增长编程经验。
有了基础你才能进一步学习游戏编程,2D游戏囷3D游戏理论都要学这又要花费很长时间,这个是我下面要详细说的
看完我写的,你可能心惊胆寒所以你要爱她,深深的爱她否则伱承受痛苦的时候享受不到暗含的乐趣。

3 爱她请从游戏开始

很多人可能不解,游戏编程为什么要从游戏开始玩游戏时,有很多潜移默囮的东西影响着我们编写游戏程序很多灵感确实从游戏中得来。一般的游戏编程高手都是从小由于游戏对他们巨大吸引,从而走上游戲道路虽然不是绝对,但按统计学角度讲可以说是一个事实一个不爱玩游戏的人,爱上游戏编程的几率是很小的其实很多人小的时候都爱玩游戏,他们都是从游戏厅张大只有一少部分,走向了这个行业他们之间有着明显不同,走向游戏开发的人是真的被游戏背後那种神秘东西所吸引,并想要揭开它而另一些人,则是完全迎合了游戏开发的需要——玩的高兴


我想说的是,一个游戏编程高手必定是一个游戏玩家,他们都是从玩游戏而爱上游戏从而走上游戏编程道路。这条路充满了荆棘不是一般人能走到最后的。所以你一萣要爱她!
当然任何事情都不绝对的你可能就是那不爱游戏但爱游戏编程(或者和游戏性无关的那部分编程)小概率的人。

二游戏编程,你真的了解她吗

游戏编程,这个概念包含了很多深层次的东西

1.广义上,我给的定义是中文编程游戏引擎擎开发和游戏逻辑开发。

游戏逻辑开发是集中力量只开发游戏中剧情部分你只需要做的是什么时候显示什么,什么时候放出什么声音什么时候通过网络传输什么数据,什么时候这个物体或者人物做什么动作至于底层怎么显示,声音如何处理网络如何传输,物体动作怎么实现的你不用关惢,关心这些的是中文编程游戏引擎擎所以说中文编程游戏引擎擎负责技术方面,而游戏逻辑负责游戏文化内涵


成功的游戏是以好的遊戏逻辑为基础的,而中文编程游戏引擎擎并不是成功游戏主要条件但好的游戏配上好的中文编程游戏引擎擎,确实会给人一种震撼楿比同样的游戏逻辑,好的中文编程游戏引擎擎显示效果会给人一种全新视觉和听觉感受
至于游戏逻辑我不想过多解释,但并不是说游戲逻辑简单游戏逻辑也可以复杂的要命,这取决与游戏复杂程度和中文编程游戏引擎擎与这个游戏的关联程度为了解释这句话,我不嘚不从中文编程游戏引擎擎解释开始
早期的游戏是没有中文编程游戏引擎擎这个概念,都是一个游戏一套代码随着游戏越来越多,大镓发现开发有些游戏中有很多可重用的代码,逐渐把这些重用代码封状起来这就是早期的引擎。对于引擎没有明确的概念只有好坏囷适应程度之分,所谓的好坏就是引擎支持功能和显示特性等是否strong,而适应程度是指一个引擎是否适合开发这个游戏,开发这个游戏是否偠自己再编写一些额外的代码
如果我用开发混斗罗的引擎(假如它有引擎)来开发RPG,和开发RPG游戏的“RPG游戏开发大师”相比我们还要做佷多工作,才能完成玩法功能一样的游戏
所以说很难有明确的界限划分这一堆代码是否是中文编程游戏引擎擎,但中文编程游戏引擎擎嘚任务是不用质疑的它的任务就是尽量不用负责底层处理,而专心到游戏逻辑上来

2.从狭义上分,我只***中文编程游戏引擎擎部分基本包括(1)游戏图形引擎(2)声音引擎(3)网络引擎(4)脚本引擎(5)GUI(6)人工智能引擎(7)物理引擎。

(6)(7)两个不是必须的而前5个是一个好的中文编程游戏引擎擎要基夲具备的,其实每个中文编程游戏引擎擎中都具备物理引擎只不过很多游戏对于物理要求不是很高,所以就集成到了图形引擎中或者游戲逻辑中


图形引擎是引擎中最难的,它基本要处理中文编程游戏引擎擎中70-80%的工作量它的主要任务是负责图形高效显示,包括速度和精喥后面我会集中并详细解释。至于声音和网络引擎大家通过字面就可以知道它干什么本人对声音处理和网络传输知道甚少,说出来只能误人子弟

至于脚本我还略有研究,我想解释下什么是脚本游戏中为什么用脚本。脚本有时很难给出一个定义但大家都知道那些是腳本语言,我给出的解释是用软件

CPU(虚拟CPU)来运行的编程语言就是脚本语言软件CPU和所说硬件CPU是对立的,也就是说脚本运行与否先是关联到这個虚拟CPU在虚拟CPU上运行,然后再又映射到真正CPU来真正运行。这个过程很抽象我觉2个例子,第一个就是J***A语言它有一个虚拟机,这个虚擬机就是软件CPU再举一个例子,我现在要编写这样一个指令、
为了实现这个指令你首先要有一个函数来负责处理打印
这里只是伪代码,呮是表示这个意思
你首先要找出PRINT这个单词,读入到一个buffer1然后把参数读入buffer2
这里段代码其实就是一个软件CPU,它负责虚拟运行PRINT S  这个指令

那麼游戏中为什么要用脚本呢!最简单解释就是灵活性好。拿一个RPG游戏例子来说游戏中有大量物品,每个物品有大量的属性如果我把这些属性值直接写到游戏中,每一个小小的改变就要编译整个游戏花费很多时间,灵活性很差


如果我把这些写到一个文件中,用脚本语訁来编辑只需要编译脚本文件就可以了,当然如果你脚本是解释型的语言不用编译直接可以运行。
当然脚本还有很多好处主要目的還是方便性和灵活性。
其实GUI(图形用户接口)是一个重要部分3D游戏中,出现的是大量的3D模型这些模型是先用文件的形式存放好的,而文件裏面包括的是3D数据和这些数据的组织方式
至于数据怎么组织是你引擎要规定好的,这样也方便读取最后把3D数据加载到内存。现在问题昰3D数据上我们怎么能有效的得到这些3D模型的数据,手工写进文本里我靠,那是奴隶社会SB的做法。我想你不会这么做人类很聪明,這就是为什么人把其他动物关进笼子里而不是其他动物把人关进笼子里的原因。既然我们很聪明就要想一个办法快速的定义3D数据,然後保存成文件这样一个3D编辑器就产生了。3D编辑器就是类似于3DMAX那种但引擎中的编辑器是有特殊目的的,使用者要按照引擎指定要求编辑3D數据这样引擎高效的显示和处理数据比较容易,至于3D数据是怎么组织的是一个设计上的问题,由你引擎来决定设计好坏,决定你引擎加载数据是否容易关系到最后渲染。所以一般好的中文编程游戏引擎擎都有自己GUI但你也可以用3DMAX这样的软件,然后读3DMAX文件变成自己可鉯利用的数据形式
说到这里,不知道上面的概念大家是否理解我想如果你没接触过引擎,可能真的不理解其实我很难用简短的语言紦这么复杂的问题说清楚,如果有一天你把3D学的融会贯通你发现我说的是对的。我不知道大家是否发现一个共性的问题有时你读一本書,无论你怎么认真把它看完一遍你都很难掌握里面的知识,当你再认真看第二遍的时候你突然觉得这本书没有第一次看那么晦涩难慬。有些知识都是前后呼应的它们之间相互联系,要想完整的理解它们缺一不可游戏编程的知识也是这样。我前面介绍的如果你看懂叻那你perfect,如果你没有看懂也不要灰心,这里介绍的只是一个大纲让你对游戏编程有一个了解,最基础层面的了解

三。游戏编程伱准备好了吗?

这个部分讲解如果你想开始游戏编程应该具备那些基础知识这样你才能接下来游戏编程学习,当然下面的有些知识我開始学习游戏编程时,也不是都具备但这些知识都是很容易学的知识,如果你基础好在游戏编程中随时学就可以,不耽误你学习游戏編程的进度我在这段最后会指出那些是必须掌握的,因为这些知识如果你在游戏编程时学习再学时间上真的不允许。

1书,永远是你嘚好朋友! 书是你了解她最直接途径,当然我说的书还包括所有游戏编程资料书,有好有坏想要深刻了解她,你必须挑选精妙的好書而且还有循序渐进的,合理次序的去读它们游戏编程书籍大量风起云涌的出现是在2000年以后,当然2000以前也有只是很少一部分,从2000或鍺以前开始就研究3D游戏的中国大哥们现在可以说是现在中国游戏行业的鼎梁支柱。现在出版有关游戏方面的书籍大约有200左右本中国人洎己原著的书几乎没有,大多数都是翻译国外的就有几本翻译的质量很好(翻译大哥大姐确实很辛苦,我承认这点但拜托你们翻译前偠看懂再翻译,否则望文生义不如让我们自己看英文原版)要么自己写的也是东挪西凑的,写出来估计是想骗钱谁叫中国人这么老实,这么好欺负了其中大部分书籍是3D游戏的,3D游戏确实要比2D游戏难一个数量级别如果你足够聪明,其实这些书看个几十本写出一个在Φ国可以立足的3D引擎足够了。但好象这样聪明的人真的很少有黄金的这个地方大家都知道,可是前往这块宝地的道路太荆棘很少有人赱下来。
书大家从出生时就接触,学会读书这四个字,很少有人能领会你看一本书,要么否定要么肯定,如果你还是很迷糊要麼是书写的不好,要么就是你知识水平层次有限要么就是你根本没学会读书。我在这里只说一句话“要读好书思而不学则罔,学而不思则怠温故而知新”,我想高手很容易体会这句话
想要学好游戏编程,学会读书是你要掌握的也是你获取知识最快的途径,开始时建议还是读一些中文的游戏编程书,因为游戏编程中充斥大量术语和名词没有任何游戏编程概念的人,直接看英文即使你是老外,峩估计你看一会就会爬在书上眼皮一关,口水把它淹没了
看书后,代码一定要仔细读而且对于初学者一定要亲自去实现,这样你才能加深理解有时看书看不懂,一看代码就全明白了“纸上得来终觉浅,觉知此事必躬行”我始终坚信这句话,只有你经历了你才能感受,就象你没有失去过就不会知道珍惜是什么东西。
我相信既然你都看到这里了就应该知道我上面为什么给你打好的警钟。看完書就要写代码,最好不要一味的效仿要有你自己的独道之处,这样才说明你认真考虑了这个问题你也真正了解了,这个问题是什么应该怎么解决,怎么解决最有效果
E文书,以后就要是你老婆(同性恋除外)天天都要见面,除非你离婚了也就是游戏编程这个爱凊你不想要了,你提前离开了这个努力走到最后才能见到美好果实的幸福家庭中文翻译一般都很慢,中文翻译出来国外这个技术基本過时了,而且有能力翻译的人本来就少有时间干这事的说他有病,也不足为奇因为翻译一本太浪费时间了。所以要适应去看E文现在沒钱,就看电子的很多国外新书,没有电子的但电子的够我们初学的人玩很长时间,等有钱了就直接去买国外正中的洋版,然后弄箌家中天天啃,工作时也啃人家都会说你很有激情的。看电子的如果闲麻烦就打印下来,打印下来还是花不了几个钢币的和买一夲中文差不多(大家不要哭穷,一本好书100元我认为很值得里面技术如果你掌握了,你想想大把大把的票子就进你口袋里,很多人买来鈈看天天还抱怨书贵。)
这几年来我读过很多游戏编程方面的书,中文的基本都读过了现在我一直在读E文书,有时到觉得看中文有些不适应还有好多好书,我还没有读读E文书时,如果没读懂自己一定要去网上查查相关资料,然后集中精力把它弄懂现在很少有看不懂的E文游戏编程书(知道我6级没过的,别用砖仍我)有些还是看不懂,确实自己水平有限但不是因为英语问题,关于高深而复杂數学问题即使翻译成中文,我也很难看明白
我在后面会把所有好的游戏编程书籍都列出来,告诉大家那些可以买到那些只有电子的。不好的书我就不列出来了,只会浪费大家以后的时间
2。游戏编程所需要的基础知识

我这里介绍下要做一个好的称职的,游戏程序員所需要学习就和盖楼一样,要想上层建筑牢固你就要有坚实的基础,我这里介绍的基础是你从事游戏编程最基础基础的不能再基礎的东西。


数学是游戏中支柱没有了它,任何都不要谈在你编写你游戏的时候,你就会知道世界抽象成一堆数学是多么的神奇,突嘫你会觉得以前枯燥无味的数学现在是一顿大餐但这个是霸王餐。国外人写关于引擎方面书的人都可以说是数学高手,他们理论和实踐都很厉害让我崇拜的不得了。大学里是你学好数学的最好机会一定要弄明白它的现实意义,任何理论都不是凭空出来的它一定有現实基础,这个现实基础就可以帮助你很好理解这个理论。
21。1高等数学——微积分理论
在中文编程游戏引擎擎中很多游戏特效都是通过微积分方程来解得的,高度仿真是现在游戏的追求真实感越强就需要越多的计算量。极限一元微积分,多元微积分级数,微分方程等等在游戏图形图象和物理上都有明显体现有时一个硕士或者一个博士为了拟真一个效果要花费几个月或者几年的时间,做为一个遊戏程序员微积分到达什么层次我很难给出定义,但起码如果别人给出了原理我们能看明白并把它实现,我觉得就很可贵了
2。12线性代数和空间解析几何
在大学课本中,空间解析几何是放在高等数学书里面讲的但游戏中,它和线性代数放到一起我认为更加合适线性代数所有知识都要掌握,在游戏中它们比微积分体现的更淋漓尽致理解上我个人认为相对微积分更容易。
空间解析几何主要讲向量岼面,线体,这些东西并通过线形代数矩阵进行空间变换最后达到游戏想要的目标。
这个在大学里面不学数学的估计很少有人接触,它也是来用来变换空间理解起来不是那么容易,但最常用的就是用四元数来表示旋转
我这里只是一概而过,上面任何知识在游戏中嘟有应用但大学里的数学不是为了游戏而开设的,所以和游戏中用的数学在知识分列和讲解上还是有很大差异尤其是线性代数和空间解析几何,不用担心我在后面介绍给大家一些好的游戏书籍,对大家学习游戏编程和有帮助的
编写游戏c和c++是你首选,相对来讲C++是你更應该掌握的
2。21 其他语言为什么不是当今流行的编写游戏程序语言?
VBJ***A,C#等等其他语言,并不是说它们不能做游戏它们能做,由于語言本身设计机理的限制只能做一些对游戏速度要求低的游戏,对于运行速度要求高的游戏它们被判成死刑。当然这个也取决于硬件嘚发展以前8bit FC游戏都用C语言和汇编来写,现在由于硬件速度提高用VB,J***AC#来写这些游戏运行也是可以的,例如现在兴起的WebGame(网页游戏)但如果你真想做游戏的话,你一定想要了解现在最流行游戏编写C和C++是你最好的选择,也是你走上真正的游戏编程道路的重要武器
2。22 C和C++应該选择那一个?
C和C++这里面我还要说一说,我个人更看好C++大家都知道C是面向过程的,而C++是面向对象的虽然C++的面向对象特性还不是很完善,但出于对大型软件设计上的考虑因为中文编程游戏引擎擎是大的工程,框架设计远远要比编程重要一般框架设计用面向对象方式哽直接,所以C++比C更有优越性性而且如果你合理用好C++,并不见得C++比C速度慢有时一个软件架构和软件运行上问题,很难取舍对于大应用程序来说,都是一点点牺牲速度来获得好的架构是利大于弊的事情,这里确实体现软件工程的重要性质
2。33 汇编,很重要吗
汇编语訁也是你要掌握的,你说你语言学的好但却不会汇编,是一个天大的笑话现在很少有汇编高手能写出比编译器优化出来的汇编代码运荇效率要高,因为语言的不同思考问题的方式就会有不同,就象最早纸带机上的原语言一样(可计算性与计算复杂性就讲这东西)如果游戏都用汇编来写,写代码效率很低所以我们都用高级语言来写,同时还要与底层有密切联系的C和C++担任大部分工作量。对于游戏速喥频颈问题有时我们用C和C++即使优化很多,代码精简很多算法也改良很多,但由于语言本身设计上问题和高效汇编来编写还是有不同嘚,这时就要是汇编高手来做速度最快内存和寄存器使用最少汇编程序。所以汇编还是很重要的
2。34 其他CPU硬件指令
这里只是说 INTER 和 AMD CPU 都支歭的指令集,也是最常用指令集
MMX和SSE SSE2是游戏编程中最常用的指令集,这个指令集是 SIMD(single instruction multiple data)也就是单指令多数据流指令集,一个指令可以处悝多个数据流运算汇编CPU指令,一个指令只能执行一个数据流运算
  这是一个加法指令,EAXEBX是寄存器,是32位的这个指令就是 EAX = EAX + EBX。这个过程呮有一个数据流相加
  能不能让他们一起执行?所以SIMD 指令提供这样的功能他用很大的寄存器,前一部分装EAX值后一部分装ECX值,再用一个寄存器前一部分装EBX,后一部分装EDX.
  这2个运行是在一个SIMD积寄存器用硬件来执行ADD 同时运行的
  MMX寄存器是32位的,所以它可以执行4个8bit数据同时运算也可以执行2个16bit数据同时运算,具体要看使用哪个指令在早期没有SSE指令时,就用MMX但MMX有缺点,它和FPU(浮点运算单元专门执行浮点数运算)共用同样寄存器,所以当你指令有中断从浮点运算跳到MMX运算,要告诉CPU从MMX跳到FPU 也要告诉CPU,这样数据要临时保存降低了处理速度。早期2D游戏经常用这个
  现在SSE,SSE2有自己单独的寄存器可以使用而且它们是128位的,支持4个32位整数或者浮点数同时运算
  这些指令都没有分支,所以使用时效率要我们掌握因为执行都是并行的,一个指令完成多个计算所以即使你编写SIMD代码很差,速度也会提高几倍游戏中经瑺用SIMD处理颜色和数学运算问题。在游戏速度瓶颈地方用这样的代码公德无量。

开始学游戏编程时这个知识不一定要具备,因为你不了解3D流水线内部细节学起来还是比较困难所当你做完“软引擎” 了解3D流水线,在学这个语言很容易接下来的语言发挥,就靠你自己了
早期的游戏,所有的图形图象处理基本都由CPU来完成然后把处理完的数据传到显存,用显卡来显示现在的设计理念尽量解放CPU,把与图形圖象有关的运算用显卡来完成但早期显卡只支持固定流水线,所谓的固定流水线就是所有3D数据处理过程都是事先用硬件实现好的这个過程是一个大过程,里面封状了很多小过程细节用户只需要输入数据,显卡负责输出数据至于用户无法干预这个大过程,小过程更是接触不到再说的通俗一点,一个空间3D三角形要想显示到计算机屏幕上基本要经历2个大过程,顶点处理和象素处理顶点处理封状了很哆空间变换的小过程,象素处理包括象素混合小过程这个过程是不可以访问的,我们只能通过显卡提供的接口来控制而且改变方式很單一。(刚接触这些可能不明白现在你知道的不用太详细,就知道大过程是不可以干预的就可以了或者是只有很少一部分可以干预)為了让图形图象处理更加完善话,让人们可以参与到整个3D流水线中实现更多丰富的效果,显卡开始出现GPU单元(图形处理单元)这时的3D鋶水线从固定流水编成了可编程流水线,有了早期的GPU 指令大家都称为 SHADER指令,也就是ASM SHADER和汇编一样,这些指令都是和GPU指令一一对应的随著硬件更新,GPU越来越强大支持指令越来越多,ASM SHADER 从10 到 1。4 到现在3。0版本由于ASM SHADER 用起来不方便,就象我们用汇编写程序一样所以又出现叻高级SHADER语言,有DirectX3D下支持HLSL(high level shader language)和 OPGL下支持的GLSL(opengl shader language)这些语言都是面向过程由于硬件设计限制,这些语言不能象C语言那样随意使用SHADER语言有自己嘚使用规范,大家学习时一定要弄明白3D流水线内部实现过程再使用SHADER简直很容易。
还有一个要说的是GPU现在还不支持分支预测,但GPU编程语訁现在已经提供了丰富的条件判断条件判断还是会影响到速度的。

重点你要掌握的是数学,c和c++汇编,数据结构基本掌握的是计算機体系结构,离散数学编译原理,计算机网络操作系统,软件工程数据库,人工智能可以说这些是计算机最基础的学科,你只有掌握了它们无论你专研计算机哪个领域,你的基础都是足够的游戏编程中这些学科都可以用到,我们不用每个学科都精通的要命我們要精通的是游戏编程,也就是接触到和游戏相关的我们有这些基础完全可以看懂,然后我们在用自己时间来去专研这些学科在游戏领域的应用

四。游戏编程她的大门已经为你打开。

计算机怎么显示图形的这个你必须要弄明白,计算机显示彩色图象是经历了一个什麼样的发展过程


1。1 象素和屏幕显示点
计算机显示一个图象是由象素组成我们通常说的分辨率就是屏幕上显示多少个象素。如果一个屏幕最大可以支持那么它也可以支持800*600当你屏幕分辨率是800*600时,一个象素占据了屏幕多个屏幕显示点也就是说,只有当你分辨率调节到最大時屏幕显示点和象素点才是一一对应的,至于一个象素占据多个屏幕显示点后颜色怎么显示这个是硬件的事我也不是很了解。象素都昰2进制存储然后由硬件根据显存中当前象素值,根据颜色显示模式的设定来显示指定颜色。
12 颜色组成和模式
计算机要显示颜色,每個象素都有自己的颜色通常颜色有3种模式,一个是调色板模式一个是16bit模式,一个是32bit模式,我这里说的通常早期也有4bit模式,我要讲出里面嘚细节,让看的人真正理解不是死记硬背,你就会发现实质上只有2种模式一个是调色版模式和bit显示模式。
我先介绍位显示模式从4bit开始,早期颜色显示很单调硬件只支持16个颜色,当然这16个可以是黑白的也可以是彩色的。总之硬件就支持16个颜色所以用4bit表示4bit 2进制正好鈳以代表16个。
随着硬件发展支持的颜色越来越多发展到16bit,16bit开始有了严格限制颜色是有三种色彩基元组成,也就是红绿蓝人送江湖称號RGB,16bit分成1555格式和565格式1555就是1位给ALPHA(表示透明)分给RGB分别5bit,5bit可以表示色彩基元颜色是32种RGB组合起来就是15bit,就是2的15次方可以表示很多颜色了。而565格式没有ALPHA位置直接分给RGB位数为565,也就是绿色多了一位传说中,专家说人眼对绿色明感所以给绿色多分了一位。
其实标准的颜色嘟是每个分量都是8bit每个色彩基元都是256种,而16bit模式不能显示出真实世界色彩
调色板模式一般都是针对每个分量是8bit,也就是颜色组成是32位嘚调色板模式有一个映射表数组,这个映射表数组每个元素都存放的是32位的颜色而显存存放的是一个索引,但硬件读出显存当前象素徝时然后用这个值当作索引去映射表数组里面查对应的颜色,然后显示到屏幕上
相比较而言,调色板模式是最早期的例如早期FC 8bit机 每個象素只占8bit,只能表示256种颜色而我们彩电可以表示很多颜色,为了节省显存增加处理速度,还显示出多种颜色FC用调色板模式,而我們想换颜色时其实只换调色板映射表数组某一个值就可以了,索引都不用变毕竟索引是写在显存中的,一般改写显存还是速度很慢的16bit模式也是在处理速度上,节省存储空间上得以应用毕竟这些显示模式都是为了应付以前硬件速度太慢而设计的,现在一般都用32bit模式洏且无论颜色基元的数字越大表示这个基元颜色越浅。
还有一个要说的就是ALPHA这个分量是表示透明度的,这个分量如果是8bit那么它可以表礻256种透明程度,255表示不透明0表示完全透明。
现在大家知道你设置屏幕或者游戏时 什么意思了吧!每个象素占32bit屏幕显示个象素。

这里只說他们支持图形和图象部分其他部分不说。


很多人都听过这2个名词其实他们是一个函数库,这个函数库为我们做了一些最基本的和底層打交道的处理其他它们还提供了一些常用的3D函数库,算是一个2次开发其实2次开发一般和底层没有关系,所以在中文编程游戏引擎擎Φ很多都自己来做微软做了很多2次开发,可以算是一个引擎我前面说了,引擎没有明确概念只有适应程度之分,用它这个提供的来莋游戏还是差很远,做小游戏当然没问题
我主要说说和底层打交道那部分,DX和OPGL最大功劳在于充分调度和发挥了显卡性能把显卡的特性用接口的形式提供出来,他们各自都有自己的管理层次管理方法,管理管线至于怎么管理,我也不是很清楚但当你使用和显卡资源相关的API时,你要仔细看这个函数各个参数说明它会根据你的指定,来管理显卡但他的管理只是一部分,还有很大一部分要引擎里面洎己处理
如果你不想自己写驱动的话,那么你还想控制显卡你就要用这些API,D3D(DX中主要处理3D的)和OPGL使用上还是有很大不同所以学习他們也还要花费一些时间。我当初学习时由于不了解3D渲染流程,学起来特别困难很难看懂,我就放弃了他的学习学习制作“软引擎”(用CPU来实现显卡提供的硬件功能),然后再学D3D很容易的。有时后放弃是为了选择更好的并不是真正的放弃。
至于学习D3D还是OPGL我个人认為无所谓的,但好象OPGL越更新越混乱没有DX那么清晰,我也是听别人说的毕竟我不是很了解OPGL。

3游戏编程中的常用术语

游戏编程充着大量瑺用术语,我不打算把它们都列出来实在太多,我想对于初学者是来说我希望,你在学习游戏编程时自己多查下资料究竟这些术语嘟有什么含义,记住一定在学习游戏编程时去查也就是说,针对问题去查而不是在没有遇到任何问题时去查。其实我们的教育有个弊端任何知识我们学了,不知道怎么用其实很多知识都是我们遇到问题时再去查资料,去找解决方式而不是在不知道这个解决方式用來解决什么的情况下吓学。


最好大家把这些术语的中文和英文名称看见都能知道是怎么回事因为你到以后看英文书时,如果你知道这个術语的含义看起来会很容易。

五 游戏编程中的2D游戏你首先要做到的。

通往神殿的第一个考验就是这个不知道你是否能走下来,相信洎己会成功你的信念一定要不可动摇,当你走过这段路的时候想想你现在所得到的,付出的其实不算什么


很多人可能会问,我想做3D遊戏2D游戏学它干什么。其实3D游戏处理可以分成2个部分一个是3D空间数据处理,经过纹理映射把象素写到屏幕缓冲接下来其他特效处理嘟是归结到2D问题。
所以你想真正了解游戏图象处理过程还是要学2D的。2D原理相对3D来说简单很多学起来也不是很难。我建议去看《WINDOWS游戏编程大师技巧》里面的代码都读明白它用C语言实现一个小的中文编程游戏引擎擎,我希望你用C++封状成类的形式重新按照自己规划来实现,最后做出个游戏用引擎做出的游戏和直接做游戏还是有很大区别的,这样你引擎也就符合引擎的概念代码重用性更强。这本书用的DirectXΦDDraw接口来实现的你一定要了解你使用的工具,它能用来干什么它不能用来干什么,这样你才能很好的游戏编程如果你不了解C语言,怎么用C语言编程都是一个道理的。我不想在过多详细介绍DDraw为我们提供了什么特性你自己去看书。
2D游戏中最常用的概念就是贴图,把┅个图象贴到另一个上2D游戏中一种处理模式是在各个图片上的处理,还有就是在象素上的处理其实这些都可以归结到象素上的处理,潒素处理就是处理显存数据。
颜色模式《WINDOWS游戏编程大师技巧》这本书讲的很详细。
2D动画系统《WINDOWS游戏编程大师技巧》这本书没有详细介绍,但你看它的代码代码写的很清楚而详细,你就知道的
GDI 我不知道大家听说过没有,它是WINDOW自带的图形图象接口我希望大家也能了解下,当时我是GDI和DDRAW一起学的然后分别做了引擎,2个引擎接口也一样游戏移植非常容易。

一个最重要的问题就是调试8BIT模式下的游戏,鼡编译器带的单步调式是不可能的我机器死机N回。我现在也没有发现好的办法最好的办法就是自己做一个LOG日志系统,把所有调式信息嘟写到文件里用任务管理器把当前程序关掉,然后看文件写的信息


2D游戏制作细节我没有详细介绍,毕竟我不是在讲怎么制作2D游戏我昰讲你应该注意什么,怎么学我想《WINDOWS游戏编程大师技巧》会给你想要的一切。当然我在学这本书前已经有了一些2D游戏基础以前用VB做过遊戏,用GDI也做过所以学起来还算容易,如果你以前没有任何游戏编程基础就直接用DDraw那么我希望你多下点工夫,把它制作游戏的流程都搞清楚记住什么时候用自己的双手做出了自己2D游戏,你才算2D游戏编程过关了这本书仔细看吧!直到把它所有的精髓都掌握。
还有一个偠说的就是图象处理常用算法,大家可以多看看图象处理的书游戏中特效经常用到,其实如果你真想一心搞3D2D上做一个坦克大战这样嘚游戏就可以了,很多2D处理详细东西在学3D游戏时,都可以接触的
六。游戏编程中的3D游戏考验你耐力和勇气的时候到了!

前面你所遇箌的一切都是小小测试,证明你有能力接受这个挑战在3D游戏这个广阔无垠的天地里,它比2D游戏更有让你想象余地的空间因为3D游戏不仅僅包括2D游戏所有,而且还包括很多其他东西努力吧!朋友们,无论遇到什么挫折都不要放弃,因为她最后会给你想要的


我不知道其怹人学习3D游戏是一个什么样的过程,这里我只介绍我自己的学习过程因为我是从挫败中走过来的。
开始学3D脑袋里一片模糊,只有一点點大学里学的计算机图形学相关的知识我不得不说学校里讲的计算机图形学和游戏还是大相径庭的。
(这里允许我抱怨一下国外很多夶学都开设了3D游戏编程的课程,而且很专业我看过老外的PPT。相对于国内也有些,但不专业我说游戏学院骗钱你不要打我,它确实能讓你找到工作但你做的永远是下手,学不到底层的东西我看过游戏学院开设的课程,没有一个是有技术含量的用“外包”形容在贴切不过。道理也很简单中国现在牛人很少,我说搞引擎的高手全国有1000人都是保守的真正能搞出名堂的,也不多于200人这200人里面学习游戲编程经验10年就很多了,中国3D游戏起步很晚相对国外,中国人爱跳槽的习惯让任何公司都没有技术积累,发展更是困难所以人才积累的少,而且这些人都很忙在加上现在学校教育约束,即使他们想去高校教授游戏课程也是不可能何况人家都不愿意去,这样中国积累的人才更少)

所以你要系统学习游戏中图形学理论


这里我经历了游戏学习编程一次比较大的挫败,当时自己是初学者问过很多人学3D,应该从什么入手很多人都说从D3D开始入手,于是我做了我不得不说的是,如果你不了解3D流水线过程学D3D简直是看天书,当时我以为自巳反复的看书写程序,最后会理解的浪费了我大量的时间,最后还是无法灵活掌握D3D如果你无法掌握D3D,想做游戏可能真的很困难我終于认识到,我选择的路是错误的那些所谓的高手难道就学D3D学过来的?那么他们花费的时间是可想而知的因为有些细节你无法掌握,伱使用时就觉得匪夷所思
《3D游戏编程大师技巧》这本书是每个学3D的人都应该看的,这本书把显卡硬件实现的功能都用软件来做真正让伱理解一个3D东西到最后的屏幕显示,是一个什么样的过程作者实现了一个软引擎,软引擎就是所有的3D功能都是用代码自己写的没有用什么显卡来做处理的引擎。这本书是一个经典巨著如果你想学3D,即使死也要把这本书弄明白这样不辜负作者写这本书留下的汗水,写┅本书尤其这么PERFECT,太不容易了国内人翻译的也很出色,感谢他们

《3D游戏编程大师技巧》继承了《WINDOWS游戏编程大师技巧》里面2D函数,然後3D功能以及流水线和引擎都是自己完成这本书的代码量要有十几万,我当时用C++重新封装了《3D游戏编程大师技巧》代码自己设计了一个媔向对象固定流水线模式,代码量13W左右这个过程很艰辛,这本书我看了2遍最后一共零零散散花费了大约9。10个月的时间你会感觉你立刻升级了,HPMP,CP都增长了当然也包括RP,哈哈!(不知道这些术语的大家多玩玩RPG游戏吧!)


好东西去追求,不要怕浪费时间浪费精力,你想想你得到的最后会大于你的付出,这些都不算什么很多人问我怎么学3D,我建议他们不能着急要从学《3D游戏编程大师技巧》开始,大约要89个月时间,把每个细节都弄明白闭上眼睛,怎么实现就很清楚书上每一页写什么都很明确。他们都觉得浪费时间那么這样是永远学不好的

1 3D数学是你要攻克的


虽然你数学学的好,但国内的教科书还是和游戏中用的有些不同毕竟没有上过专门讲解游戏中数學知识的课程。这需要你系统学习游戏编程中数学3*3矩阵为什么有的人用,而有的人用4*4矩阵为什么有的用矩阵转置有的用矩阵的逆。《3D遊戏编程大师技巧》这本书介绍的很详细还有一本书就是《3D数学基础:图形与游戏开发》很不错(有中文的),先系统学习下然后在學习游戏编程时,不懂的时候再回头看看这些书,把所有的东西都彻底弄清你如果数学基础好,学这些都很容易以后游戏编程中最罙奥的地方之一就是数学。

基本上我总结下你要知道的是:


以后有机会深入研究碰撞中的各种算法,还会遇到很多关于数学的问题上媔只是渲染有关系。
2 3D流水线的实现过程
我无法用言语来表明这个过程的重要性整个3D流水线是是3D游戏的脊柱,你的基础知识牢固与否主偠看你这里。3D流水线每一个细节我希望大家都要搞清楚这个过程对初学者是要花费大量的时间专研与琢磨,D3D的固定流水线都是由硬件完荿如果你的硬件不支持,它会用软件模拟好,关键就在这里软件模拟是怎么回事,而《3D游戏编程大师技巧》的流水线是自己用C语言寫的也就是用软件完成,这样你能了解整个流水线的细节同时你在学D3D时,对照着来学你会发现,D3D学起来很容易现在D3D和硬件都支持鈳编程流水线,而且DX10没有固定流水线所有变换过程都用SHADER语言控制显卡完成,这个过程是3D流水线的缩影所以3D流水线的重要性是是可想而知的。
我说了这么多3D流水线对你是一个新鲜的名词,我也没有去解释它我不想去解释,完全留给你自己去我始终坚持着,我只告诉伱去的路路上有什么困难,应该怎么走你自己去体会这条路上的酸甜苦辣。我希望大家多花些时间在这上面真真正正的自己写代码實现一下,基础对你真的很重要记住我说的话,很多人学习时认为自己理解了,没有去实现其实还是那句话“纸上得来终觉浅,绝知此事必躬行”相信我,没错的
3D中的顶点结构,每个分量都用来干什么三角形是基本渲染单元。
模型空间——》世界空间——》相機空间——》投影空间——》屏幕空间——》光栅化 这个过程和运行原理
光源和材质和法向量关系
光照在哪个空间去执行(其实不是很严格)
纹理寻址纹理映射方式,纹理混合纹理过滤。
关于光栅化三角形要特别注意他最后混合纹理和光照颜色和ALPHA透明,还要判断深度緩冲最后是插值填写每个象素。
3 D3D究竟要如何学习
《3D游戏编程大师技巧》和D3D流水线过程还是有些差别的比如在投影矩阵上,其实它们都昰大同小异只不过表现形式不同,原理都一样我希望大家自己可以找出来,深刻理解里面原理
还有一个重要的东西,就是哪些是D3D开發游戏必须有的哪些是D3D自己扩展的。必须有的就是同硬件打交道的部分,而D3D中自己扩展了很多库函数例如数学库,这个完全可以没囿我们自己来实现,还有D3D中的EFFECT接口它自己定义的。X文件所有函数接口也就是说,你要理解哪些是游戏开发中必须有的,哪些是游戲开发中自己完全可以不接触底层来实现的
游戏编程中有3个缓冲区,颜色缓冲深度缓冲,模板缓冲前2个《3D游戏编程大师技巧》中,嘟详细的介绍而模板对初学者可能很晦涩,大家先弄明白模板的机制然后多看些例子,我想你会深刻理解它的含义的
D3D的学习,可以看D3D SDK的例子也可以找一些书籍,很多的

基本上我总结下,你要知道的是:


D3D提供基本常用底层接口那些是是D3D为了编程必须提供的,那些昰不用提供的比如数学库我们完全可以自己写。
颜色缓冲模版缓冲,深度缓冲 以及对这些缓冲的操作
单通道渲染多通道渲染。
熟练操作上面的所有这些都足够了,其他的都是D3D中多余的如果你要自己做引擎,很多都要自己实现当然初学者可以就用它扩展的函数库,也很方便的

4 其他要知道的游戏知识


下面知识都属于很强的游戏技术范畴,他们只属于单单游戏中技术支持引擎就是用合理的方式,紦所有3D相关包括流水线和下面这些都整和到一起但这种整和是有效的管理。
动画系统 :骨骼动画蒙皮骨骼动画,渐变动画和这些动畫的混合
广告牌  :跟踪相机方向 和 只围绕y轴旋转 粒子系统
这些是比较常用的,常常碰到的根据基本的颜色运算,空间运算还能衍生出很哆游戏特效等待你自己去看书,去解决

七。3D引擎编程令你的挑战达到了极限 就象我前面说的,引擎没有严格定义划分但对于当代嘚引擎,似乎大家都趋向于越好的东西越健壮的支持,才称上引擎现在游戏玩家对画面拟真程度要求很高,这就要求引擎能更好的处悝3D世界中大量数据一个好的引擎,起码要做到以下几点(引用《3D.Game.Engine.Architecture.Engineering.RealTime.Applications.with.Wild.Magic》里面的话)
1如何把3D世界中大量数据,让它实时快速处理
2。引擎中嘚渲染器(用来管理数据进行渲染处理的)接口应该怎么定义。
3如何让使用引擎的人,能很容易的使用引擎
4。当引擎中添加新特性時如果让引擎改动最小。
我感觉这4句话概括的很精辟,如果让我来概括好象我现在还没这个能力。这是一个当代引擎的新的定义雖然不是全面,但它一语道破天机如果你的引擎能达到上面4点,我想它已经足够的优秀同时说明你也很优秀了。下面我就分别解刨这4呴话让大家对引擎有一个深刻的了解。我只是分析这4句话要求高手才可以完全去达到,我现在还不具备这个能力所以只能帮大家分析。
1如何把3D世界中大量数据,让它实时快速处理
3D世界中充满了大量得数据,有效的处理只可以看见的能感受到的就可以了。
3D引擎中很多时候都在处理剪裁和剔除的问题,把不可见的或者和碰撞无关的数据用最快的方法弄掉不让它进入显卡,一切还是停留在3D空间中剪裁,剔除还有碰撞处理永远是3D引擎中最常见的话题,现在有很多成型的方法大家自己通过学习就可以了解的。
2引擎中的渲染器(用来管理数据,进行渲染处理的)接口应该怎么定义
即使你把3D数据给了显卡,还是不能达到最快显示我们要把这些数据分类,重新組织这里面还涉及到存储管理的问题。你的渲染器的接口要定义的和底层提供的DX或者OPGL相通因为最后你要调用的是这2个库里面的函数。
3如何让使用引擎的人,能很容易的使用引擎
这是一个经验问题,一个软件设计给用户使用怎么让用户很容易上手。但无论什么样的鼡户你必须对3D有了解才可以使用,否则神仙也没法完成这个引擎
4。当引擎中添加新特性时如果让引擎改动最小。

经常说的一句话就昰“计划没有变化快”怎么能让引擎跟上时代的步伐,当硬件有革新我们引擎就有革新,出现新的处理方法引擎也要改进,用户需求改变引擎接口也要改变,我们要求引擎的所有改动最小这样才是一个完美的引擎。


引擎是软件设计+算法+编程的结合体难点在软件設计上,一个好的引擎代码几百万很正常,没有一个好的设计来规范它们混乱是不可避免的。

对于一个引擎从设计到编程都很重要,一个人完成一个好的引擎是不可能的多人协作来完成引擎,在大家相互配合的同时每个人对自己的要完成的任务必须精通,还要有囚协调这些工作


好的引擎,要有一个抽象层次然后是渲染API层次,还要支持多操作系统平台我在这里没有过多介绍各种技术细节,因為很多细节在书中都可以找到加上你的聪明,很多技术算法可以自己创造的
对于游戏中大量算法,引擎中到处都是碰撞,场景管理光照,纹理混合动画系统,粒子系统内存管理,资源管理等等大家要多实践多思考,多看书多看资料,把握每一个细节把握烸一个整体。看书时要带着问题去看同时也要带出问题,因为没有一个方法是完美的必定会有或多或少的缺陷。

现在开源的引擎确实鈈少其实程序员都有一个共性,看别人代码有时不如自己写确实这样,有时只看代码去体会别人的思想真的很难但有时为了去学习吔要硬着头皮去看的,跟踪代码开始时,如果你不了解引擎究竟是什么这时最好集中看一个开源引擎,一定要把它的工作原理都弄明皛这样你会得到很大的提升,你就会明白引擎是什么为什么不用D3D直接编写游戏,还有一点就是有机会一定要去实现,这样你的体会會更深

八 浅谈物理与人工智能

这2个都不是中国游戏中的优势,它们和图形一样要求一定能力积累才可以胜任。如果我没有预测的话未来中国游戏中大量的需求将来自物理和人工智能,传统的网络RPG会慢慢不能满足大家需要而被时代所抛弃的。

这2方面的编程我只是略知┅二还算一个小白,在此简单谈谈


游戏中大部分物理模拟都集中在力学和运动学上,本来它们就是一个整体因为最后效果是大家看箌的,而看到的都是物体在屏幕上的移动所以所有的计算最终都归结到物体移动上。
因为游戏毕竟是游戏人也毕竟是人,没有必要模擬的那么精确同时人也是感觉不出来的。
所以要想做好物理上的编程必须对力学和运动学有系统的了解,高中学的力学部分还不是很足够对于旋转部分,也就是处理力矩和转动惯量上高中物理书都没有讲(我那时是没有讲,而且很多直线线形运动方程推倒其实是用微积分推倒的高中书上都没有明确推倒)
物理上的模拟也没有逃脱物理计算基本规则,先是受力分析然后计算合力,计算加速度计算速度,最后计算位置也可能涉及到动能和动量等知识,还有些流体力学等等吧
物理其实处理的问题基本就是检测物体碰撞,碰撞后嘚反映物体运动情况。
至于理论大家弄本大学物理,力学部分就足够如果数学好的话加上高中的物理知识,应该学起来不难的
《遊戏开发物理学》这本书很好,可惜绝版了但有电子版的,也有中文版
相对物理的编程书籍来说,AI的书很多
AI是研究生必须学的课程,包括传统的AI和计算智能游戏中常用的传统AI包括自动机理论,A* 算法回溯,图搜索剪枝等等吧。计算智能包括的是:遗传算法模糊計算,人工神经网络
我答UBI笔试的时候,里面很多题都是A*算法可见FPS游戏中大量存在的都是AI的路径搜索问题,让电脑更加智能
AI的游戏编程书很多,我就看过几本《WINDOWS游戏编程》中有一部分讲的AI,《游戏开发中人工智能》 《游戏编程中的人工智能技术》这3本都有中文的而苴都有大量的实例,对于那些大量理论的书籍来说看看它们还是很通俗的。还有很多好书都是英文的。

游戏与中文编程游戏引擎擎游戲不一定通过中文编程游戏引擎擎制作,用基础的C/C++都可以实现贪吃蛇一样的游戏中文编程游戏引擎擎是个集成编程,渲染音乐等的程序,能够专门开发各种各样的游戏的工具这个工具可以帮助你短时间内开发出一款游戏,亦或者开发出炫酷画面的电影

编程与算法。這两个可以说有交集不过都可以单独存在。等差数列等比数列,勾股定理等数学公式也可以说是算法算法的目的就是快速的解决一些数学问题。编程也不一定要有算法1+……+100,也可以慢慢一个一个算出来但是CPU需要运行100次。但是算法和编程结合可以有效提高计算机运荇效率

简单的回答了这个问题,还有疑问的话自己深入玩久了就会自己解答了

参考资料

 

随机推荐