java游戏开发要学什么如何学好呢?

今天偶然发现一篇介绍如何学好游戏编程的文章&
&&&&&&&&&&&&《如何学好游戏编程》
&此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战
自我,超越自我,这样才能攀登到游戏技术的最高峰&&&
&&&&&&&&----阿哲VS自己
&这篇文章我写了大约4个月,前后修改很多次,做为吉大的学生,毕业前给学弟,学妹,
留下的最后一个文章,也是我去年在《如果学好编程》中承诺过的。 这个是我建
立的吉大游戏编程群,我准备解散,重新建立,希望真正热爱游戏编程的人进入,我会定
期清理这个群.以后我工作了,我会尽最大努力,解答学弟学妹们关于游戏编程方面的问题
。毕业前我会把我所有的游戏编程书籍和代码整理后发到燕子BT上(空间要留足够大,估计
要5,6个G),到时候我会在群里通知大家。
&找工作这段时间是我这三年来最难熬的,我跑遍了中国的大多数游戏公司,这段时间的辛
酸我就不说了,更多的时间是在等待,找过工作的人大多都能体会这是一种什么样的心情。
这个世界没有完美的,地点和户口,薪水和待遇,发展和兴趣,或多或少都要放弃一些,
听了很多人的分析后,放弃了地点上的考虑,只要人是活的,地点我相信不会是问题。
&&&&&&& 这段时间遇见很多牛人,我才发现自己是多么渺小,他们给了我很多建议,告诉
了我的不足,我学会了很多东西,这些都是很宝贵的财富。同时很多人给了我太多的帮助
,在这里,阿哲感谢所有帮助过我的人,谢谢你们,没有你们我办不到的。
&&&&&&& 我一共去了6个公司,腾讯,UBI,巨人,盛大,完美,金山,文章最后我会把这
6个公司各个方面情况介绍下,如果你以后想去游戏公司,我想它们对你会有帮助的。
&在这感触颇深的岁月里,我总结出2句话:
&“大学生在学校里是最猖狂的,其实你不知道,你是社会上就是最弱势的”
&“多帮助别人,别人帮助你要学会报答人家,对于那些你帮助的人,连声“谢谢”都不说
的,你没有必要以后再帮助他”
&本人不才,姑且以自己经验来谈如何学游戏编程,这个话题我酝酿了很久,它确实很难写
,因为我也不是资深高手,才刚刚登堂入室,游戏编程大师功力一般都十几年左右,所以
让我这样的小卒写的深入浅出更何谈容易,错误出现并不奇怪,高手见笑也在所难免,请
大家指正,我会欣然笑纳。但这几年走过的路,让我知道这么学是正确的,大体过程经验
告诉我,这样做是对的,高手的指引告诉我,这样做是对的。
&这篇文章主要讨论如何学习游戏图形编程和游戏引擎编程,告诉没有接触游戏过编程或者
现在关于怎么学好游戏编程还迷惑的PEOPLE所要走的方向,完全抛开技术和代码实现进行
谈论。至于游戏逻辑这几年重点没有发到这个上面上,很难总结。
&对于游戏中的网络,我个人认为不算游戏编程范畴,可能有人和我意见不一样,只不过我
们把游戏编程定义不同罢了,虽然现在游戏离不开网络,毕竟它只负责数据传输,和游戏
内涵没有任何关系(这里的内涵指的我们可以看见和感受到的游戏氛围)
&经验的限制,对于如何编写一个好的引擎(至于“好”这个词都是相对而言,能做的满意
就是我所期望的),至今为止我还没有这个能力,但我相信经过我的努力,不久的将来,
我会实现这个愿望,因为我的一个愿望就是实现一个好的引擎。
&我从下面几个方面来说明如果学习,记住只是如何学习,要想学好就要靠你自己。
&1。 你真的喜欢游戏编程吗?
&2。 要了解游戏编程
&3。 学会读书,自学与思考,交流与合作
&4。 游戏编程需要的基础知识
&5。 2D游戏编程
&6。 3D游戏编程
&7。 游戏引擎编程
&8。 我的游戏编程生涯
&9。 游戏编程相关书籍介绍
&10。浅谈游戏物理和AI
&11。各大游戏公司招聘和一些招聘经验
&一。游戏编程,你真的爱她吗?
&当你听完我的介绍后,你就要决定游戏编程是否适合你。
&游戏编程可简单可复杂,简单的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 S& 这个指令表示打印S
&S代表一个万能类型。
&为了实现这个指令,你首先要有一个函数来负责处理打印
&比如是这样的函数
&void print(S)
& &&cout&&S;
&这里只是伪代码,只是表示这个意思。
&你首先要找出PRINT这个单词,读入到一个buffer1,然后把参数读入buffer2
&if(buffer1 == PRINT)
&&print(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。游戏编程所需要的基础知识
&我这里介绍下要做一个好的,称职的,游戏程序员所需要。学习就和盖楼一样,要想上层
建筑牢固,你就要有坚实的基础,我这里介绍的基础是你从事游戏编程最基础,基础的不
能再基础的东西。
&2。1 数学
&数学是游戏中支柱,没有了它,任何都不要谈,在你编写你游戏的时候,你就会知道,世
界抽象成一堆数学是多么的神奇,突然你会觉得以前枯燥无味的数学现在是一顿大餐,但
这个是霸王餐。国外人写关于引擎方面书的人,都可以说是数学高手,他们理论和实践都
很厉害,让我崇拜的不得了。大学里是你学好数学的最好机会,一定要弄明白它的现实意
义,任何理论都不是凭空出来的,它一定有现实基础,这个现实基础,就可以帮助你很好
理解这个理论。
&2。1。1高等数学----微积分理论
&在游戏引擎中,很多游戏特效都是通过微积分方程来解得的,高度仿真是现在游戏的追求
,真实感越强就需要越多的计算量。极限,一元微积分,多元微积分,级数,微分方程等
等在游戏图形图象和物理上都有明显体现。有时一个硕士或者一个博士为了拟真一个效果
要花费几个月或者几年的时间,做为一个游戏程序员,微积分到达什么层次我很难给出定
义,但起码如果别人给出了原理我们能看明白,并把它实现,我觉得就很可贵了。
&2。1。2线性代数和空间解析几何
&在大学课本中,空间解析几何是放在高等数学书里面讲的,但游戏中,它和线性代数放到
一起我认为更加合适。线性代数所有知识都要掌握,在游戏中它们比微积分体现的更淋漓
尽致,理解上我个人认为相对微积分更容易。
&空间解析几何主要讲向量,平面,线,体,这些东西并通过线形代数矩阵进行空间变换,
最后达到游戏想要的目标。
&2。1。3四元数
&这个在大学里面不学数学的,估计很少有人接触,它也是来用来变换空间,理解起来不是
那么容易,但最常用的就是用四元数来表示旋转。
&我这里只是一概而过,上面任何知识在游戏中都有应用,但大学里的数学不是为了游戏而
开设的,所以和游戏中用的数学在知识分列和讲解上还是有很大差异,尤其是线性代数和
空间解析几何,不用担心,我在后面介绍给大家一些好的游戏书籍,对大家学习游戏编程
和有帮助的。
&编写游戏c和c++是你首选,相对来讲C++是你更应该掌握的。
&2。2。1 其他语言为什么不是当今流行的编写游戏程序语言?
&VB,J***A,C#,等等其他语言,并不是说它们不能做游戏,它们能做,由于语言本身设计
机理的限制,只能做一些对游戏速度要求低的游戏,对于运行速度要求高的游戏,它们被
判成死刑。当然这个也取决于硬件的发展,以前8bit FC游戏都用C语言和汇编来写,现在
由于硬件速度提高,用VB,J***A,C#来写这些游戏运行也是可以的,例如现在兴起的WebG
ame(网页游戏)。但如果你真想做游戏的话,你一定想要了解现在最流行游戏编写,C和C+
+是你最好的选择,也是你走上真正的游戏编程道路的重要武器。
&2。2。2 C和C++应该选择那一个?
&C和C++,这里面我还要说一说,我个人更看好C++。大家都知道C是面向过程的,而C++是
面向对象的,虽然C++的面向对象特性还不是很完善,但出于对大型软件设计上的考虑,因
为游戏引擎是大的工程,框架设计远远要比编程重要,一般框架设计用面向对象方式更直
接,所以C++比C更有优越性性,而且如果你合理用好C++,并不见得C++比C速度慢。有时一
个软件架构和软件运行上问题,很难取舍,对于大应用程序来说,都是一点点牺牲速度来
获得好的架构,是利大于弊的事情,这里确实体现软件工程的重要性质。
&2。3。3 汇编,很重要吗?
&汇编语言也是你要掌握的,你说你语言学的好,但却不会汇编,是一个天大的笑话。现在
很少有汇编高手能写出比编译器优化出来的汇编代码运行效率要高,因为语言的不同,思
考问题的方式就会有不同,就象最早纸带机上的原语言一样(可计算性与计算复杂性就讲
这东西)。如果游戏都用汇编来写,写代码效率很低,所以我们都用高级语言来写,同时
还要与底层有密切联系的,C和C++担任大部分工作量。对于游戏速度频颈问题,有时我们
用C和C++即使优化很多,代码精简很多,算法也改良很多,但由于语言本身设计上问题,
和高效汇编来编写还是有不同的,这时就要是汇编高手来做速度最快,内存和寄存器使用
最少汇编程序。所以汇编还是很重要的。
&2。3。4 其他CPU硬件指令
&这里只是说 INTER 和 AMD CPU 都支持的指令集,也是最常用指令集。
&MMX和SSE SSE2是游戏编程中最常用的指令集,这个指令集是 SIMD(single instructio
n multiple data),也就是单指令多数据流指令集,一个指令可以处理多个数据流运算。
汇编CPU指令,一个指令只能执行一个数据流运算。
&&ADD EAX,EBX
&&这是一个加法指令,EAX,EBX是寄存器,是32位的。这个指令就是 EAX = EAX + EBX。
这个过程只有一个数据流相加。
&&而SIMD思想是,如果现在有2个指令
&&ADD EAX,EBX&&
&&ADD ECX,EDX&
&&能不能让他们一起执行?所以SIMD 指令提供这样的功能,他用很大的寄存器,前一部分
装EAX值,后一部分装ECX值,再用一个寄存器,前一部分装EBX,后一部分装EDX.
&&SIMD 寄存器分成2部分[1部分][2部分]
&&SIMD ADD 指令& 积存器1& ,积存器2
&&运算过程为 寄存器1 [1部分] = 寄存器1& [1部分] + 寄存器2& [1部分] ;
&&&&& 寄存器1 [2部分] = 寄存器1& [2部分] + 寄存器2& [2部分] ;
&&这2个运行是在一个SIMD积寄存器用硬件来执行ADD 同时运行的。
&&这里只是说了SIMD思想,现在简单介绍下 MMX,SSE,SSE2。
&&MMX寄存器是32位的,所以它可以执行4个8bit数据同时运算,也可以执行2个16bit数据
同时运算,具体要看使用哪个指令,在早期没有SSE指令时,就用MMX,但MMX有缺点,它和
FPU(浮点运算单元,专门执行浮点数运算)共用同样寄存器,所以当你指令有中断,从浮
点运算跳到MMX运算,要告诉CPU,从MMX跳到FPU 也要告诉CPU,这样数据要临时保存,降
低了处理速度。早期2D游戏经常用这个。
&&现在SSE,SSE2有自己单独的寄存器可以使用,而且它们是128位的,支持4个32位整数或
者浮点数同时运算。
&&这些指令都没有分支,所以使用时效率要我们掌握,因为执行都是并行的,一个指令完
成多个计算,所以即使你编写SIMD代码很差,速度也会提高几倍,游戏中经常用SIMD处理
颜色和数学运算问题。在游戏速度瓶颈地方用这样的代码,公德无量。
&2。3。5& ASM SHADER语言 和 高级SHADER 语言
&开始学游戏编程时,这个知识不一定要具备,因为你不了解3D流水线内部细节学起来还是
比较困难,所当你做完“软引擎” 了解3D流水线,在学这个语言很容易,接下来的语言发
挥,就靠你自己了。
&早期的游戏,所有的图形图象处理基本都由CPU来完成,然后把处理完的数据传到显存,
用显卡来显示。现在的设计理念尽量解放CPU,把与图形图象有关的运算用显卡来完成。但
早期显卡只支持固定流水线,所谓的固定流水线就是所有3D数据处理过程都是事先用硬件
实现好的,这个过程是一个大过程,里面封状了很多小过程细节,用户只需要输入数据,
显卡负责输出数据,至于用户无法干预这个大过程,小过程更是接触不到。再说的通俗一
点,一个空间3D三角形要想显示到计算机屏幕上,基本要经历2个大过程,顶点处理和象素
处理,顶点处理封状了很多空间变换的小过程,象素处理包括象素混合小过程。这个过程
是不可以访问的,我们只能通过显卡提供的接口来控制,而且改变方式很单一。(刚接触
这些可能不明白,现在你知道的不用太详细,就知道大过程是不可以干预的就可以了,或
者是只有很少一部分可以干预)为了让图形图象处理更加完善话,让人们可以参与到整个
3D流水线中,实现更多丰富的效果,显卡开始出现GPU单元(图形处理单元),这时的3D流
水线从固定流水编成了可编程流水线,有了早期的GPU 指令,大家都称为 SHADER指令,也
就是ASM SHADER,和汇编一样,这些指令都是和GPU指令一一对应的,随着硬件更新,GPU越来越强大,支持指令越来越多,ASM SHADER 从1。0 到 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。1 象素和屏幕显示点
&计算机显示一个图象是由象素组成,我们通常说的分辨率就是屏幕上显示多少个象素。如
果一个屏幕最大可以支持那么它也可以支持800*600,当你屏幕分辨率是800*600
时,一个象素占据了屏幕多个屏幕显示点,也就是说,只有当你分辨率调节到最大时,屏
幕显示点和象素点才是一一对应的,至于一个象素占据多个屏幕显示点后颜色怎么显示这
个是硬件的事,我也不是很了解。象素都是2进制存储,然后由硬件根据显存中当前象素值
,根据颜色显示模式的设定,来显示指定颜色。
&1。2 颜色组成和模式
&计算机要显示颜色,每个象素都有自己的颜色,通常颜色有3种模式,一个是调色板模式
,一个是16bit模式,一个是32bit模式,我这里说的通常,早期也有4bit模式,我要讲出里
面的细节,让看的人真正理解,不是死记硬背,你就会发现实质上只有2种模式,一个是调
色版模式和bit显示模式。
&我先介绍位显示模式,从4bit开始,早期颜色显示很单调,硬件只支持16个颜色,当然这
16个可以是黑白的,也可以是彩色的。总之硬件就支持16个颜色。所以用4bit表示4bit 2
进制正好可以代表16个。
&随着硬件发展支持的颜色越来越多,发展到16bit,16bit开始有了严格限制,颜色是有三
种色彩基元组成,也就是红绿蓝,人送江湖称号RGB,16bit分成;式和565格式,155
5就是1位给ALPHA(表示透明)分给RGB分别5bit,5bit可以表示色彩基元颜色是32种,RG
B组合起来就是15bit,就是2的15次方,可以表示很多颜色了。而565格式没有ALPHA位置,
直接分给RGB位数为565,也就是绿色多了一位,传说中,专家说人眼对绿色明感,所以给
绿色多分了一位。
&而32bit分给 ALPHA 和 RGB 分别是 8888,每个都是8bit。
&其实标准的颜色都是每个分量都是8bit,每个色彩基元都是256种,而16bit模式不能显示
出真实世界色彩。
&调色板模式一般都是针对每个分量是8bit,也就是颜色组成是32位的。调色板模式有一个
映射表数组,这个映射表数组每个元素都存放的是32位的颜色,而显存存放的是一个索引
,但硬件读出显存当前象素值时,然后用这个值当作索引去映射表数组里面查对应的颜色
,然后显示到屏幕上。&
&相比较而言,调色板模式是最早期的,例如早期FC 8bit机 每个象素只占8bit,只能表示
256种颜色,而我们彩电可以表示很多颜色,为了节省显存,增加处理速度,还显示出多种
颜色,FC用调色板模式,而我们想换颜色时,其实只换调色板映射表数组某一个值就可以
了,索引都不用变,毕竟索引是写在显存中的,一般改写显存还是速度很慢的。16bit模式
也是在处理速度上,节省存储空间上得以应用。毕竟这些显示模式都是为了应付以前硬件
速度太慢而设计的,现在一般都用32bit模式。而且无论颜色基元的数字越大表示这个基元
颜色越浅。
&还有一个要说的就是ALPHA,这个分量是表示透明度的,这个分量如果是8bit,那么它可
以表示256种透明程度,255表示不透明,0表示完全透明。
&现在大家知道你设置屏幕或者游戏时 什么意思了吧!每个象素占32bit,屏
幕显示个象素。
&1。3 颜色的运算
&计算机支持颜色运算都是无符号颜色运算,颜色没有负数,而且颜色运算有CLAMP和MOD
&如果每个颜色占8bit,颜色表示范围为0-255
&这里CLAMP指的是
&if(x&0) x=0;
&if(x&255) x=255;
&这里MOD指
&if(x&255) x = x%255;
&Color1(a1,r1,g1,b1) Color2(a2,r2,g2,b2)&
&颜色加减都是向量加减,每个分量做加减
&1。3。1颜色加法
&&&&&&& Color3(a3,r3,g3,b3) = Color1(a1,r1,g1,b1) + Color2(a2,r2,g2,b2) &&
&a3 = a1 + a2;
&r3 = r1 + r2;
&&&&&&& g3 = g1 + g2;
&b3 = b1 + b2;
&颜色加法一般都用CLAMP
&1。3。2颜色乘法
&Color3(a3,r3,g3,b3) = Color1(a1,r1,g1,b1) * Color2(a2,r2,g2,b2) &&
&a3 = a1 * a2;
&r3 = r1 * r2;
&&&&&&& g3 = g1 * g2;
&b3 = b1 * b2;
&颜色乘法一般都用MOD
&颜色加法和乘法在象素混合效果上经常用,有时为了到达一个效果,加法和减法混合用,
至于什么时候用加法,什么时候用乘法,没有严格的规定,还是要看效果,一般对于全局
光照模型颜色之间要用加法的,但其他光照模型可能不同,纹理混合或者纹理和颜色混合
,加法和乘法都有各自用途。
&2。Directx OpenGL到底用来干什么?
&这里只说他们支持图形和图象部分,其他部分不说。
&很多人都听过这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游戏编程过关了
。这本书仔细看吧!直到把它所有的精髓都掌握。
&还有一个要说的就是,图象处理常用算法,大家可以多看看图象处理的书,游戏中特效经
常用到,其实如果你真想一心搞3D,2D上做一个坦克大战这样的游戏就可以了,很多2D处
理详细东西,在学3D游戏时,都可以接触的。
&六。游戏编程中的3D游戏,考验你耐力和勇气的时候到了!
&前面你所遇到的一切都是小小测试,证明你有能力接受这个挑战,在3D游戏这个广阔无垠
的天地里,它比2D游戏更有让你想象余地的空间,因为3D游戏不仅仅包括2D游戏所有,而
且还包括很多其他东西。努力吧!朋友们,无论遇到什么挫折,都不要放弃,因为她最后
会给你想要的。
&我不知道其他人学习3D游戏是一个什么样的过程,这里我只介绍我自己的学习过程,因为
我是从挫败中走过来的。
&开始学3D,脑袋里一片模糊,只有一点点大学里学的计算机图形学相关的知识,我不得不
说学校里讲的计算机图形学和游戏还是大相径庭的。
&(这里允许我抱怨一下,国外很多大学都开设了3D游戏编程的课程,而且很专业,我看过
老外的PPT。相对于国内,也有些,但不专业,我说游戏学院骗钱你不要打我,它确实能让
你找到工作,但你做的永远是下手,学不到底层的东西。我看过游戏学院开设的课程,没
有一个是有技术含量的,用“外包”形容在贴切不过。道理也很简单,中国现在牛人很少
,我说搞引擎的高手全国有1000人都是保守的,真正能搞出名堂的,也不多于200人,这2
00人里面学习游戏编程经验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个月的时间。你
会感觉你立刻升级了,HP,MP,CP都增长了,当然也包括RP,哈哈!(不知道这些术语的
,大家多玩玩RPG游戏吧!)
&好东西去追求,不要怕浪费时间,浪费精力,你想想,你得到的最后会大于你的付出,这
些都不算什么。很多人问我怎么学3D,我建议他们不能着急,要从学《3D游戏编程大师技
巧》开始,大约要8,9个月时间,把每个细节都弄明白,闭上眼睛,怎么实现就很清楚,
书上每一页写什么都很明确。他们都觉得浪费时间,那么这样是永远学不好的
&1 3D数学是你要攻克的
&虽然你数学学的好,但国内的教科书还是和游戏中用的有些不同,毕竟没有上过专门讲解
游戏中数学知识的课程。这需要你系统学习游戏编程中数学,3*3矩阵为什么有的人用,而
有的人用4*4矩阵,为什么有的用矩阵转置有的用矩阵的逆。《3D游戏编程大师技巧》这本
书介绍的很详细,还有一本书就是《3D数学基础:图形与游戏开发》很不错(有中文的)
,先系统学习下,然后在学习游戏编程时,不懂的时候,再回头看看这些书,把所有的东
西都彻底弄清。你如果数学基础好,学这些都很容易,以后游戏编程中最深奥的地方之一
就是数学。
&基本上我总结下,你要知道的是:
&向量& 4维 和 3维向量有什么不同&
&矩阵& 4*4 和 3*3 矩阵有什么不同
&以后有机会深入研究碰撞中的各种算法,还会遇到很多关于数学的问题,上面只是渲染有
&2 3D流水线的实现过程
&我无法用言语来表明这个过程的重要性,整个3D流水线是是3D游戏的脊柱,你的基础知识
牢固与否,主要看你这里。3D流水线每一个细节我希望大家都要搞清楚,这个过程对初学
者是要花费大量的时间专研与琢磨,D3D的固定流水线都是由硬件完成,如果你的硬件不支
持,它会用软件模拟,好,关键就在这里,软件模拟是怎么回事,而《3D游戏编程大师技
巧》的流水线是自己用C语言写的,也就是用软件完成,这样你能了解整个流水线的细节,
同时你在学D3D时,对照着来学,你会发现,D3D学起来很容易。现在D3D和硬件都支持可编
程流水线,而且DX10没有固定流水线,所有变换过程都用SHADER语言控制显卡完成,这个
过程是3D流水线的缩影,所以3D流水线的重要性是是可想而知的。
&我说了这么多,3D流水线对你是一个新鲜的名词,我也没有去解释它,我不想去解释,完
全留给你自己去,我始终坚持着,我只告诉你去的路,路上有什么困难,应该怎么走,你
自己去体会这条路上的酸甜苦辣。我希望大家多花些时间在这上面,真真正正的自己写代
码实现一下,基础对你真的很重要,记住我说的话,很多人学习时,认为自己理解了,没
有去实现,其实还是那句话“纸上得来终觉浅,绝知此事必躬行”,相信我,没错的。
&&&&&&& 基本上我总结下,你要知道的是:
&3D中的顶点结构,每个分量都用来干什么,三角形是基本渲染单元。
&模型空间----》世界空间----》相机空间----》投影空间----》屏幕空间----》光栅化&
这个过程和运行原理
&材质究竟是什么?
&&&&&&& 常用的宏光照模型原理,光源类型
&光源和材质和法向量关系
&光照在哪个空间去执行(其实不是很严格)
&纹理寻址,纹理映射方式,纹理混合,纹理过滤。
&1D 2D 3D CUBE 纹理
&Z 1/Z缓冲
&2种相机模型
&ALPHA 透明
&关于光栅化三角形要特别注意,他最后混合纹理和光照颜色和ALPHA透明,还要判断深度
缓冲,最后是插值填写每个象素。
&3 D3D究竟要如何学习
&《3D游戏编程大师技巧》和D3D流水线过程还是有些差别的,比如在投影矩阵上,其实它
们都是大同小异,只不过表现形式不同,原理都一样。我希望大家自己可以找出来,深刻
理解里面原理。
&还有一个重要的东西,就是哪些是D3D开发游戏必须有的,哪些是D3D自己扩展的。必须有
的,就是同硬件打交道的部分,而D3D中自己扩展了很多库函数,例如数学库,这个完全可
以没有,我们自己来实现,还有D3D中的EFFECT接口,它自己定义的。X文件所有函数接口
。也就是说,你要理解,哪些是游戏开发中必须有的,哪些是游戏开发中自己完全可以不
接触底层来实现的。
&游戏编程中有3个缓冲区,颜色缓冲,深度缓冲,模板缓冲,前2个《3D游戏编程大师技巧
》中,都详细的介绍,而模板对初学者可能很晦涩,大家先弄明白模板的机制,然后多看
些例子,我想你会深刻理解它的含义的。
&D3D的学习,可以看D3D SDK的例子,也可以找一些书籍,很多的。
&基本上我总结下,你要知道的是:
&D3D提供基本常用底层接口,那些是是D3D为了编程必须提供的,那些是不用提供的,比如
数学库我们完全可以自己写。
&D3D顶点 索引BUFFER
&颜色缓冲,模版缓冲,深度缓冲 以及对这些缓冲的操作
&目标渲染对象、
&D3D 中的3D流水线
&单通道渲染,多通道渲染。
&熟练操作上面的所有,这些都足够了,其他的都是D3D中多余的,如果你要自己做引擎,
很多都要自己实现,当然初学者可以就用它扩展的函数库,也很方便的。
&4 其他要知道的游戏知识
&下面知识都属于很强的游戏技术范畴,他们只属于单单游戏中技术支持,引擎就是用合理
的方式,把所有3D相关包括流水线和下面这些都整和到一起,但这种整和是有效的管理。
&场景管理算法&:BSP OCTREE QUADTREE PORTAL PVS
&动画系统&:骨骼动画,蒙皮骨骼动画,渐变动画,和这些动画的混合
&阴影&&:阴影体 投影阴影 阴影影射
&剔除算法&:包围球 OBB AABB BHV算法
&LOD系统&&&&&&&& :视点无关LOD 视点相关LOD
&广告牌&&:跟踪相机方向 和 只围绕y轴旋转 粒子系统
&这些是比较常用的,常常碰到的,根据基本的颜色运算,空间运算还能衍生出很多游戏特
效,等待你自己去看书,去解决。
&七。3D引擎编程,令你的挑战达到了极限
&就象我前面说的,引擎没有严格定义划分,但对于当代的引擎,似乎大家都趋向于越好的
东西,越健壮的支持,才称上引擎。现在游戏玩家对画面拟真程度要求很高,这就要求引
擎能更好的处理3D世界中大量数据,一个好的引擎,起码要做到以下几点(引用《3D.Gam
e.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直接编写游戏,还有一点就是,有机会一定要去实现,这样你的体会会更深。
&八。我的游戏编程学习生涯
&也许从出生开始,我就注定要执着,其实执着并不是好事,很多痛苦和失败源于此。那什
么样的执着是最好的,有计划的执着,才是可取的,盲目的执着,适得其反。
&从我学编程那天起,是游戏带动的我,我爱游戏,所以才会从事游戏行业,我的热情总是
源源不断,只要我肯努力,她就会给我惊喜。
&大学期间做过很多程序,一些成型的作品我始终留着它们是对我过去的努力程度的见证。
&(这个是我所有作品,我并没有炫
耀自己的意思,我只是想告诉大家,这个世界很少有不可能的,只要你肯努力,记住一定
要有计划的努力,你会得到你自己所要的,年轻时的时间很宝贵,当我们用自己老年的时
间来祢补时,我想只有“后悔”才会替你说话。)
&大学里迅猛的专业课,让我只能挤时间来学习游戏编程,是停留在2D上,而且用VB来写,
这样不用处理底层。大4下学期,大多数时间是我自己,我在复习C++的同时,慢慢的读着
一本买来一辈子你都不会后悔的书《WINDOWS游戏编程大师技巧》。
&研究生的生活让我更加可以掌握自己的时间。研究生开的这些课程,对于游戏编程来讲,
我觉得有3门课程很值得去听----进化计算,人工智能和神经网络,其实它们三个都是人工
智能范畴,如果你想以后搞游戏人工智能,不要放弃它们。
&这年年底,我完成了自己的2D游戏引擎,分别是Directx和GDI版本(不了解不要紧,后面
我会解释),并用一个月的时间开发了坦克大战游戏,由于游戏的和游戏引擎设计的很好
,轻松的可以在2个引擎上移植,并可以简单的从32bit模式变到16bit模式。
&从这以后开始了我漫长的3D生涯,我花了8,9个月的时间熟读绝世好书《3D游戏编程大师
技巧》两遍,代码用自己的方式重写,12-13W行的代码。说它绝世是因为这本书发行量很
少,而且只出一版。
&同年9月份,也就是2007年9,到10,2个月的时间,由于有了“软引擎”实现基础,很容
易的掌握了D3D。
&我开始了自己创作引擎的生涯,《3D GAME ENGING PROGRAMING》这一本具有跨时代意义
的书,出现在我的眼前,花了将近半年的时间,我掌握了这本书的所有精髓,完成了自己
的第一个3D引擎。
&一个引擎如果没所作为,就象一个人总夸耀自己多么厉害,而没有实际行动一样,不会被
人放到它应该有的位置。2008年5月-6月《FOCUS ON 3D TERRAIN 》一书给了我的引擎的发
挥自己的舞台,我在这本书的内容基础上,加入了很多其他元素,最后完成了整个地形渲
&日,我终于完成了自己革命性的著作,花了2个星期,把整个过程写了出来,
150页的WORD,这是一个艰辛的过程。但自从我发到网上得到了大量的网友的肯定后,我坚
信我一定会走的下去,而且走的更好。
&找工作这段时间,我花了半年,逐行代码刨析了WildMagic图形引擎,自己引擎框架在改
进它的基础上诞生出来,如果时间上允许,我第一个跨时代同时支持抽象层和底层的引擎
就会出现。
&到目前位置,我只开发了一个小的图形引擎,是完全在掌握D3D和3D流水线,以及一些常
用到的场景管理和特效算法上,进行的。写图形引擎的书有大约4,5本,专注于写图形引
擎的就3本,一本是《3D GAME ENGINGE PROGRAMING》,一本是《3D.Game.Engine Design
》还有一本是《3D.Game.Engine.Architecture.Engineering.RealTime.Applications.wi
th.Wild.Magic》,第一本相对简单,是每个想初识引擎的人必须看的,这本书只是一个小
引擎,对于我上面提到的4点,几乎每一点都没有完全做到100%,1,2两点相对做的还可以
,但在设计上还是有很大欠缺。对于第2本,完全讲的是3D引擎中用到的算法,都是数学符
号表达,很晦涩难懂的,对数学符号不明感和没有毅力的人真的很难看明白,这本书没有
必要专研,很多算法用的时候去查找就可以了。第3本是大家必须看的,相对于第一本,它
更重视于软件框架设计,你会漫漫体会到,对于大型软件软件框架的设计相对于编程是很
&第一本书我已经看完2编多,(大家打印看吧,比较方便)精髓代码按照我自己的规划又
重新实现,于是我有了自己的第一个图形引擎,接下来又添加了3D和2D动画系统,碰撞系
统,阴影体,广告牌等等,到2008年4月结束,基本开发完毕,这个过程经历了7个月,调
试是我每天要做的。
&2008年5月开始主要研究地形系统《FOCUS ON 3D TERRAIN》,这本书没有引擎,只是讲地
形算法,我在自己引擎上,添加了地形系统,场景管理等等。
&到2008年7月中,开发完毕。这个程序,总共代码5,6W左右。
&然后花了一个月又拾起了很久没接触的SHADER。
&这个是整个开发文档,
现在被GAMERES网站收录,里面的源代码是1。0版本,还有一点小错误,最新版本代码在我
这里,如果想要的话,可以联系我 QQ。
&九 游戏编程经典书籍
&这里我介绍一些经典的游戏编程书籍,现在经典的好书,我都有。能买到的,我都买了,
买不到的,至少都有电子版。我会在毕业前整理出来,用BT发到燕子上,包括所有英文电
子书和原代码,因为中文基本可以买到,我就不会发了,我希望你还是支持下正版书事业
,有些中文绝版的书,买不到,电子书也没有,只有大家自己去打印了。
&写到这里我曾经犹豫过,是否把现在世面的好书都大体介绍下,想来想去,既然写到这里
了就所有好书都介绍下吧!我看过的我就详细介绍下,没看过的,我也曾经大体浏览过,
觉得不错的也介绍下,3D API方面这里是列出了和D3D有关的,OPGL没有列出。
9。1 游戏基础篇
&《3D数学基础:图形与游戏开发》清华大学出版社,国外人写的,有中文的
&这本书是游戏数学基础,讲的真的很不错,我认为开始学游戏数学就要看这本书,没有电
子版的,现在可以买到。
&《3D游戏与计算机图形学中的数学方法》清华大学出版社,国外人写的,有中文版
&这本书绝版了,个人认为这本书写的质量还可以,不能说特别好,做工具书或者看看原理
还是不错的,有英文电子版。
&《Mathematics.for.3D.Game.puter.Graphics》只有英文电子版
&这本书写的是3D数学颠峰,作者写的很细致,可以仔细研究,也可以做工具书。
&《计算机图形学几何工具算法详解》电子工业出版社 国外人写,有中文版
&这本书是一本工具书,查找算法,很方便,写的很好,很细致,我经常用它。好象没有电
&《游戏编程之旅----我的编程感悟》电子工业出版社 国人写的
&这本书讲的主要是作者编程感悟,作者感悟很多地方和我差不多,从他的身上可以看到热
情,看到激情。有电子版的
&《C++编程思想》和《C++ PRIMER》
&这2本书经典的很,是每个学习C++必看的书,《C++ PRIMER》第3版现在买不到了,他们
都电子版的。
&《WINDOWS程序设计》上下, 北京大学出版社,有中文的
&这本书是学WINDOWS开发必须看的,如果不想自己开发复杂GUI,就用它吧,里面GDI编程
和图形图象有关系的,掌握了对你有大好处。有中文电子版。
&《C++游戏编程》清华大学出版社 国外人写的,又中文的
&这本书讲的是怎么用C++开发高效率的游戏,写出高效率的代码,很有看的价值,有中文
&《Data Structures for Game Programmers》国外人写
&这本书讲解游戏中用到数据结构,也就是数据结构和游戏的结合,写的十分经典,是一本
特别好的书,只有英文电子版。
9。2 2D游戏经典
&《virtual c++角色扮演程序设计》中国铁道出版社 有中文的
&这本书是小日本写的RPG游戏,里面设计到了RPG大体制作过程,用的WINDOWS GDI开发。
因为RPG游戏是游戏中经典类型,所以学习下,还是对大家有很大帮助的。这本书电子版的
好象没有,具体我也不敢肯定,没有电子版。
&《WINDOW游戏编程大师技巧》中国电力出版社 有中文的
&这本书的经典我就不想说了,电子版的应该有,但我买的是书,80左右块钱,买来值得的
,好象有英文电子版,中文的我就不知道了。
&《ISOMETRIC Game Programing with directx 7.0》只有英文
&这本书是也是2D的经典,真是物有所值,个人认为特别好。
9。3 3D基础学习
&《3D游戏编程大师技巧》 人民邮电出版社 中文的绝版了
&这本书实在太出色了,可以绝版了,这本书只出了一版,实在不知道出版社这么吝啬,很
多人想要都买不到,大家只有打印了。电子版中英文都有。
9。4 D3D学习
&《VISUAL C++ / DIRECTX9 3D 游戏开发导引》人民邮电出版社,有中文的
&这本书讲解D3D和游戏一些相关知识还是可以,我个人认为还是蛮不多的,相信我。没有
&《DIRECTX 3D 图形与动画程序设计》人民邮电出版社,有中文的
&这本书就是翻译D3D帮助文档,翻译的质量还不错,如果不想看英文的,就买下这本书,
很值得的,没有电子版。
&《3D游戏程序设计入门》翁云兵版 国外人写
&这本书是自由网络翻译,翻译的不错,有电子版,也有英文电子版。
&《Real-time.Rendering.Tricks.and.Techniques.in.DirectX》重庆大学出版社 有中文
&这本书我没有买,从图书馆借的,因为我买的书实在大多了, 这本书大部分是介绍D3D使
用,后面介绍ASM SHADER 做了一些特效。有英文电子版
9。5 3D游戏进阶
&《DIRECTX 特效游戏程序设计》科学出版社 国外人写的,有中文的
&这本书主要讲解D3D和游戏特效制作,是本出色的书,只有英文电子版
&《DIRECTX角色扮演游戏程序设计》重庆大学出版社 国外人写的,有中文的
&这本书讲解了一个3D RPG游戏制作,讲了D3D,游戏场景管理,特效,等等吧,是本十分
出色的书。有英文电子书
&《DIRECTX高级动画制作》重庆大学出版社,国外人写的,有中文的
&这本书写的很好,但翻译的实在太烂,如果不想看中文的,就看英文原版,有英文电子书
&《FOCUS ON 3D TERRAIN》只有英文的
&这本书讲解游戏地形制作,用OPGL做的,前面写的还不错,但后面QUATREE 和 ROAM 地形
系统,写的实在太难让人看懂,而且作者说明文字过于简单(个人认为),但前面的还是
值得看的。
&《FOCUS ON 3D MODEL》只有英文版
&这本书讲解各种流行的模型文件和动画
&《FOCUS ON CURVES AND SURFACE》只有英文版
&这本书讲解怎么用直线画曲线和曲面
&《Level.of.Detail.for.3D》只有英文版
&这本书主要讲游戏模型的细节层次,很深入,是本难得的好书,专研它是值得的,但看起
来确实很难,涉及到很多数学和理论,看起来还是有些头痛。
&《Real+Time+3D+Terrain+Engines+Using+C+++And+Dx9》只有英文版
&这也是介绍地形的书,但这本实现了一个管理层次,可以理解为一个小的引擎,讲的很好
&《Game+Engine+Toolset+Development》只有英文版
&这本书我还没有看,好象讲的是游戏类似插件开发,总之很软件工程有很大联系的,书评
9。6 3D游戏高级篇
&《游戏编程精粹1-6》人民邮电出版社,国外人写的,有中文的
&前4本已经绝版,我买的都是打印版,这6本书含量极高,里面都是一个话题一个话题谈论
,聚焦某个问题,基本收录的都是论文和其他公司研究成果包含了游戏知识所有领域。这
6本书有英文版的电子书。
&《GPU精粹1-3》第1本人民邮电出版社,第2本清华大学出版社。国外人写的,前2本有中文
&这3本书,里面的知识都是翡翠级别的含量,理解起来都很困难,如果你都能掌握,你就
是重量级别人物。这3本书,主要讲游戏图形和图象方面知识,如果数学不好,恐怕要看天
书,我说的数学好不是你成绩高就能看懂的。有英文电子书。
&《3D GAME ENGINE PROGRAMING》只有英文的
&这本书写的引擎不大,但确十分经典,适合初学者学习,是一本通向高级引擎编程过渡阶
段,内容写的还是很好的,后面还实现了一个GUI编辑器。
&《3D Game Engine Design》只有英文的
&这本书讲解的是游戏引擎理论,太多的数学东西。看起来还是很枯涩的,建议做为一本游
戏算法工具书来看。
&现在这本书有英文影印第2版可以买到,价格很合理。
&《3D.Game.Engine.Architecture》只有英文的
&这本书简直太经典了,但代码是2。0版本,这本书用的是3。0版本代码,网上我找了很多
次,还是找不到3。0版本代码。对于一个引擎编写者,有理论和软件框架就可以自己完全
建立一个引擎。
&《Real-Time_Rendering.2nd》国外人写 只有英文版&
&这本书评价也很不错,不过我还没看,主要讲的是实时渲染,一些特效等等。游戏中经常
出现的就是Real-Time_Rendering,大家一定要搞清楚这个名词究竟什么意思。
&《ShaderX 3.-.Advanced Rendering》
&讲解高级特效制作,我还没有看,但是以后必看的书,十分好。
&《Shaders_2_.for.Game.Programmers.and.Artists》
&用RENDMONKEY 开发的游戏特效,讲了很多,十分经典。
&《graphics gem 1-5》只有英文的
&这几本书都是九几年经典著作,专门讲图形图象方面的。
9。7 游戏脚本相关
&《游戏脚本高级编程》清华大学出版社 有中文的
&这本书主要讲解游戏脚本用途,和自己怎么实现一个脚本语言,讲了很多都是编译原理的
东西,虽然现在都用现成的脚本语言,但了解里面的基本机制还是有必要的,这是一般难
得的好书。只有英文电子书。
&《Game.Programming.with.Python.Lua.And.Ruby》国外人写,只有的电子版
&这本书讲怎么用脚本语言编写游戏,我还没有看,大体知道它讲的应该不错。
9。8 人工智能相关
&《游戏编程中的人工智能技术》清华大学出版社,有中文的
&这本书经典的要命,写的太好了,我不多说了。有英文电子的
&《游戏开发中的人工智能》东南大学出版社 有中文的
&这本书也很好,有英文电子版。
9。10 物理相关
&《游戏开发物理学》东南大学出版社 国外人写的,中文版绝版
&这本书写的都是物理基础,理解起来还很容易,是做游戏物理和物理引擎必读环节。有英
文电子书。&
&《Game.Physics.Engine.Development》只有英文电子版
&这本书写的很好,我还没有看,英文,现在还没有时间去研究物理,这是研究物理引擎的
&《Real-Time+Collision+Detection》
&这本书主要讲解碰撞处理,我还没有看,但书评很好,难得的好书。
&《Physical Based Rendering From Theory to Implementation》
&这本书,也特别好,我还没有看,相信我,这本书自己做了一个基于物理的渲染引擎,所
以很值得看的。
9。11 SHADER 相关教程与特效
&《Learn Vertex and Pixel Shader Programming With DirectX 9》只有英文版
&这本书介绍ASM SHADER,不愿意看SDK 帮助文档那么看它还是值得的。
&《Direct3D.ShaderX.-.Vertex.and.Pixel.Shader.Tips.and.Tricks》
&这本书在介绍ASM SHADER 同时,还介绍了很多用ASM SHADER的例子,讲的很基础。
&《ShaderX+2.-.Introductions+and+Tutorials+with+DirectX+9.0》
&这本书在介绍SHADER ASM和 HLSL同时,还讨论了光照,阴影,雾的特效处理,这些讲的
&我介绍这些基本都是经典的不行了,还有很多,当然这些也有好的,也有不好的,不想再
介绍了,到时候我会把所有资源都给大家的,自己去研究吧。
&十 浅谈物理与人工智能
&这2个都不是中国游戏中的优势,它们和图形一样,要求一定能力积累才可以胜任。如果
我没有预测的话,未来中国游戏中大量的需求将来自物理和人工智能,传统的网络RPG会慢
慢不能满足大家需要,而被时代所抛弃的。
&这2方面的编程我只是略知一二,还算一个小白,在此简单谈谈。
&10。1 物理
&游戏中大部分物理模拟都集中在力学和运动学上,本来它们就是一个整体。因为最后效果
是大家看到的,而看到的都是物体在屏幕上的移动,所以所有的计算最终都归结到物体移
&因为游戏毕竟是游戏,人也毕竟是人,没有必要模拟的那么精确,同时人也是感觉不出来
&所以要想做好物理上的编程,必须对力学和运动学有系统的了解,高中学的力学部分还不
是很足够,对于旋转部分,也就是处理力矩和转动惯量上,高中物理书都没有讲(我那时
是没有讲,而且很多直线线形运动方程推倒其实是用微积分推倒的,高中书上都没有明确
&物理上的模拟也没有逃脱物理计算基本规则,先是受力分析,然后计算合力,计算加速度
,计算速度,最后计算位置,也可能涉及到动能和动量等知识,还有些流体力学等等吧。
&物理其实处理的问题基本就是检测物体碰撞,碰撞后的反映,物体运动情况。
&至于理论,大家弄本大学物理,力学部分就足够,如果数学好的话加上高中的物理知识,
应该学起来不难的。
&《游戏开发物理学》这本书很好,可惜绝版了,但有电子版的,也有中文版。
&相对物理的编程书籍来说,AI的书很多。
&AI是研究生必须学的课程,包括传统的AI和计算智能。游戏中常用的传统AI包括自动机理
论,A* 算法,回溯,图搜索,剪枝等等吧。计算智能包括的是:遗传算法,模糊计算,人
工神经网络。
&我答UBI笔试的时候,里面很多题都是A*算法,可见FPS游戏中大量存在的都是AI的路径搜
索问题,让电脑更加智能。
&AI的游戏编程书很多,我就看过几本。《WINDOWS游戏编程》中有一部分讲的AI,《游戏
开发中人工智能》 《游戏编程中的人工智能技术》这3本都有中文的,而且都有大量的实
例,对于那些大量理论的书籍来说,看看它们还是很通俗的。还有很多好书,都是英文的
&十。一 各大游戏公司基本情况和一些招聘经验
&此部分都为自己的感受,不一定准确,但起码我认为不能差太多。
&11。1各个公司基本情况
&这些公司中最有实力的就是完美,完美前身是祖龙工作室,也就是《抗日》《大秦悍将》
制作工作室,它是中国最早3D游戏。大部分学生其实都抱着学习技术目的去投奔它,可是
他们体系很完善,已经形成规模,核心东西不是很容易接触的。完美薪水很高,感觉每个
人一年拿15W都是没问题的,具体薪水每个人都不一样的,而且都严格保密,用他们HR话来
说,完美“不差钱”,待遇福利也很好,能解决北京户口,任何公司都比不上的,他们现
在只招游戏逻辑的人,做引擎估计是不招了,即使招也是非常牛的人才可以。
&巨人的实力也很强,研究生年薪11W,本科好象是9W,技术上也不错,他们对待人才态度
也很好,宣讲会上,他们每个部门的负责人都到场了,可见他们对招聘的态度分负责任,
而且他们对于引擎研究,成立了一个专门研究中心,他们很鼓励女生还应聘的(主要是策
划)。顺便说下,史玉柱是他们老总,外界对他褒贬不一,但我还是很敬佩他的,毕竟他
很厉害,天天脑白金广告就他们公司弄的。
&QQ可以算是比较大度的公司,他是唯一接受“霸王笔”和“霸王面”的公司,其他公司都
不行的。QQ待遇研究生13W,本科生10W。对于人才上,他们真的很负责,这也是一个共性
,公司对于自己缺少的人才,他们都是很积极的,我挺看好腾讯未来发展,大型3D游戏上
是qq的主要缺口,他们不会放弃的,就是咂钱,他们也敢的。
&盛大这个公司也很好,虽然没有前3个薪水多(至于具体多少我就不知道了,一直也没告
诉我),但福利很不错,他们对人才态度非常不错,盛大在3D游戏上也在努力,因为盛大
是游戏起家,所有他们也不能放弃,现在他们又开通了校园牛人通道,只要你符合,报销
提供车费,邀请你去。
&UBI我笔试后就没有了通知,本来是还有个网上答题,不知道我没接到,UBI HR说只要投
简历的人能收到,我也莫名其妙。其他情况不是很了解。
&金山这个公司给了我深刻印象,他们技术总监给我上了一堂意义深刻的课,我收益非浅,
再此表示感谢。金山公司这么大,游戏公司中是给的最少的,研究生好象是6000,但能解
决户口。金山有很多工作室,最有实力的是西山居,我面的是烈火的。他们3D游戏也很匮
乏,所以也是急需大量3D人才的。
&最后我去的是象素公司,这个公司给留下的是最深刻的印象,他们虽然是小公司,但QQ的
《寻仙》是他们做的,他们主程很好,而且他们3个主程穿着就是学生打扮,感觉很亲切,
他们里面没有官僚,没有霸权,本科生薪水4500,研究生6000,如果你真想学技术,我认
为这个公司是一个不错的选择,他们会让你选择自己喜欢的,我在他们身上看到很多激情
&11。2一些招聘经验
&介绍下招聘的一些经验,这些经验未必好用,咱们都是学计算机的,或许计算机专业上相
对比较实用。
&11。2。1技术面试经验
&1。我个人认为你发挥的好坏很大程度上取决于你的面试人,如果遇到一个好的面试管,
你的发挥可能是200%,遇到一个不好的面试官可能是-200%。
&好的面试官问问题由浅入深,由普遍到特别,这样你答题时有逐步适应的过程,开始问你
些简单的,让你对自己有信心,不至于慌张,而有些面试官面试时特别叼专,一开始很特
别的问题,或者很难的问题问你,最难对付的是这些问题完全和他的个人经历有关,不是
一个普遍性的,其实我们每个人经历,即使再厉害的人也要有自己不会的问题,所以这样
面试官谁碰到谁比较倒霉。
&2。对于有些问题,面试人知道你可能答不上,但他问你不是为了让你答上,而是让你自
己能思考,起码说出解决问题思路大概,即使思路可能错误他也未必在乎,看你是否感觉
接受这个问题,感觉自己去想这个问题,所以遇到不会的,不要放弃,起码要想想,然后
&3。面试官可能问你比较擅长的问题,也就是你简历上写的,但他不一定会,他问你就是
看你回答的流利程度,来判断你是否真的做过这个。
&4。很多公司都会问一个问题是,如果让你干你不喜欢做的你该怎么办。回答就要委婉些
,说“干个几个月也没什么,公司调动很正常”,如果让你干一直干下去,说实话这个就
要取决你自己,这个也是很棘手的问题,因为如果你有自己主动方向,而且有很好的发展
,去干一个自己不擅长的,发展上自己一定要考虑好,然后取舍。
&11。2。2 HR面试经验
&一般如果技术相中你了,那么HR面就是一个摆设,不会再刷人,基本就是了解下你的性格
什么的。最关键的就是谈待遇,很多公司他们都有一个基本标准,本科生有一个统一标准
,研究生有一个统一标准,不会给你提工资的。但相对大的 公司不会这样,例如 完美 巨
人 qq 盛大 他们对每个人都有不同的等级,一般最大差别一年也就1W-2W。要薪水时,尽
管要,要你自己认为你应该拿的,如果真想要你,他会和你商谈,或者他当面就告诉,你
要高了,然后再协商。
&谈待遇时一定要问清楚,户口,补助,薪水支付情况,因为年薪不等于月薪*12的,年薪
一般是一个目标,大于月薪*12,你能不能全拿到还要靠你自己,而月薪是死的,你干好干
坏一定能拿这些的,最后就是五险一金,最重要的就是住房公积金,每个地方给的份额是
不同的,自己加加算算应该最后能拿多少。
阅读(...) 评论()

参考资料

 

随机推荐