游戏编程_游戏编程入门 - CSDN
精华内容
参与话题
  • 高手教你如何从零开始学游戏编程

    万次阅读 2014-02-22 16:11:18
    开发游戏可能是学习编程的理由中最吸引人的一条了。但如何从零开始入门,达到能够开发游戏编程水平,是困扰无数勇敢少年们的传统难题。作为一名游戏设计师,我没有系统地学习过编程。从5年前开始,我有了自己从头...

    开发游戏可能是学习编程的理由中最吸引人的一条了。但如何从零开始入门,达到能够开发游戏的编程水平,是困扰无数勇敢少年们的传统难题。作为一名游戏设计师,我没有系统地学习过编程。从5年前开始,我有了自己从头完整开发游戏的念头,于是断断续续地看了很多书,试过了很多入门方法和开发环境,但直到近半年才找到正确的门路。现在我在Unity开发环境下独立制作游戏原型和利用成型的框架完善游戏功能已不成问题。

    本文会介绍如何从零开始学习游戏开发编程的方法,希望能为和我一样挣扎在编程大门之外的游戏开发爱好者们提供帮助。不过事先要说明的是,这种学习思路是为了帮助你在做游戏的过程中逐渐学习编写程序,不适用于其他领域,但作为一种入门方法,它能让你在半年到一年的学习之后,做到独立制做小游戏(或原型)。

    门外汉学编程的难点

    介绍学习方法之前,我们先看看门外汉学编程最常遇到的问题。

    第一,程序员们经常说程序语言只是编程工具,但市面上常见的教程都喜欢从语法、算法和程序语言的使用思想开始教学,而不是把编程语言当做解决实际问题的工具来入手。因此,初学者经常耗费很大精力才能理解书上写的算法和思想,却完全不知道理解之后能用来做什么。

    第二,很多编程教程虽然配有实例,但一方面例子的学习难度曲线增加得很快,刚看完一个“Hello World”实例,下一个例子可能就变成教你如何分配内存(真实的故事,我的一本学习Objective-C的教程就是这样的)。另一方面初学者在对开发流程不熟悉的情况下,很难做到举一反三,从一个实例里总结出做另外三个游戏的方法,我经常遇见看了三个不同类型的游戏实例,放下书后却连一个游戏都做不出来的情况。


    第三,很多编程教程为了提高普适性,在使用现成架构方面都很保守,导致了很多重复造轮子的教程出现。例如在前几年Cocos2D(一个用于iOS平台游戏开发的游戏引擎)还没有现在这么火时,几乎所有的iOS游戏开发教程讲的都是如何使用OpenGLES来制作游戏图像,而这些底层架构的实现对初学者来说是根本不可能完成的任务。

    因此,适合初学者的学习方针是:从实际需求出发;“怎么做”优于“为什么”(为什么可以在入门之后再慢慢理解);使用允许你偷懒的工具或架构(需要做的越少越好)。这些要求其实很容易满足,答案恰恰在看起来和编程关系不大的领域——可视化编程工具里(Visual Programming Tools)。

    可视化编程游戏引擎让你先做再想

    可视化编程泛指一切使用可视化元素的操作代替文本输入的程序设计方式,大体上就是像画流程图一样通过连接若干“盒子”和“箭头”来实现程序逻辑。这个概念在游戏开发工具上的应用越来越流行,近年来还有井喷趋势,从老牌的GameMaker、RPGMaker、TorqueGameBuilder、到新兴的GameSalad、Construct 2和Unity都是其中的代表。尽管这些工具和引擎各有不同的开发方式,但它们都能让初学者在完全不懂编程语法和复杂算法的情况下快速实现自己的游戏设计。


    我之前的态度是宁可抱着“看也看不懂,看懂了也不会做”的书苦学XNA(一个微软发布的使用C#的游戏开发架构)和Cocoa(苹果发布的使用Objective-C的应用开发架构),也不屑于使用GameMaker、GameSalad之类的图形界面开发工具。认为这些工具属于“业余型”,就算能做出游戏来也是旁门左道,不能修炼内功。

    直到有一次参加了柏林独立游戏BIG Jam的活动,接触了很多非常优秀的游戏开发者。他们大部分人都把GameMaker和Flash这些简单的工具当做制作独立游戏的最佳选择。原因是他们多年以前开始学习游戏开发时使用的就是这些工具,常年的使用经验让他们能在最短的时间里用这些工具实现想法。而使用这些工具从头到尾制作了大量游戏的经历,也在他们以后学习用编程语言开发游戏时打下了很好的基础。

    从那之后,为了快速开发原型,我开始物色入门级的可视化编程游戏引擎。HTML5游戏引擎Construct 2偶然进入了我的视线。花十几分钟学习教程实例之后,我很快用几个小时做出了一个一直在构思的游戏想法(当然想法本身就很简单,而且制作过程中碰到实现困难的设计都进行了进一步简化)。说来惭愧,尽管在主机游戏业从业多年,这次使用Construct 2的开发过程中我第一次感觉到对游戏开发的整个过程和架构有了初步认识林琪琦http://blog.sina.com.cn/s/blog_ba4297540101g354.html 

     

    首先,可视化编程工具里一般都有一个现成的游戏场景(任何游戏开发过程中都需要一个画布或一个摄像机来描述玩家可以看到的图像范围),然后你需要把游戏中需要的各个元素(一般称为Actor,例如主角、敌人、子弹等,这就是编程语言里对象的概念)放进场景里,然后通过关联逻辑模块来让它们快速互动起来。Construct 2的逻辑模块使用了非常贴近编程语言的按行号从上到下的执行顺序。而且你将从教程中学习到,原来游戏开始运行后每一帧都会按顺序执行一遍所有的逻辑,这就是游戏开发的基本框架中最常说的主游戏循环(Main Game Loop)。

    除此之外,用户使用逻辑模块时不用担心语法错误和算法的设计,一般这类引擎里都会提供大量现成的算法模块可供挑选。只要专注于设计游戏逻辑,其他事情可以说都是软件自动帮你完成。在观看教程和其他范例项目时也一目了然,学习别人的设计思想更加容易。

    通过使用Construct 2独立完成了第一个游戏原型后,我学到了相似的游戏元素可以共享一部分属性(编程语言里使用类和继承的概念);学到了所有活动的游戏元素都需要在每一帧的循环里进行驱动,每帧只运动一小段距离;还学到了应该在主游戏循环的什么位置判断是否Game Over,以及Game Over时进入另一个循环来等待玩家重新开始游戏等内容。

    展开全文
  • 《如何学好游戏编程》 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战 自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 自序 这篇文章我写了大约4个月,前后.....

    今天偶然发现一篇介绍如何学好游戏编程的文章,相见恨晚呀,特转载,转帖地址:http://new.qzone.qq.com/79134054/blog/1226580538#!。

            《如何学好游戏编程》
    

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

    自序
    这篇文章我写了大约4个月,前后修改很多次,做为吉大的学生,毕业前给学弟,学妹,
    留下的最后一个文章,也是我去年在《如果学好编程》中承诺过的。29887743 这个是我建
    立的吉大游戏编程群,我准备解散,重新建立,希望真正热爱游戏编程的人进入,我会定
    期清理这个群.以后我工作了,我会尽最大努力,解答学弟学妹们关于游戏编程方面的问题
    。毕业前我会把我所有的游戏编程书籍和代码整理后发到燕子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个例子,第一个就是Java语言,它有一个虚拟机,这个虚拟机就是软件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四元数
    这个在大学里面不学数学的,估计很少有人接触,它也是来用来变换空间,理解起来不是
    那么容易,但最常用的就是用四元数来表示旋转。
    我这里只是一概而过,上面任何知识在游戏中都有应用,但大学里的数学不是为了游戏而
    开设的,所以和游戏中用的数学在知识分列和讲解上还是有很大差异,尤其是线性代数和
    空间解析几何,不用担心,我在后面介绍给大家一些好的游戏书籍,对大家学习游戏编程
    和有帮助的。
    2。2语言
    编写游戏c和c++是你首选,相对来讲C++是你更应该掌握的。
    2。2。1 其他语言为什么不是当今流行的编写游戏程序语言?
    VB,JAVA,C#,等等其他语言,并不是说它们不能做游戏,它们能做,由于语言本身设计
    机理的限制,只能做一些对游戏速度要求低的游戏,对于运行速度要求高的游戏,它们被
    判成死刑。当然这个也取决于硬件的发展,以前8bit FC游戏都用C语言和汇编来写,现在
    由于硬件速度提高,用VB,JAVA,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 象素和屏幕显示点
    计算机显示一个图象是由象素组成,我们通常说的分辨率就是屏幕上显示多少个象素。如
    果一个屏幕最大可以支持1024768那么它也可以支持800600,当你屏幕分辨率是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格式,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表示完全透明。

    现在大家知道你设置屏幕或者游戏时102476832 什么意思了吧!每个象素占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%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数学是你要攻克的
    虽然你数学学的好,但国内的教科书还是和游戏中用的有些不同,毕竟没有上过专门讲解
    游戏中数学知识的课程。这需要你系统学习游戏编程中数学,33矩阵为什么有的人用,而
    有的人用4
    4矩阵,为什么有的用矩阵转置有的用矩阵的逆。《3D游戏编程大师技巧》这本
    书介绍的很详细,还有一本书就是《3D数学基础:图形与游戏开发》很不错(有中文的)
    ,先系统学习下,然后在学习游戏编程时,不懂的时候,再回头看看这些书,把所有的东
    西都彻底弄清。你如果数学基础好,学这些都很容易,以后游戏编程中最深奥的地方之一
    就是数学。

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

    向量 4维 和 3维向量有什么不同
    矩阵 44 和 33 矩阵有什么不同
    四元数
    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.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直接编写游戏,还有一点就是,有机会一定要去实现,这样你的体会会更深。

    八。我的游戏编程学习生涯

    也许从出生开始,我就注定要执着,其实执着并不是好事,很多痛苦和失败源于此。那什
    么样的执着是最好的,有计划的执着,才是可取的,盲目的执着,适得其反。
    从我学编程那天起,是游戏带动的我,我爱游戏,所以才会从事游戏行业,我的热情总是
    源源不断,只要我肯努力,她就会给我惊喜。
    大学期间做过很多程序,一些成型的作品我始终留着它们是对我过去的努力程度的见证。

    (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.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。
    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本都有中文的,而且都有大量的实
    例,对于那些大量理论的书籍来说,看看它们还是很通俗的。还有很多好书,都是英文的

    十。一 各大游戏公司基本情况和一些招聘经验
    此部分都为自己的感受,不一定准确,但起码我认为不能差太多。

    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,你能不能全拿到还要靠你自己,而月薪是死的,你干好干
    坏一定能拿这些的,最后就是五险一金,最重要的就是住房公积金,每个地方给的份额是
    不同的,自己加加算算应该最后能拿多少。今天偶然发现一篇介绍如何学好游戏编程的文章,相见恨晚呀,特转载,转帖地址:http://new.qzone.qq.com/79134054/blog/1226580538#!。

            《如何学好游戏编程》
    

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

    自序
    这篇文章我写了大约4个月,前后修改很多次,做为吉大的学生,毕业前给学弟,学妹,
    留下的最后一个文章,也是我去年在《如果学好编程》中承诺过的。29887743 这个是我建
    立的吉大游戏编程群,我准备解散,重新建立,希望真正热爱游戏编程的人进入,我会定
    期清理这个群.以后我工作了,我会尽最大努力,解答学弟学妹们关于游戏编程方面的问题
    。毕业前我会把我所有的游戏编程书籍和代码整理后发到燕子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个例子,第一个就是Java语言,它有一个虚拟机,这个虚拟机就是软件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四元数
    这个在大学里面不学数学的,估计很少有人接触,它也是来用来变换空间,理解起来不是
    那么容易,但最常用的就是用四元数来表示旋转。
    我这里只是一概而过,上面任何知识在游戏中都有应用,但大学里的数学不是为了游戏而
    开设的,所以和游戏中用的数学在知识分列和讲解上还是有很大差异,尤其是线性代数和
    空间解析几何,不用担心,我在后面介绍给大家一些好的游戏书籍,对大家学习游戏编程
    和有帮助的。
    2。2语言
    编写游戏c和c++是你首选,相对来讲C++是你更应该掌握的。
    2。2。1 其他语言为什么不是当今流行的编写游戏程序语言?
    VB,JAVA,C#,等等其他语言,并不是说它们不能做游戏,它们能做,由于语言本身设计
    机理的限制,只能做一些对游戏速度要求低的游戏,对于运行速度要求高的游戏,它们被
    判成死刑。当然这个也取决于硬件的发展,以前8bit FC游戏都用C语言和汇编来写,现在
    由于硬件速度提高,用VB,JAVA,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 象素和屏幕显示点
    计算机显示一个图象是由象素组成,我们通常说的分辨率就是屏幕上显示多少个象素。如
    果一个屏幕最大可以支持1024768那么它也可以支持800600,当你屏幕分辨率是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格式,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表示完全透明。

    现在大家知道你设置屏幕或者游戏时102476832 什么意思了吧!每个象素占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%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数学是你要攻克的
    虽然你数学学的好,但国内的教科书还是和游戏中用的有些不同,毕竟没有上过专门讲解
    游戏中数学知识的课程。这需要你系统学习游戏编程中数学,33矩阵为什么有的人用,而
    有的人用4
    4矩阵,为什么有的用矩阵转置有的用矩阵的逆。《3D游戏编程大师技巧》这本
    书介绍的很详细,还有一本书就是《3D数学基础:图形与游戏开发》很不错(有中文的)
    ,先系统学习下,然后在学习游戏编程时,不懂的时候,再回头看看这些书,把所有的东
    西都彻底弄清。你如果数学基础好,学这些都很容易,以后游戏编程中最深奥的地方之一
    就是数学。

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

    向量 4维 和 3维向量有什么不同
    矩阵 44 和 33 矩阵有什么不同
    四元数
    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.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直接编写游戏,还有一点就是,有机会一定要去实现,这样你的体会会更深。

    八。我的游戏编程学习生涯

    也许从出生开始,我就注定要执着,其实执着并不是好事,很多痛苦和失败源于此。那什
    么样的执着是最好的,有计划的执着,才是可取的,盲目的执着,适得其反。
    从我学编程那天起,是游戏带动的我,我爱游戏,所以才会从事游戏行业,我的热情总是
    源源不断,只要我肯努力,她就会给我惊喜。
    大学期间做过很多程序,一些成型的作品我始终留着它们是对我过去的努力程度的见证。

    (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.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。
    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本都有中文的,而且都有大量的实
    例,对于那些大量理论的书籍来说,看看它们还是很通俗的。还有很多好书,都是英文的

    十。一 各大游戏公司基本情况和一些招聘经验
    此部分都为自己的感受,不一定准确,但起码我认为不能差太多。

    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,你能不能全拿到还要靠你自己,而月薪是死的,你干好干
    坏一定能拿这些的,最后就是五险一金,最重要的就是住房公积金,每个地方给的份额是
    不同的,自己加加算算应该最后能拿多少。

    展开全文
  • 【游戏开发】C++游戏编程实例

    万次阅读 多人点赞 2018-09-15 10:45:54
    网络游戏开发分为:服务器编程、客户端编程、人工智能、数据库管理、游戏策划、美工设计、音乐特效等。 大型游戏往往需要团队合作开发,因此面向对象的编程思想在网络游戏中得到了广泛应用。 游戏开发基本流程:...

    网络游戏开发分为:服务器编程、客户端编程、人工智能、数据库管理、游戏策划、美工设计、音乐特效等。

    大型游戏往往需要团队合作开发,因此面向对象的编程思想在网络游戏中得到了广泛应用。

    游戏开发基本流程:游戏初始化——游戏实现——游戏结束。

    游戏初始化:加载游戏内容的缓存,如游戏人物、背景模型、音乐等素材,并初始化相关参数。

    游戏实现:用户操作+游戏逻辑过程+游戏内容渲染。

    游戏结束:释放游戏初始化时加载的缓存。

    注:如果游戏结束时,不释放动态分配的缓存所用的内存空间,系统会弹出内存泄漏警告对话框。

     

    简单的游戏过程模拟程序:

    当按下A、D键,人物分别向左向右移动。

    enum CHARACTER_STATE{STATE_LIVE=0,STATE_DEAD};//枚举状态生/死
    enum CHARACTER_ACTION{ACTION_IDLE=0,ACTION_MOVE};//枚举动作静/动
    enum CHARACTER_EVENT{EVENT_EMPTY=0,EVENT_ATTACKED,EVENT_RESTART};//枚举事件空/被攻击/复活
    #include <conio.h>    //运用getch()
    #include <stdio.h>    //运用输出函数
    void main()
    {
    	int _pos=0;    //初始化位置
    	int _state=STATE_LIVE;    //初始化状态
    	int _action=ACTION_IDLE;  //初始化动作
    	int _event=EVENT_EMPTY;   //初始化事件
    
    	int _key;    //声明按键
    	while(1)
    	{
    		printf("Idel at position:%d\n",_pos);
    		_action=ACTION_IDLE;
    		//fflush(stdin);
    		_key=getch();
    		//scanf("%c",&_key);
    
    		if(_key=='E')    //按E键退出
    		{
    			break;
    		}
    		if(_key=='A')    //A键左移
    		{
    			_action=ACTION_MOVE;
    			_pos--;
    		}
    		if(_key=='D')    //D键右移
    		{
    			_action=ACTION_MOVE;
    			_pos++;
    		}
    
    		switch(_action)
    		{
    		case ACTION_IDLE:
    			printf("Idel at position:%d\n",_pos);
    			break;
    		case ACTION_MOVE:
    			printf("Walk at position:%d\n",_pos);
    			break;
    		}
    
    		switch(_state)
    		{
    		case STATE_LIVE:    //存活状态
    			switch(_event)    //事件
    			{
    			case EVENT_ATTACKED:    //被攻击
    				_state=STATE_DEAD;
    				break;
    			case EVENT_RESTART:    //复活
    				break;
    			}
    			break;
    
    		case STATE_DEAD:    //死亡状态
    			switch(_event)
    			{
    			case EVENT_ATTACKED:    //被攻击
    				break;
    			case EVENT_RESTART:
    				_state=STATE_LIVE;    //复活
    				break;
    			}
    			break;
    		}
    	}
    }

     

     

    以上程序可以拆分为3个文件:

    1.Character.h【声明人物类】、Character.cpp【封装成员函数】、GameMain.cpp【整体游戏逻辑】

    class Character
    {
    public:
    	Character();
    	~Character();
    	void Move(int _step);
    	void Idle();
    	void AI_Planning();
    	void Render();
    
    protected:
    	int _pos;
    	int _state;
    	int _action;
    	int _event;
    }

    2.Character.cpp

    #include "Character.h"
    Character::Character()//构造函数
    {
    	int _pos=0;    //初始化位置
    	int _state=STATE_LIVE;    //初始化状态
    	int _action=ACTION_IDLE;  //初始化动作
    	int _event=EVENT_EMPTY;   //初始化事件
    }
    
    Character::~Character()//析构函数
    {
    }
    
    void Character::Move(int _step)	//移动步数
    {
    	_action=ACTION_MOVE;
    	_pos+=_step;
    }
    
    void Character::Idle()		//静止
    {
    	_action=ACTION_IDLE;
    }
    
    void Character::AI_Planning()	//行为计划
    {	
    	switch(_state)
    	{
    		case STATE_LIVE:    //存活状态
    			switch(_event)    //事件
    			{
    			case EVENT_ATTACKED:    //被攻击
    				_state=STATE_DEAD;
    				break;
    			case EVENT_RESTART:    //复活
    				break;
    			}
    			break;
    
    		case STATE_DEAD:    //死亡状态
    			switch(_event)
    			{
    			case EVENT_ATTACKED:    //被攻击
    				break;
    			case EVENT_RESTART:
    				_state=STATE_LIVE;    //复活
    				break;
    			}
    			break;
    	}
    }
    
    void Character::Render()	//渲染
    {
    	switch(_action)			//动作
    		{
    		case ACTION_IDLE:	//静止
    			printf("Idel at position:%d\n",_pos);
    			break;
    		case ACTION_MOVE:	//移动
    			printf("Walk at position:%d\n",_pos);
    			break;
    		}
    }

    3.GameMain.cpp

    #include "Character.h"
    void main()
    {
    	Character player;	//定义玩家类
    	int _key;
    	while(1)
    	{
    		_key=getch();	//获取按键
    
    		if(_key=='E')    //按E键退出
    		{
    			break;
    		}
    		player.Idle();	//静止
    		if(_key=='A')    //A键左移
    		{
    			player.Move(-1);
    		}
    		if(_key=='D')    //D键右移
    		{
    			player.Move(1);
    		}
    		player.AI_Planning();	//行为计划
    		player.Render();	//渲染
    	}
    }

     

    展开全文
  • 游戏编程入门步骤,想不到吧.

    千次阅读 2018-05-26 15:00:56
    经常有人问,没有编程经验的人该如何开始开发游戏。这篇文章是针对那些想要开发游戏,但几乎没有编程经验的人。事实上,我假设读者没有任何编程经验。我主要讨论游戏开发的程序和设计方面,而不是艺术性。我也不准备...
    经常有人问,没有编程经验的人该如何开始开发游戏。
    这篇文章是针对那些想要开发游戏,但几乎没有编程经验的人。事实上,我假设读者没有任何编程经验。我主要讨论游戏开发的程序和设计方面,而不是艺术性。我也不准备讲述如何进入游戏行业(这方面已经有足够的资料),而只是让你逐步的开始开发自己的游戏。最后,我所指出的这条道路也并不能作为唯一的,或是最好的路径来学习开发游戏,但至少对我和一些人很有用。


    选择一门语言
    你要做的第一件事就是选择一门开发语言。你有很多选择,包括Basic,Pascal,C,C++,Java,等等。也经常会有人争论对于初学者那一门语言是最好的。对于这一系列流行语言的讨论,你可以参看John Hattan的著作,What Language Do I Use?(我用什么语言?)
    我的建议是以C和C++开始。有些人会说这些语言对初学者来说太高级了,但因为我自己就是学C++,我并不同意这一说法。而且,C/C++是当今使用最广泛的语言(译者认为应该是汉语。。。),所以你可以找到大量学习资料和帮助。你先学C或C++都无所谓,因为只要学了一个,再学另外一个就很容易。但是,如果你先学C++,请保证在学习面向对象编程之前能理解和使用过程编程(等编程熟练再去学习类)。(译者:C是过程性语言,C++是面向对象语言)
    如果你开始学习C/C++,发现太难,那再学一个简单一点的也没关系,比如Basic或Pascal。但是我真的认为,如果你坚持努力,而且有好的资料,学C/C++应该没有太大问题。
    你的下一个问题可能会是:“我该怎么学C/C++?”我很高兴你这样问。最好的办法是上课。有老师可以回答你的问题,帮助你产生很大进步,编程练习作业也可以保证你能用到所学的东西。
    如果你不觉得上课是个好主意,那么就买一些好书。不要花太多时间去选一本什么“超级宝典”或“万用全书”,因为你最终可能会买几本。我建议你去一家书店,然后拿几本比较入眼的C或C++书看,直到找到一本或几本你能看懂,并且可以拿来学习的。
    同时,你可能会想要一些更深入的,或者一些材料,但是你一旦对于这门语言有了一些了解,我相信你应该有自己更好的选择。
    在这里,我有必要花一些时间,来说我看到很多初学者所关心的一个事情,特别是年轻人:没有钱买书和其他东西。首先,有很多免费资源可以利用,图书馆,Macmillan Computer Publishing ,有成千上百的编程书籍。但是如果你真的想要成为一个好的程序员,还是应该投入一部分资金。应当想方设法(合法的)帮助你弄到一些钱。
    网上也有很多C/C++的学习指南。但是我认为那只能作为补充而不是你自学的主要资源。

    选择正确的编译器
    你写的程序,或者代码,是以文本方式储存的,你甚至可以用记事本写C/C++程序。但是总需要有东西把他们转换成为可执行文件。对于C和C++,那就是编译器。
    可用的编译器有好多种,包括很多免费的。选择一款自己适合的编译器很重要,免费的编译器就有这样的好处,你可以把它们试个遍,然后从中选择自己最喜欢的。然而,免费编译器比起商业版,可能会缺失一些功能和大部分服务。幸运的是,多数商业版编译器也兼售介绍版或学习版,这要便宜得多,通常功能却不见得少,唯一的限制是你不能发布用它编译的程序(短时间内你也根本用不着)。
    总之,选择编译器取决于你能花多少钱,用什么操作系统,和为什么平台开发。
    这里个人推荐vs网上有免费的密钥.

    选择开发平台
    尽管最终你很可能为好几个平台开发,总要先选择一个来学。当你在学这门语言,还没有接触到图像的时候,你可能会想使用非图形用户界面的操作系统,比如DOS,Unix.这样可以避免接触高层,比如windows编程,让你集中精力学习语言本身。
    一旦你做好开发游戏的准备,那么,应该考虑是否改变平台,让我们来看看每个选项的特征。
    windows
    如果你想成为游戏行业的专家,或者如果你想让许多人来玩你开发的游戏,那么,这就是你要选择的平台。因为多数你的用户使用windows,而且现在我也看不出有什么改变的迹象。当今大多数的windows游戏都是由一种你可能听说过技术DirectX开发的。你可以DirextX这个库直接访问硬件,这意味着你可以开发高性能的游戏。
    DOS
    DOS过去是占统治地位的游戏平台,但是已经一去不复返了。尽管可能有一些特殊爱好者还在为DOS开发游戏,现在没有一个为DOS开发的商业游戏,他也将继续衰落,直到微软不再支持。如果你只是想开发游戏,还是不要选择DOS,如果你非要这么做,也不要太久。记住:由于存在大量DOS游戏开发的书,可能还有人辩护从这些书中学习DOS游戏开发。但是,windows游戏开发的书越来越多,那些辩解也变得越来越无力。
    Linux
    Linux是Unix的一种,由于很多原因后来变得流行,包括稳定性,价格,和反微软情绪。尽管Linux用户还是相当少,但是围绕着他的热情和不断增长的市场潜力使其也成为不错的选择。
    Macintosh
    MAC有大量忠实粉丝并不能说明什么,几乎每一个和我讨论的MAC狂热者都需要更多更好的游戏。我没有见过多少MAC游戏开发资源,但我相信还是有的,因此这也是一个选择。
    consoles
    console(就是PS,N64,DC等等)的游戏市场十分巨大,当然console游戏开发的前景也不错。然而以非商业的形式开发console游戏,出于各种原因,在现在似乎行不通。如果你开发console,很可能是在被商业游戏开发组雇用之后。


    开始进入主题
    现在是时候讨论开发游戏了。简单起见,我假设你选择用C/C++在windows平台开发,可能你选择别的,但大多数我说的还是有用的。
    首先,甚至在你打算开始开发游戏之前,你必须很好掌握C和C++.你应该懂指针,数组,结构体,函数,可能还有类。如果你精通他们,就可以开始做游戏了。
    这篇文章可能不能教会你所有关于开发游戏的东西。幸运的是,也没有这个必要。这方面有很多书,网上也有很多指南。GameDev.net应该有所有你想要的东西。
    在这里我只建议你怎么开始:
    找一本或几本书。对于windows游戏开发初学者,Tricks of the Windows Game Programming Gurus是个完美的开始。除此之外,还有许多好书.读透这些书,试试所有的例子,不懂得部分多读几遍。
    网上指南作为补充。除了弄清书上读到的,他们还涉及一些书上没有谈及的主题。
    向老师寻求帮助。如果你不能在书上或指南找到问题的答案,好好利用我们的论坛和聊天室。那里有好多专家愿意帮助别人。
    这些并不是要你按照顺序执行的,而是可以同时并且不断的重复执行。
    光学习还是不够的,你必须运用你所学到的。从一个小游戏开始,然后在这个基础上前进。你可以看一下Geoff Howland's 的著作: How do I Make Games? A Path to Game Development.
    开始,自己独立工作。不要急着加入团队,那样只会减缓学习过程。而且一旦你有了自己的几个游戏,你可以为团队做出更大的贡献。
    还有关于书,你应该不仅仅看游戏开发的书。为了能够开发出你看到商店出售的游戏,你应该钻研比大多数游戏开发书籍更高级的一些主题。有一些可以在网上找到,但你也应该选一些图形学,人工智能,网络,物理学等方面的书。计算机科学学位看来唾手可得,但因为你被迫上这些课的时候可能认为他们和游戏开发无关-你错了!
    不要只积累知识,用它
    你永远不会知道会理解一些东西知道你是用他们。用你学的东西作些演示。做作书上的练习。
    带着思考,玩一些不同的游戏
    这样做会使你做出更好的游戏。而且可以减轻编程的枯燥。
    帮助别人
    能帮别人的地方尽量帮助别人,教别人的过程中自己会学到更多。
    有始有终
    不要有这样的想法:“我能够完成这个游戏了,但是我又有一个新的想法,那就直接做下一个。”你可以学得更多如果你完成他,你也可以用事实证明你不是只会空谈。所以,尽量不要做很大很复杂的游戏,直到你有了一定经验。
    开始吧!可能你不是很了解,但是至少应该知道如何开始这条道路,找多些资料,加上多年努力工作,一定会实现!
    展开全文
  • 游戏编程十年总结

    千次阅读 2016-06-04 14:47:30
    自敲第一行代码起,已经十年多了,今天既不是十年整的日子,也不是一个有特定意义的日子,本来像这种大总结的文章,当择良辰吉日,斋戒沐浴三日,方可动笔。一开始计划是写一篇五年...编程之前 大概是读初一的时候
  • 程序员的成长之路互联网/程序员/成长/职场关注阅读本文大概需要 5.2 分钟。1Coding Games一边玩游戏,一边挑战编程难题。Coding games支持包括P...
  • 游戏编程资料合集(持续更新)

    千次阅读 2011-08-06 14:19:27
    【1】[游戏设计编程电子书小合集].Game.Programming.with.Python,.Lua,.and.Ruby 【2】Direct3D9初级教程 ...【3】Direct3D游戏编程入门教程 【4】DirectX 9 3D游戏开发编程基础 【5】DirectX+游戏
  • 一边玩游戏,一边挑战编程难题。Coding games支持包括PHP、C、JavaScript在内的20多种编程语言。用户界面功能强大,可以定制。   例如,你可以选择你的代码编辑器的风格: Emacs、Vim、Classic。   如果你想...
  • ☞ 程序员进阶架构师必备资源免费送 ☜1Coding Games一边玩游戏,一边挑战编程难题。Coding games支持包括PHP、C、JavaScript在内的20多...
  • 课程概述 ...学好Python编程基础知识后,才能进行后面游戏编程、科学数据处理和AI技术等等方面的学习。有了编程的思想,对于以后学习其它编程语言比如C++、java、php等等就容易多了。 目录如下:
  • 5款可以教你编程游戏

    万次阅读 2018-07-31 14:44:33
    本文推荐五款WEB游戏,这些游戏非常有趣,可以把你带入迷人的编程世界。 1. CodeCombat CodeCombat是一个HTML5角色扮演游戏(RPG),这款游戏可以教你基本的编程概念。 在CodeCombat中,你扮演一个英雄,需要...
  • 推荐一些有趣的在线编程游戏

    万次阅读 多人点赞 2020-01-16 21:46:15
    1.Robocode 让坦克们互相博弈的游戏,你可以看到它们飞奔,碾碎一切挡道的东西。机器人配有雷达与火炮,选手在躲避对手...Code Combat是一款学习编程的角色扮演游戏。每一关都用任务的形式设立目标,用实时的反馈...
  • 编程可以这样学

    万人学习 2020-07-21 20:01:17
    编程可以这样学》提出一种全新的学习理念,在我们去窥探各种语言或技术的细枝末节之前,老张会带着大家先去程序员的世界里遨游一圈:C语言只是用来写黑底白字的控制台程序吗?算法在游戏开发中有什么用?学校开设...
  • ai编程基础

    2020-02-01 11:42:50
    编程基础
  • C++基础入门21 精讲

    万人学习 2019-01-07 13:19:24
    若其他学科编程语言的学习步骤是:学习,应用、上项目,那么C/C++语言的学习步骤为:学习、理解、应用、上项目,多了一步理解。就是“理解”之步骤彰显了C/C++学习难度大于其他编程语言。 本课程十分适用与学员自学
  • Scratch第一讲:scratch编程软件介绍

    万次阅读 2017-09-13 14:51:49
    喜欢编程的各位小朋友们你们好呀,欢迎来到scratch小课堂,从今天起,我们要从0开始学习scratch编程。 那么有的同学要问了,什么是scratch? Scratch是由麻省理工学院(MIT) 设计开发的一款面向少年的...
  • Python全栈视频教程

    万人学习 2019-10-30 14:39:55
    Python全栈视频培训教程,帮助开发者从零到一入门python:1.深入理解python语法机制与底层原理,2.深入实战python各种案例 , 3.语音识别,图形界面,多线程爬虫,语音合成,游戏控制等等精彩案例。
  • Python星选卡
  • C/C++程序员实战基础

    万人学习 2019-09-10 10:07:56
  • java语言从入门到精通2016+项目实训

    万人学习 2020-03-03 10:45:06
    awt,swing图形界面编程,数据库编程,网络通信编程,IO输入输出与文件操作,多线程编程,反射机制,通过大量的课后上机练习题讲解,内部测试试题的详细解析,深入浅出的讲解,再通过开发推箱子游戏,仿QQ即时通讯...
1 2 3 4 5 ... 20
收藏数 250,744
精华内容 100,297
关键字:

游戏编程