100steps/Blogs

关于游戏开发的介绍

tangxueer opened this issue · 3 comments

想必每个程序员都对游戏编程有着或多或少的向往吧,虽然现在用canvas, js就能写出一些小游戏,但真正的游戏开发比想象中的复杂多了,下面就与憧憬于游戏编程的同学分享一下游戏开发的基础要素与学习方法,也请技术大牛们对文章的错误之处加以指正,积极分享你们的经验。

////////////////////////////////////////////////////////////////////////////////

1) 了解平台

PC单机平台游戏(Windows)
PC网络平台游戏(Windows,Linux)
移动平台游戏(J2ME,Symbian,Plam…)
掌上游戏机平台游戏(GB,GBA,NDS,3DS,PSP,PSV…)
家用游戏机平台游戏(PS1/2/3/4,Xbox,Wii…)
网页游戏(HTML,Flash)
智能移动设备平台游戏(iOS,Android)

2) 基础语言

大型游戏:基础 --- C++\C
进阶 --- 汇编语言,CPU硬件指令,高级SHADER语言
小型游戏:C#\JAVA
Android手游:JAVA
iPhone手游:Objective-c

3) 基础知识

重点掌握数学,c和c++,汇编,数据结构,线性代数,空间解析几何

基本掌握计算机体系结构,离散数学,编译原理,计算机网络,操作系统,软件工程,数据库,人工智能

4) 游戏引擎

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。

游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。

引擎相当于游戏的框架,框架打好后,关卡设计师、建模师、动画师只要往里填充内容就可以了。因此,在3D游戏的开发过程中,引擎的制作往往会占用非常多的时间。出于节约成本、缩短周期和降低风险这三方面的考虑,越来越多的开发者倾向于使用第三方的现成引擎制作自己的游戏。

列一个公式就是:
游戏=引擎(程序代码)+资源(图象,声音,动画等)

时下流行的优秀游戏引擎:
Unity3D:全面整合的3D专业游戏引擎,支持C#,JS。代表作品《神庙逃亡》,《纪念碑谷》,《仙剑6》

Cocos2d-x:开源的移动2D跨平台游戏引擎,支持C++,lua(嵌入式脚本语言)。代表作品《保卫萝卜》,《梦幻西游》。
是**的在github上有名的大型开源项目https://github.com/cocos2d/cocos2d-x

Orge:开源的图形解决方案,可与其他子系统库如物理库等整合。国内大型3D网游多用。

Unreal:AAA级顶尖游戏制作引擎,支持C++,代表作品《剑灵》,《无尽之剑》

Gamebryo:专业级游戏制作引擎,支持C++,lua脚本,其渲染引擎部分是私有的,但允许使用者添加自己的图形绘制代码,代表作品《古剑奇谭》,《上古卷轴5》

BigWorld:在线网络游戏引擎,支持C++,python脚本,代表作品《魔兽世界》,《天下2》

5)计算机图形接口

DirectX
OpenGL

他们是一个函数库,函数库为我们做了一些最基本的和底层打交道的处理,其他还提供了一些常用的3D函数库,算是一个2次开发。最大功劳在于充分调度和发挥了显卡性能,把显卡的特性用接口的形式提供出来。

6)学习编写2D游戏与3D游戏

3D游戏处理可以分成2个部分,一个是3D空间数据处理,经过纹理映射把象素写到屏幕缓冲,接下来其他特效处理都是归结到2D问题,所以学习3D游戏的基础是真正了解游戏图象处理过程,也就是学习2D原理。

而2D游戏主要学习像素图像处理,颜色模式与2D动画系统。书本推荐《WINDOWS游戏编程大师技巧》。

3D游戏开发需要无比的耐力与勇气,你需要学习基础的3D数学,3D流水线(3D游戏的脊柱),D3D流水线。书本推荐《3D游戏编程大师技巧》。

7)主要发展方向

a.游戏逻辑开发程序员:

主要集中于游戏逻辑的编写。
游戏逻辑开发是集中力量只开发游戏中剧情部分,你只需要做的是什么时候显示什么,什么时候放出什么声音,什么时候通过网络传输什么数据,什么时候这个物体或者人物做什么动作。
初学时可运用4)的一个引擎(鄙人现在刚开始接触cocos2d-x),选择其支持的一门语言,学习理解游戏中的场景管理,资源管理,状态机,AI和网络这些模块的编写。

b.游戏引擎开发程序员:

主要是自主设计编写游戏引擎。
基本包括:(1)图形引擎(2)声音引擎(3)网络引擎(4)脚本引擎(5)GUI(图形用户接口)(6)人工智能引擎(7)物理引擎
其中,(6)(7)在开发小型游戏中并不必要,而图形引擎是最难的,它基本要处理游戏引擎中70-80%的工作量,主要任务是负责图形高效显示,包括速度和精度。
初学时可先选用4)中的一个引擎,仔细剖析它的内部工作原理,学习5)的一个图形接口以及参照6)学习2D,3D游戏的编写。

以上许多信息都是鄙人从度娘上搜索整合出来的,在这个过程中也是受益良多。可以看出游戏开发所需的知识面及其广袤,原理繁杂且专深,入门容易,精通却要大量时间与精力的投入。如果真正要向游戏开发发展的话势必要下一番苦工(所以部门里没有游戏方向?),不过,做游戏开发无论在物质上还是精神上都有着非常可观的收益,当在游戏上做出一定成果时,对程序员来说一定有莫大的buff加成(勾搭妹子,哄女票什么的 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄…)。

//////////////////////////////////////////////////////////////////////////////////////////////////

下面是本文部分资料的出处与推荐阅读的文章:
这是篇很好的关于如何做好游戏编程的文章:
http://blog.csdn.net/rabbit729/article/details/7014170
这篇主要讲游戏引擎:
https://www.zhihu.com/question/32063728
游戏开发论坛,有各种各样游戏开发相关的干货:
http://www.gameres.com/

by 汤雪儿

雪儿分享下计算机图形学与游戏引擎原理吧~

计算机图形学(computer graphic,简称CG)的介绍:

计算机图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学(度娘体)。其主要应用在图形硬件,三维建模(如建筑景观),信息可视化,游戏影视,虚拟现实(如各种天气情况)等领域。有些计算机专业有专门讲CG的理论课。

对于游戏开发而言,游戏引擎涉及到计算机图形学的方方面面,掌握计算机图形学也是成为游戏引擎开发者的重要基础。
在大数据时代,对于数据信息的可视化也是当今热门话题,而这无疑与计算机图形学有关。
如果是对电影动漫中的特效有兴趣的同学了解一下计算机图形学也无妨。

在陈述枯燥的理论之前,先来个开胃菜:如何用C语言画一个心
你是不是想做个这样的?

若加载时间超时请直接点击

Too young too simple!
其实你可以用C语言做出这个!

若加载时间超时请直接点击

全部实现代码:http://www.zhihu.com/question/20187195

可以看出,如果想要做出一个逼真的三维物体,你需要先建立一个三维模型,再通过各种光影角度的渲染,最后可以加上一些动画使它富有动感。而这,正是计算机图形学主要研究的内容与方法。

下面让我们正式介绍计算机图形学。

计算机图形学主要包括四大内容:

1. 建模(Modeling)
三维建模是CG的基础与前提,方法主要有:
a.计算机辅助设计(CAD)中的主流方法是采用NURBS方法(非均匀有理B-样条,简单来说就是专门做曲面物体的一种造型方法),与大量数学挂钩。
b.细分曲面造型方法,是一种镶嵌化处理技术,简单理解便是在一个简单的多边形模型中,利用专门的硬件与算法镶嵌入若干多边形,以达到在不耗费CPU资源的情况下真实的展现曲面的目的。为DirectX11(即原文中提到的计算机图形接口)的组成部分之一。
c. 利用软件的直接手工建模,大多数的软件面向特定领域,不易于普及。
d. 基于笔划或草图交互方式的三维建模方法。
e. 基于语法及规则的过程式建模方法。特别适合具有重复特征和结构化的几何物体与场景,比如建筑、树木等。
f. 基于图像或视频的建模方法。比如从若干张照片重建出所拍摄物体的三维模型。
……
还有其他一些建模方法就不一一列举。

2. 渲染(Rendering)
渲染就是使上面做出的三维模型体现出真实感。
主要的渲染技术有:局部光照模型,光线跟踪算法,辐射度,全局光照模型,Photo mapping以及基于GPU的渲染技术等。
一些商业化软件(比如Maya, Blender, Pov Ray等)也提供了强大的真实感渲染功能,在计算机图形学研究论文中作图中要经常用到这些工具来渲染漂亮的展示图或结果图。(如果应用在数学建模比赛时一定也会加分不少(¯﹃¯))。

3. 动画(Animation)
计算机动画的应用领域广泛,比如动画片制作,广告、电影特技,训练模拟,物理仿真,游戏等。

4. 人机交互(Human–computer Interaction, HCI)
比如以WIMP(窗口、图符、菜单、鼠标)为基础的图形用户界面(GUI),比如谷歌眼镜,又比如微软的Kinect(多用于XBOX平台上的体感游戏)。

学习计算机图形学的基础:

1. 数学
计算机图形学里面用到的数学非常多,列举一些常用的,包括:微积分、线性代数、矩阵计算、微分几何、数值计算和分析、计算方法、偏微分方程、微分方程数值解、最优化、概率、统计、计算几何等。

2. 编程
C/C++是计算机图形学最常用的编程语言。网上的大部分的资源、类库、算法代码基本上都是C++写的,因此,你若需要利用这些资源,必须掌握甚至精通C++语言。
等等等等....

值得提及的是,现在计算机图形学仍进入大数据时代!现有的电子设备(比如相机,手机等)能够帮助人们轻松获得图像和视频,但是,不是人人都有能力来构建三维几何模型。如何让大众能够像获取图像那样能够随时随地地获取或者构建三维模型,仍然是计算机图形学的任重道远的主要任务之一!只有让大众能够轻松进行三维建模,并上载分享他们所构建的模型数据,计算机图形学才可能进入大数据时代。
另外,随着三维打印的新兴技术的逐渐普及,人们对三维模型的需求也日益增加。几何建模和三维打印的未来是共呼吸,同命运的:也只有当人人都能轻松建模时,三维打印才有可能走向千家万户。
三维几何建模的任务仍然任重道远,大家仍需共同努力!

//////////////////////////////////////////////////////////////////////////////////////////

部分资料出处:
http://staff.ustc.edu.cn/~lgliu/Resources/CG/What_is_CG.htm

pangc commented

看到有些同学对游戏开发有些兴趣,在学习之前希望大家能够把基础打牢。计算机网络、操作系统、数据结构、c++先过了关再说,这些知识是通用的,而游戏开发的知识未必能用到其他场合。几本个人比较喜欢的书推荐一下(stl源码剖析、eEffective C++、深入理解C++对象模型、操作系统精髓与设计原理)
接下来介绍下入门的过程:
1.脚本学习:
熟悉python、c#、Lua
引擎较多使用lua、c#作为脚本,cocos支持js、lua,unity、cryengine支持c#,根据想要学习的引擎来选择学习不同的脚本。有兴趣的同学可以学习lua,阅读一下lua的源码,看一下lua源码分析。

2.服务端学习:
熟悉tcp/ip,用python来写一个聊天室,不使用任何第三方库,包括自带的asyncore。熟悉一下epoll、select的使用,理解异步io。服务端框架可以看看网易开源的pomelo(js) or 云风开源的skynet(lua)

3.3D基础学习:
熟悉Direct3D,学习绘制一个场景、可控制摄像机移动、带地形、光照、阴影、粒子效果。参考DirectX 9.0 3D游戏开发编程基础,实现3-18章的内容。
可以看看浅墨的blog,里面有些源码。
sdk地址:http://www.microsoft.com/en-us/download/details.aspx?id=6812

4.引擎学习:
熟悉cocos2dX or Unity3D,自行开发一个小游戏。
cocos2dX:官网文档和源码。
Unity:siki的视频教程和宣雨松的blog讲的都不错。

最后在强调一下学习之前请把计算机网络、操作系统、数据结构和算法的基础打牢。