为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 如何学好游戏编程-阿哲

如何学好游戏编程-阿哲

2010-08-19 39页 pdf 1MB 38阅读

用户头像

is_534905

暂无简介

举报
如何学好游戏编程-阿哲 游戏编程引导——HUNK收藏 如何学好游戏编程 1 游戏编程引导——HUNK收藏 目录 自序 ............................................................................................................................................. - 1 - 1.前言 ...................................................
如何学好游戏编程-阿哲
游戏编程引导——HUNK收藏 如何学好游戏编程 1 游戏编程引导——HUNK收藏 目录 自序 ............................................................................................................................................. - 1 - 1.前言 .......................................................................................................................................... - 2 - 1.1游戏编程,你真的爱她吗?........................................................................................ - 3 - 1.2你有毅力爱她爱到底吗?............................................................................................ - 4 - 1.3爱她请从游戏开始........................................................................................................ - 4 - 2.游戏编程,你真的了解她吗?............................................................................................... - 5 - 3.游戏编程所需要的基础知识................................................................................................... - 9 - 3.1 数学............................................................................................................................. - 10 - 3.1.1高等数学——微积分理论............................................................................... - 10 - 3.1.2线性代数和空间解析几何............................................................................... - 10 - 3.1.3四元数............................................................................................................... - 10 - 3.2语言.............................................................................................................................. - 11 - 3.2.1 其他语言为什么不是当今流行的编写游戏程序语言 .................................. - 11 - 3.2.2 C和C++应该选择那一个? ............................................................................. - 11 - 3.3.3 汇编,很重要吗?.......................................................................................... - 11 - 3.3.4 其他CPU硬件指令 .......................................................................................... - 12 - 3.3.5 ASM SHADER语言和高级SHADE语言 ........................................................ - 13 - 4 游戏编程,她的大门已经为你打开.................................................................................... - 14 - 4.1.颜色之迷...................................................................................................................... - 14 - 4.1.1 象素和屏幕显示点.......................................................................................... - 14 - 4.1.2 颜色组成和模式.............................................................................................. - 14 - 4.1.3 颜色的运算...................................................................................................... - 16 - 4.1.3.1颜色加法........................................................................................................ - 16 - 4.1.3.2颜色乘法........................................................................................................ - 16 - 4.2 Directx/OpenGL到底用来干什么?........................................................................... - 17 - 4.3游戏编程中的常用术语.............................................................................................. - 17 - 5.游戏编程中的 2D游戏,你首先要做到的。 ....................................................................... - 18 - 6.游戏编程中的 3D游戏,考验你耐力和勇气的时候到了! ............................................... - 19 - 7.3D引擎编程,令你的挑战达到了极限 ................................................................................ - 23 - 8.我的游戏编程学习生涯......................................................................................................... - 25 - 9.游戏编程经典书籍................................................................................................................. - 27 - 9.1 游戏基础篇................................................................................................................. - 27 - 9.2 2D游戏经典................................................................................................................. - 28 - 9.3 3D基础学习................................................................................................................. - 29 - 9.4 D3D学习...................................................................................................................... - 29 - 9.5 3D游戏进阶................................................................................................................. - 29 - 9.6 3D游戏高级篇............................................................................................................. - 30 - 9.7游戏脚本相关.............................................................................................................. - 31 - 9.8人工智能相关.............................................................................................................. - 32 - 9.9 物理相关..................................................................................................................... - 32 - 1 游戏编程引导——HUNK收藏 9.10 SHADER 相关教程与特效...................................................................................... - 32 - 10 浅谈物理与人工智能.......................................................................................................... - 33 - 10.1物理............................................................................................................................ - 33 - 10.2 AI................................................................................................................................ - 33 - 11.各大游戏公司基本情况和一些招聘经验 ........................................................................... - 34 - 11.1各个公司基本情况 .................................................................................................... - 34 - 11.2一些招聘经验............................................................................................................ - 35 - 11.2.1技术面试经验 ................................................................................................. - 35 - 11.2.2 HR面试经验 ................................................................................................... - 36 - 发信人: chengdz (阿哲 VS自己), 信区: CCST 标 题: 请置顶《如何学好游戏编程》 发信站: 吉林大学牡丹园站 (Tue Mar 3 17:58:26 2009) 2 游戏编程引导——HUNK收藏 《如何学好游戏编程》 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑 战自我,超越自我,这样才能攀登到游戏技术的最高峰。 ——阿哲 VS自己 自序 这篇文章我写了大约 4个月,前后修改很多次,做为吉大的学生,毕业前给学弟,学妹, 留下的最后一个文章,也是我去年在《如果学好编程》中承诺过的。29887743 这个是我建 立的吉大游戏编程群,我准备解散,重新建立,希望真正热爱游戏编程的人进入,我会定期 清理这个群.以后我工作了,我会尽最大努力,解答学弟学妹们关于游戏编程方面的问题。 毕业前我会把我所有的游戏编程书籍和代码整理后发到燕子 BT 上(空间要留足够大,估计 要 5,6个 G),到时候我会在群里通知大家。 找工作这段时间是我这三年来最难熬的,我跑遍了中国的大多数游戏公司,这段时间的 辛酸我就不说了,更多的时间是在等待,找过工作的人大多都能体会这是一种什么样的心情。 这个世界没有完美的,地点和户口,薪水和待遇,发展和兴趣,或多或少都要放弃一些,听 了很多人的后,放弃了地点上的考虑,只要人是活的,地点我相信不会是问题。这段时 间遇见很多牛人,我才发现自己是多么渺小,他们给了我很多建议,告诉了我的不足,我学 会了很多东西,这些都是很宝贵的财富。同时很多人给了我太多的帮助,在这里,阿哲感谢 所有帮助过我的人,谢谢你们,没有你们我办不到的。 我一共去了 6个公司,腾讯,UBI,巨人,盛大,完美,金山,文章最后我会把这 6个公司各个方面情况介绍下,如果你以后想去游戏公司,我想它们对你会有帮助的。 在这感触颇深的岁月里,我出 2句话: “大学生在学校里是最猖狂的,其实你不知道,你是社会上就是最弱势的” “多帮助别人,别人帮助你要学会报答人家,对于那些你帮助的人,连声“谢谢”都不说 的,你没有必要以后再帮助他” - 1 - 游戏编程引导——HUNK收藏 1.前言 本人不才,姑且以自己经验来谈如何学游戏编程,这个话题我酝酿了很久,它确实很难 写,因为我也不是资深高手,才刚刚登堂入室,游戏编程大师功力一般都十几年左右,所以 让我这样的小卒写的深入浅出更何谈容易,错误出现并不奇怪,高手见笑也在所难免,请 大家指正,我会欣然笑纳。但这几年走过的路,让我知道这么学是正确的,大体过程经验 告诉我,这样做是对的,高手的指引告诉我,这样做是对的。 这篇文章主要讨论如何学习游戏图形编程和游戏引擎编程,告诉没有接触游戏过编程或 者现在关于怎么学好游戏编程还迷惑的 PEOPLE 所要走的方向,完全抛开技术和代码实现 进行谈论。至于游戏逻辑这几年重点没有发到这个上面上,很难总结。 对于游戏中的网络,我个人认为不算游戏编程范畴,可能有人和我意见不一样,只不过 我们把游戏编程定义不同罢了,虽然现在游戏离不开网络,毕竟它只负责数据传输,和游戏 内涵没有任何关系(这里的内涵指的我们可以看见和感受到的游戏氛围)。 经验的限制,对于如何编写一个好的引擎(至于“好”这个词都是相对而言,能做的满意 就是我所期望的),至今为止我还没有这个能力,但我相信经过我的努力,不久的将来, 我会实现这个愿望,因为我的一个愿望就是实现一个好的引擎。 我从下面几个方面来说明如果学习,记住只是如何学习,要想学好就要靠你自己。 1.你真的喜欢游戏编程吗? 2.要了解游戏编程 3.学会读书,自学与思考,交流与合作 4.游戏编程需要的基础知识 5.2D游戏编程 6.3D游戏编程 7.游戏引擎编程 8.我的游戏编程生涯 9.游戏编程相关书籍介绍 10.浅谈游戏物理和 AI 11.各大游戏公司招聘和一些招聘经验 - 2 - 游戏编程引导——HUNK收藏 1.1 游戏编程,你真的爱她吗? 当你听完我的介绍后,你就要决定游戏编程是否适合你。 游戏编程可简单可复杂,简单的 2D 《蛇吃豆》,复杂的现在流行的 3D 游戏。咱们不 说简单的,因为你不想学习游戏编程就为了做一个简单的游戏。确实每个人对他所向往的东 西都想彻底了解清楚,可是我给你的第一个警告,复杂的 3D游戏,复杂到难以想象。 1.你思想需要改变吗? 打开话题,游戏是一个结合体,她是一个音乐,美术,技术,创意相结合的艺术品,你 要用艺术的眼光去欣赏的,因为好的游戏是用艺术的眼光来,除了某国的网游不算外, 很多经典的游戏流芳百世,成为真正游戏玩家佳话。中国的游戏为什么这么落后,你要联想 下,当年中国为什么会被八国联军所侵略。腐朽的思想是根本原因,从而导致了腐朽的社会 制度。游戏行业也是这样,看待游戏的中国人,始终带着眼镜,用腐朽思想看待游戏,所以 现在出现腐朽的游戏行业,导致中国游戏发展缓慢,有人曾经说中国游戏不久就赶超日本和 美国,我认为是扯淡,而且不是一般的扯淡,具体原因后面我会详细说明。 从小的时候,国外的电子游戏产品就跑进了我的空间,废寝忘食的玩个没玩,因为耽误 学习,从此电子游戏被老师和家长全部封杀,任何事物都有利有弊,鲁迅的《拿来主义》曾 说过“去其糟粕,取其精华”。在中国,电子游戏被视为过街老鼠。确实要承认电子游戏 有负面影响,但这些负面影响是谁产生的,本质上是我们自己,最后本来是精华的东西从 我们身边擦肩而过,从小霸王以后的国外游戏机没有任何仿造,导致了游戏机技术从此断 代,现在却又想起来赶超。 而现在,国人知道努力了,国家看到有钱可赚开始支持了,腐朽的游戏思想却还在蔓延, 网络游戏就是这样环境下成长的新生儿,国内网络游戏每年要大批量生产,但存活的基本没 几个。不能否定,没有利益的事情没人干,但你还不能否定,有些事情即使没有利益,但还 是有人干,哪怕知道自己并不能得到什么。国内的人,很少是第 2种人,他们把游戏做为赚 钱工具,垃圾游戏隔三差五的纷纷涌出。相比来讲,我只拿日本举例子,虽然小日本和咱们 有仇,但我们不得不承认小日本在游戏这方面思想层次完完全全超越我们,他们有严格游戏 教育背景,他们做一款游戏,要按照严格的流程,从设计到编程,以至最后的测试,都有着 干一行敬一行的精神,否则《生化危机》这样游戏你是永远看不到的。 所以你要改变自己的思想,游戏是一种艺术品,你要有一种艺术境界来去欣赏她。 - 3 - 游戏编程引导——HUNK收藏 1.2 你有毅力爱她爱到底吗? 也许我上面的话,你还能接受,残酷的在下面,以我的经验告诉我,如果你编程和游戏 理论起步是零,你要对游戏编程达到略有小成的水平最少要 4 到 5 年,我比较蠢,花了 6 年。这 6年来,几乎每天平均学习 4-5个小时左右,当然假期都要算上。头 3年半基本学习 计算机基础知识,包括数学,数据结构,计算机体系结构,人工智能,汇编,编译原理,操 作系统,网络,软件工程,离散数学,算法分析。我们大学 4年基本就学这东西,这些都是 基础,游戏编程都需要,还有一个就高等物理我没有学,导致我现在对于一些物理微积分方 程很难理解,当然这里并不一定是问题,只要你肯努力,没有学不会的。完全把这些学好, 花 4年时间真的不容易。我曾经抱怨自己没保研而痛苦的经历考研,现在我却认为是值得的, 我很难有时间在集中精力的复习这些专业课了,尤其是数学。 在游戏编程中,上面的基本知识都可以用到,所以我说游戏编程很复杂一点不假。就拿 游戏中最难的部分——一个好的游戏引擎来说(这里说的好引擎),世界上能把她做出来的 人很少,中国更是寥寥无几。 上面只是理论基础,要走进游戏编程最基本的。过硬的编程技能更是需要的,其实这些 理论学习可以和编程相结合,在编程中学习理论,为了学习理论而增长编程经验。 有了基础,你才能进一步学习游戏编程,2D 游戏和 3D 游戏理论都要学,这又要花费很长 时间,这个是我下面要详细说的。 看完我写的,你可能心惊胆寒,所以你要爱她,深深的爱她,否则你承受痛苦的时候享 受不到暗含的乐趣。 1.3 爱她请从游戏开始 很多人可能不解,游戏编程为什么要从游戏开始,玩游戏时,有很多潜移默化的东西影 响着我们编写游戏程序,很多灵感确实从游戏中得来。一般的游戏编程高手,都是从小由于 游戏对他们巨大吸引,从而走上游戏道路,虽然不是绝对,但按统计学角度讲可以说是一 个事实。一个不爱玩游戏的人,爱上游戏编程的几率是很小的。其实很多人小的时候都爱 玩游戏,他们都是从游戏厅张大,只有一少部分,走向了游戏开发这个行业,他们之间有 着明显不同,走向游戏开发的人,是真的被游戏背后那种神秘东西所吸引,并想要揭开它 ,而另一些人,则是完全迎合了游戏开发的需要——玩的高兴。 - 4 - 游戏编程引导——HUNK收藏 我想说的是,一个游戏编程高手,必定是一个游戏玩家,他们都是从玩游戏而爱上游戏, 从而走上游戏编程道路。这条路充满了荆棘,不是一般人能走到最后的。所以你一定要爱 她!当然任何事情都不绝对的,你可能就是那不爱游戏但爱游戏编程(或者和游戏性无关的 那部分编程)小概率的人。 2.游戏编程,你真的了解她吗? 游戏编程,这个概念包含了很多深层次的东西。 2.1 游戏引擎开发和游戏逻辑开发 广义上,我给的定义是,游戏引擎开发和游戏逻辑开发。 游戏逻辑开发是集中力量只开发游戏中剧情部分,你只需要做的是什么时候显示什么,什 么时候放出什么声音,什么时候通过网络传输什么数据,什么时候这个物体或者人物做什 么动作。至于底层怎么显示,声音如何处理,网络如何传输,物体动作怎么实现的,你不 用关心,关心这些的是游戏引擎。所以说游戏引擎负责技术方面,而游戏逻辑负责游戏文 化内涵。 成功的游戏是以好的游戏逻辑为基础的,而游戏引擎并不是成功游戏主要条件,但好的 游戏配上好的游戏引擎,确实会给人一种震撼,相比同样的游戏逻辑,好的游戏引擎显示效 果会给人一种全新视觉和听觉感受。 至于游戏逻辑我不想过多解释,但并不是说游戏逻辑简单,游戏逻辑也可以复杂的要命, 这取决与游戏复杂程度和游戏引擎与这个游戏的关联程度。为了解释这句话,我不得不从游 戏引擎解释开始。 早期的游戏是没有游戏引擎这个概念,都是一个游戏一套代码,随着游戏越来越多,大 家发现开发有些游戏中,有很多可重用的代码,逐渐把这些重用代码封状起来,这就是早期 的引擎。对于引擎没有明确的概念,只有好坏和适应程度之分,所谓的好坏,就是引擎支 持功能和显示特性等是否 strong,而适应程度是指一个引擎是否适合开发这个游戏,开发这 个游戏是否要自己再编写一些额外的代码。 我举个例子: 如果我用开发混斗罗的引擎(假如它有引擎)来开发 RPG,和开发 RPG 游戏的“RPG - 5 - hp 附注 游戏编程的两大部分: 1.游戏引擎开发 2.游戏逻辑开发 hp 附注 “hp”设置的“Marked” hp 附注 “hp”设置的“Accepted” 游戏编程引导——HUNK收藏 游戏开发大师”相比,我们还要做很多工作,才能完成玩法功能一样的游戏。所以说很难有 明确的界限划分这一堆代码是否是游戏引擎,但游戏引擎的任务是不用质疑 的,它的任务就是尽量不用负责底层处理,而专心到游戏逻辑上来。 2.从狭义上分,我只分解游戏引擎部分,基本包括(1)游戏图形引擎(2)声音引擎(3)网络 引擎(4)脚本引擎(5)GUI(6)人工智能引擎(7)物理引擎。 (6)(7)两个不是必须的,而前 5 个是一个好的游戏引擎要基本具备的,其实每个游戏引 擎中都具备物理引擎,只不过很多游戏对于物理要求不是很高,所以就集成到了图形引擎中 或者游戏逻辑中。图形引擎是引擎中最难的,它基本要处理游戏引擎中 70-80%的工作量, 它的主要任务是负责图形高效显示,包括速度和精度。后面我会集中并详细解释。至于声音 和网络引擎大家通过字面就可以知道它干什么。本人对声音处理和网络传输知道甚少,说出 来只能误人子弟。 至于脚本我还略有研究,我想解释下什么是脚本,游戏中为什么用脚本。脚本有时很难 给出一个定义,但大家都知道那些是脚本语言,我给出的解释是用软件 CPU(虚拟 CPU)来 运行的编程语言就是脚本语言,软件 CPU和所说硬件 CPU是对立的,也就是说脚本运行与 否先是关联到这个虚拟 CPU,在虚拟 CPU上运行,然后再又映射到真正 CPU,来真正运行。 这个过程很抽象,我觉 2个例子,第一个就是 JAVA语言,它有一个虚拟机,这个虚拟机就 是软件 CPU。再举一个例子,我现在要编写这样一个指令: PRINT S 这个指令示打印 S S代表一个万能类型。 为了实现这个指令,你首先要有一个函数来负责处理打印 比如是这样的函数 void print(S) { cout<英语
问题,关于高深而复杂数学问题,即使翻译成中文,我也很难看明白。 我在后面会把所有好的游戏编程书籍都列出来,告诉大家那些可以买到,那些只有电子 的。不好的书,我就不列出来了,只会浪费大家以后的时间。 3.游戏编程所需要的基础知识 我这里介绍下要做一个好的,称职的,游戏程序员所需要。学习就和盖楼一样,要想上 层建筑牢固,你就要有坚实的基础,我这里介绍的基础是你从事游戏编程最基础,基础的不 能再基础的东西。 - 9 - 游戏编程引导——HUNK收藏 3.1 数学 数学是游戏中支柱,没有了它,任何都不要谈,在你编写你游戏的时候,你就会知道, 世界抽象成一堆数学是多么的神奇,突然你会觉得以前枯燥无味的数学现在是一顿大餐,但 这个是霸王餐。国外人写关于引擎方面书的人,都可以说是数学高手,他们理论和实践都 很厉害,让我崇拜的不得了。大学里是你学好数学的最好机会,一定要弄明白它的现实意 义,任何理论都不是凭空出来的,它一定有现实基础,这个现实基础,就可以帮助你很好 理解这个理论。 3.1.1 高等数学——微积分理论 在游戏引擎中,很多游戏特效都是通过微积分方程来解得的,高度仿真是现在游戏的追 求,真实感越强就需要越多的计算量。极限,一元微积分,多元微积分,级数,微分方程等 等在游戏图形图象和物理上都有明显体现。有时一个硕士或者一个博士为了拟真一个效果 要花费几个月或者几年的时间,做为一个游戏程序员,微积分到达什么层次我很难给出定 义,但起码如果别人给出了原理我们能看明白,并把它实现,我觉得就很可贵了。 3.1.2 线性代数和空间解析几何 在大学课本中,空间解析几何是放在高等数学书里面讲的,但游戏中,它和线性代数放 到一起我认为更加合适。线性代数所有知识都要掌握,在游戏中它们比微积分体现的更淋漓 尽致,理解上我个人认为相对微积分更容易。空间解析几何主要讲向量,平面,线,体,这 些东西并通过线形代数矩阵进行空间变换,最后达到游戏想要的目标。 3.1.3 四元数 这个在大学里面不学数学的,估计很少有人接触,它也是来用来变换空间,理解起来不 是那么容易,但最常用的就是用四元数来表示旋转。 我这里只是一概而过,上面任何知识在游戏中都有应用,但大学里的数学不是为了游戏 而开设的,所以和游戏中用的数学在知识分列和讲解上还是有很大差异,尤其是线性代数和 空间解析几何,不用担心,我在后面介绍给大家一些好的游戏书籍,对大家学习游戏编程 - 10 - 游戏编程引导——HUNK收藏 和有帮助的。 3.2 语言 编写游戏 c和 c++是你首选,相对来讲 C++是你更应该掌握的。 3.2.1 其他语言为什么不是当今流行的编写游戏程序语言 VB,JAVA,C#,等等其他语言,并不是说它们不能做游戏,它们能做,由于语言本身 设计机理的限制,只能做一些对游戏速度要求低的游戏,对于运行速度要求高的游戏,它们 被判成死刑。当然这个也取决于硬件的发展,以前 8bit FC游戏都用 C语言和汇编来写,现 在由于硬件速度提高,用 VB,JAVA,C#来写这些游戏运行也是可以的,例如现在兴起的 WebGame(网页游戏)。但如果你真想做游戏的话,你一定想要了解现在最流行游戏编写,C 和 C++是你最好的选择,也是你走上真正的游戏编程道路的重要武器。 3.2.2 C 和 C++应该选择那一个? C 和 C++,这里面我还要说一说,我个人更看好 C++。大家都知道 C 是面向过程的, 而 C++是面向对象的,虽然 C++的面向对象特性还不是很完善,但出于对大型软件设计上 的考虑,因为游戏引擎是大的工程,框架设计远远要比编程重要,一般框架设计用面向对象 方式更直接,所以 C++比 C 更有优越性性,而且如果你合理用好 C++,并不见得 C++比 C 速度慢。有时一个软件架构和软件运行上问题,很难取舍,对于大应用程序来说,都是一点 点牺牲速度来获得好的架构,是利大于弊的事情,这里确实体现软件工程的重要性质。 3.3.3 汇编,很重要吗? 汇编语言也是你要掌握的,你说你语言学的好,但却不会汇编,是一个天大的笑话。现 在很少有汇编高手能写出比编译器优化出来的汇编代码运行效率要高,因为语言的不同,思 考问题的方式就会有不同,就象最早纸带机上的原语言一样(可计算性与计算复杂性就讲 这东西)。如果游戏都用汇编来写,写代码效率很低,所以我们都用高级语言来写,同时 还要与底层有密切联系的,C和 C++担任大部分工作量。对于游戏速度频颈问题,有时我们 用 C和 C++即使优化很多,代码精简很多,算法也改良很多,但由于语言本身设计上问题, - 11 - hp 附注 游戏引擎是大的工程,框架设计远远要比编程重要,一般框架设计用面向对象方式更直接。 一个软件架构和软件运行上问题,很难取舍,对于大应用程序来说,都是一点点牺牲速度来获得好的架构,是利大于弊的事情。 hp 附注 “hp”设置的“Marked” 游戏编程引导——HUNK收藏 和高效汇编来编写还是有不同的,这时就要是汇编高手来做速度最快,内存和寄存器使用 最少汇编程序。所以汇编还是很重要的。 3.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,这 - 12 - hp 附注 (Single Instruction Multiple Data,单指令多数据流)能够复制多个操作数,并把它们打包在大型寄存器的一组指令集,例:MMX,SSE,SSE2等等。 hp 附注 汇编CPU指令,一个指令只能执行一个数据流运算 hp 附注 “hp”设置的“Marked” hp 附注 “hp”设置的“Marked” 游戏编程引导——HUNK收藏 样数据要临时保存,降低了处理速度。早期 2D游戏经常用这个。 现在 SSE,SSE2 有自己单独的寄存器可以使用,而且它们是 128 位的,支持 4 个 32 位整数或者浮点数同时运算。 这些指令都没有分支,所以使用时效率要我们掌握,因为执行都是并行的,一个指令完 成多个计算,所以即使你编写 SIMD代码很差,速度也会提高几倍,游戏中经常用 SIMD处 理颜色和数学运算问题。在游戏速度瓶颈地方用这样的代码,公德无量。 3.3.5 ASM SHADER 语言和高级 SHADE 语言 开始学游戏编程时,这个知识不一定要具备,因为你不了解 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)这些语言都是面向过程。由于硬件设计限制,这 - 13 - hp 附注 游戏中经常用SIMD处理颜色和数学运算问题。 hp 附注 汇编语言(Assembly Language)的源程序的扩展名是.ASM(Assembly的缩写),所以汇编程序员也称汇编为ASM。 ASM不是一个函数, 是汇编指令块 hp 附注 “hp”设置的“Marked” hp 附注 “hp”设置的“Marked” hp 附注 3D固定流水线和3D可编程流水线区别。 hp 附注 “hp”设置的“Marked” 游戏编程引导——HUNK收藏 些语言不能象 C语言那样随意使用,SHADER 语言有自己的使用规范,大家学习时一定要 弄明白 3D流水线内部实现过程,再使用 SHADER简直很容易。 还有一个要说的是,GPU现在还不支持分支预测,但 GPU编程语言现在已经提供了丰 富
/
本文档为【如何学好游戏编程-阿哲】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索