如何学好游戏编程 二

四。游戏编程,她的大门已经为你打开。 
 
 1。 颜色之迷
 
 计算机怎么显示图形的,这个你必须要弄明白,计算机显示彩色图象是经历了一个什么样的发展过程。

 1。1 象素和屏幕显示点
 计算机显示一个图象是由象素组成,我们通常说的分辨率就是屏幕上显示多少个象素。如果一个屏幕最大可以支持1024*768那么它也可以支持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分成1555格式和565格式,1555就是1位给ALPHA(表示透明)分给RGB分别5bit,5bit可以表示色彩基元颜色是32种,RGB组合起来就是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表示完全透明。

 现在大家知道你设置屏幕或者游戏时1024*768*32 什么意思了吧!每个象素占32bit,屏幕显示1024*768个象素。
 
 1。3 颜色的运算
 计算机支持颜色运算都是无符号颜色运算,颜色没有负数,而且颜色运算有CLAMP和MOD
 如果每个颜色占8bit,颜色表示范围为0-255
 这里CLAMP指的是
 if(x<0) x=0;
 if(x>255) x=255;
 这里MOD指
 if(x>255) x = x%5;

 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人,这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个月的时间。你会感觉你立刻升级了,HP,MP,CP都增长了,当然也包括RP,哈哈!(不知道这些术语的,大家多玩玩RPG游戏吧!)

 好东西去追求,不要怕浪费时间,浪费精力,你想想,你得到的最后会大于你的付出,这些都不算什么。很多人问我怎么学3D,我建议他们不能着急,要从学《3D游戏编程大师技巧》开始,大约要8,9个月时间,把每个细节都弄明白,闭上眼睛,怎么实现就很清楚,书上每一页写什么都很明确。他们都觉得浪费时间,那么这样是永远学不好的
 
 1 3D数学是你要攻克的
 虽然你数学学的好,但国内的教科书还是和游戏中用的有些不同,毕竟没有上过专门讲解游戏中数学知识的课程。这需要你系统学习游戏编程中数学,3*3矩阵为什么有的人用,而有的人用4*4矩阵,为什么有的用矩阵转置有的用矩阵的逆。《3D游戏编程大师技巧》这本书介绍的很详细,还有一本书就是《3D数学基础:图形与游戏开发》很不错(有中文的),先系统学习下,然后在学习游戏编程时,不懂的时候,再回头看看这些书,把所有的东西都彻底弄清。你如果数学基础好,学这些都很容易,以后游戏编程中最深奥的地方之一就是数学。
 
 基本上我总结下,你要知道的是:

 向量  4维 和 3维向量有什么不同 
 矩阵  4*4 和 3*3 矩阵有什么不同
 四元数
 ELUER角
 以后有机会深入研究碰撞中的各种算法,还会遇到很多关于数学的问题,上面只是渲染有关系。
 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.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直接编写游戏,还有一点就是,有机会一定要去实现,这样你的体会会更深。
 
 八。我的游戏编程学习生涯

 
 也许从出生开始,我就注定要执着,其实执着并不是好事,很多痛苦和失败源于此。那什么样的执着是最好的,有计划的执着,才是可取的,盲目的执着,适得其反。
 从我学编程那天起,是游戏带动的我,我爱游戏,所以才会从事游戏行业,我的热情总是源源不断,只要我肯努力,她就会给我惊喜。
 大学期间做过很多程序,一些成型的作品我始终留着它们是对我过去的努力程度的见证。
 (http://new.qzone.qq.com/79134054/blog/1226580538这个是我所有作品,我并没有炫耀自己的意思,我只是想告诉大家,这个世界很少有不可能的,只要你肯努力,记住一定要有计划的努力,你会得到你自己所要的,年轻时的时间很宝贵,当我们用自己老年的时间来祢补时,我想只有“后悔”才会替你说话。)
 大学里迅猛的专业课,让我只能挤时间来学习游戏编程,是停留在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 》一书给了我的引擎的发挥自己的舞台,我在这本书的内容基础上,加入了很多其他元素,最后完成了整个地形渲染过程。
 2008年7月15日,我终于完成了自己革命性的著作,花了2个星期,把整个过程写了出来,150页的WORD,这是一个艰辛的过程。但自从我发到网上得到了大量的网友的肯定后,我坚信我一定会走的下去,而且走的更好。
 找工作这段时间,我花了半年,逐行代码刨析了WildMagic图形引擎,自己引擎框架在改进它的基础上诞生出来,如果时间上允许,我第一个跨时代同时支持抽象层和底层的引擎就会出现。
 到目前位置,我只开发了一个小的图形引擎,是完全在掌握D3D和3D流水线,以及一些常用到的场景管理和特效算法上,进行的。写图形引擎的书有大约4,5本,专注于写图形引擎的就3本,一本是《3D GAME ENGINGE PROGRAMING》,一本是《3D.Game.Engine Design》还有一本是《3D.Game.Engine.Architecture.Engineering.RealTime.Applications.with.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。
 http://dev.gameres.com/Program/Visual/3D/SceneDesign.mht 这个是整个开发文档,现在被GAMERES网站收录,里面的源代码是1。0版本,还有一点小错误,最新版本代码在我这里,如果想要的话,可以联系我 QQ。
 
 
 
 九 游戏编程经典书籍

 这里我介绍一些经典的游戏编程书籍,现在经典的好书,我都有。能买到的,我都买了,买不到的,至少都有电子版。我会在毕业前整理出来,用BT发到燕子上,包括所有英文电子书和原代码,因为中文基本可以买到,我就不会发了,我希望你还是支持下正版书事业,有些中文绝版的书,买不到,电子书也没有,只有大家自己去打印了。
 写到这里我曾经犹豫过,是否把现在世面的好书都大体介绍下,想来想去,既然写到这里了就所有好书都介绍下吧!我看过的我就详细介绍下,没看过的,我也曾经大体浏览过,觉得不错的也介绍下,3D API方面这里是列出了和D3D有关的,OPGL没有列出。

9。1 游戏基础篇

 《3D数学基础:图形与游戏开发》清华大学出版社,国外人写的,有中文的
 这本书是游戏数学基础,讲的真的很不错,我认为开始学游戏数学就要看这本书,没有电子版的,现在可以买到。

 《3D游戏与计算机图形学中的数学方法》清华大学出版社,国外人写的,有中文版
 这本书绝版了,个人认为这本书写的质量还可以,不能说特别好,做工具书或者看看原理还是不错的,有英文电子版。
 
 《Mathematics.for.3D.Game.Programming.and.Computer.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 物理

 游戏中大部分物理模拟都集中在力学和运动学上,本来它们就是一个整体。因为最后效果是大家看到的,而看到的都是物体在屏幕上的移动,所以所有的计算最终都归结到物体移动上。
 因为游戏毕竟是游戏,人也毕竟是人,没有必要模拟的那么精确,同时人也是感觉不出来的。
 所以要想做好物理上的编程,必须对力学和运动学有系统的了解,高中学的力学部分还不是很足够,对于旋转部分,也就是处理力矩和转动惯量上,高中物理书都没有讲(我那时是没有讲,而且很多直线线形运动方程推倒其实是用微积分推倒的,高中书上都没有明确推倒)
 物理上的模拟也没有逃脱物理计算基本规则,先是受力分析,然后计算合力,计算加速度,计算速度,最后计算位置,也可能涉及到动能和动量等知识,还有些流体力学等等吧。
 物理其实处理的问题基本就是检测物体碰撞,碰撞后的反映,物体运动情况。
 至于理论,大家弄本大学物理,力学部分就足够,如果数学好的话加上高中的物理知识,应该学起来不难的。
 《游戏开发物理学》这本书很好,可惜绝版了,但有电子版的,也有中文版。

 10。2 AI
 相对物理的编程书籍来说,AI的书很多。
 AI是研究生必须学的课程,包括传统的AI和计算智能。游戏中常用的传统AI包括自动机理论,A* 算法,回溯,图搜索,剪枝等等吧。计算智能包括的是:遗传算法,模糊计算,人工神经网络。

 我答UBI笔试的时候,里面很多题都是A*算法,可见FPS游戏中大量存在的都是AI的路径搜索问题,让电脑更加智能。

 AI的游戏编程书很多,我就看过几本。《WINDOWS游戏编程》中有一部分讲的AI,《游戏开发中人工智能》 《游戏编程中的人工智能技术》这3本都有中文的,而且都有大量的实例,对于那些大量理论的书籍来说,看看它们还是很通俗的。还有很多好书,都是英文的。


原文地址 http://new.qzone.qq.com/79134054/blog/1226580538

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值