游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2889|回复: 7

转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

[复制链接]

2

主题

71

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2007-7-5 13:37:00 | 显示全部楼层 |阅读模式
可能多少有些人会对游戏编程感兴趣. 我没多少兴趣,不过我碰巧看到了这么篇文章,就翻译了一下.
原贴地址:
http://www.binarycreativity.com/2006/08/11/things-you-need-to-know-before-interviewing-for-a-game-programming-position/



  很长时间以来,游戏产业不允许新的血液加入,因为每个职位都要求申请人有2年以上的经验. 但是现在是加入游戏产业的最好的时机. 因为研发队伍的急剧增长, 有经验的人很难找了, 所以越来越多的公司从大学里招人. 不管你上的是什么大学,你都有机会在游戏产业里找到一份工作. 你需要熟悉以下领域.
    数学 - 对于视频游戏开发,这个非常重要. 不,你不需要去记如何求一个绕x轴旋转的曲面的表面积. 你需要有很好的线性代数技能. 如果你不知道点乘的公式(a dot b = a.x * b.x + a.y * b.y + a.z *b.z )和它的几何意义(|a| *|b| * a和b夹角的余弦), 你是不可能获得工作的. 你需要知道如何把一个向量投影到另一个向量上(a到 b的投影 = (a dotb)/|b|^2* b) 以及一个平面上. 你需要知道向量积(叉乘)是什么(a x b = [a.y *b.z ? a.z * b.y, a.z * b.x ? a.x * b.z, a.x * b.y ? a.y * b.x]),以及它的几何意义(一个和两个向量都垂直的向量,长度等于原来两向量的长度乘以两向量的夹角的正弦). 我记忆向量积公式的方法是把i,j,k 放在矩阵的第一行,然后是第一个向量,最后一行是第二个向量, 然后计算这个行列式. 如果你不知道什么是行列式或者如何计算一个行列式, 这可不是个好的信号! 你应该知道一个矩阵的逆以及如何计算,你应该知道如何转置一个矩阵. 你应该知道什么是正交矩阵以及求它的逆的简单方法(求它的转置就行了). 熟悉各种坐标空间之间的转换是很重要的. 碰撞检测函数背后的数学原理也很需要学习. 你如何找到一条光线和另一条光线的碰撞点?一个平面呢?一个球面呢? 什么是四元数(quaternions)? 你如何对它们做一些常见的操作? 如果你的数学已经不那么熟了或者不知道如何开始, 我推荐 "3D Math Primer for Graphicsand Game Development".我读过以后发现它很好地覆盖了所有的基础知识. 我没有读过别的书来做比较, 但是这本书肯定会给你打下很好地基础,同时它也是很多游戏开发中常见数学运算的参考资料.
    物理 - 你需要对各种抛物体的公式非常熟悉.如果你不能记住或推导出d = v0 * t + 0.5 * a * t^2, 你肯定会在面试或编程测试中遇上麻烦. 你应该能轻松解决任何涉及到抛物体和重力的问题.不论未知量是重力加速度, 发射角, y方向速度, xz方向速度, 时间,距离, 或其他任何可解的组合,你应该能没有任何困难的求出解来.你应该熟悉弹性和非弹性碰撞下的动量和动能变化. 滑动和摩擦力也是你应该理解的概念.
    C++ - 虽然一些地方还在用c多过c++,但是C++已经是游戏编程中向被广泛接受的几乎标准的语言. C++的知识是非常重要的.因为如果用的不好, 你会写出非常糟糕的代码.首先,你应该知道什么是虚函数,以及如何使用它. 理解虚函数表是如何工作的也同样重要,这样你就能够理解当你调用虚函数时需要的额外步骤,这些步骤会降低性能(每个对象都有一个隐藏的虚函数表指针[具体在哪取决于编译,并且对指针做类型转换时,this会有变化],这样调用一个虚函数,你需要根据这个指针找到那个函数表,然后跳到它所包含的函数指针所指的函数里,这会降低cache的效果). 知道如何有效地使用模板和操作符重载也很重要. 关于C++,好的OO设计是最重要的. 最常用的一些类层次很深而且很费解,你最后需要做可怕的虚拟继承或者为一些不需要的变量浪费内存.
    人工智能 - 我在大学里学习了标准的人工智能课程,但是这些东西没有一点在游戏AI中是可接受的. 教的很多算法很难实现或者对游戏而言不现实. 你知道什么是有穷状态机就够了. 绝大部分游戏使用有穷状态机, 而那些不用这个的游戏,使用的是简单的基于规则的系统. "白与黑"(包括它的续集)是我能想到的唯一的使用了其他东西(神经网络)的例外, 而且很多玩家对它的结果并不满意. 如果你想找本书, 我推荐"AI Game Programming Wisdom 3". 里面有两篇特别优秀的文章,一个是关于有趣的游戏AI设计,另一个是关于行为合成. 严肃的说,虽然书会很有帮助,但是学习游戏AI的最好的方法是实际做一个.
    图形学 - 这是一个重要的领域. 如果图形是你的主要感兴趣的方向,那么你应该知道的比这里说的多.但是,不论你想要在这个产业里做什么职位, 你应该知道一些基础. 你需要知道什么是渲染状态以及通常都有哪些渲染状态?(cull, z write, ztest之类的).什么是标准的光照方程?(I =ka*Ia + Ii*(kd*(L dot N) + ks*(R dot V)^n) ). 材质映射是如何工作的?材质的wrapping和clamping有什么区别? 如何高效的渲染程序中一组几何体?(按照渲染状态组织你的几何体,按照你的硬件最快的primitive分批,饭后发给图形卡).你需要知道 skinning 是如何工作的. 如果你对书感兴趣, 我推荐 "3D Computer Graphics". 这个不是专为游戏写的,多以它包括了一些在游戏中不现实的技术.但是,我想一个总体的了解是有帮助的,而且,随着游戏硬件的发展, 那些现在看来不现实的技术会变的普通的.
    工具开发 - C# 看来在游戏业界获得了不少地位.所以你也应该让你熟悉一下C#.C#在加快工具的开发上表现出不少优势.很多人说工具可以制造下一代的游戏, 我同意这一点. 拥有的工具越多,团队花在可以被轻易自动化的工作上的时间就越少. 可能你的团队有10个美工, 花程序员的一个人年来开发一个可以给美工每天省15分钟的工具并不值得,但是如果你有50个美工,那这就肯定值得了.C#可以快速的创建GUI,而且和其他一些能简化创建GUI的方法不同, 这些GUI很好理解和使用,因为他们是标准的windows组件,允许你方便的设定快捷键,就像其他Windows程序一样. Visual Studio 里的Form Designer 真的很好用,而且C#的metadata和event驱动的设计使得工具的开发轻而易举.你最好也对mfc有基本的了解,因为可能面试你的开发人员会有点落后与时代.如果你有兴趣学习很多关于这些技术是如何工作的(这会让你写出更好的C#代码),我强烈推荐"Applied Microsoft .NET Framework Programming",我在空闲的时候读这本书,然后我就不能放下了.我一章一章不停的读,因为我是那么激动的像学习下一章的话题了.记住, 这本书不会教你各种framework里的类和这些类是干嘛的.它讲的是这个语言的核心机制,它是如何工作的. 这本书也不是专门为C#写的. 它告诉了你如何用VB.net做一些在C#里不能做的是,它还提供了用MSIL(MicrosoftIntermediate Language, 所有.net语言的编译器都会编译出这种字节码)写的例子,实现一些不被任何一种.net语言支持的功能.
   操作系统 - 虽然这个看起来和这个和游戏开发相对而言不是太相关, 但是我很高兴我在大学学习了操作系统的课程,因为我经常会用到从这门课学到的知识. 关于操作系统的知识非常重要,因为它在幕后为程序处理着很多重要的工作.特别是由于下一代的游戏终端和双核PC上的多核特性,多此案成的知识是至关重要的.对虚拟内存的了解当然是很有用的.关于文件系统,内核态和用户态切换,分页的知识对PC游戏开发更为有用, 不过随着一代代的发展,终端也在变的越来越像PC.所以,知道这些东西没有坏处.
  编译器 - 虽然知道如何写一个分析器可能并不重要, 但重要的是知道你的代码是如何编程汇编代码的.这样你就能明白如何写出更优化的代码.你显然必须熟悉把你写的程序变为可执行文件的4个步骤:预处理、编译、汇编和链接. 编译器如何处理常量的? 很好的理解宏和知道如何用它来简化一些常用的操作是很重要的. 知道你正在用的编译器的调用约定,因为参数超过一定数目的时候,会导致它们被放在栈上而不是在预留的寄存器里. 调用约定的知识在你用汇编写函数的时候也是有用的.
  这些只是一个作为一个游戏程序员,你应该具备的各种知识和技能的入门介绍. 对每个领域,根据你的工作类型,总会有更多的你需要学习的东西. 知道一些实际使用的知识之外的东西总是没有坏处的.

12

主题

78

帖子

92

积分

注册会员

Rank: 2

积分
92
发表于 2007-7-6 16:28:00 | 显示全部楼层

Re: 转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

靠,要是知道这些,貌似已经是游戏编程大师级人物了。 [em23] [em23]

12

主题

78

帖子

92

积分

注册会员

Rank: 2

积分
92
发表于 2007-7-6 16:34:00 | 显示全部楼层

Re: 转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

  游戏编程只是一份工作,就如同许多技术工作一样。能解决实际问题的程序员总比哪些总混称什么都了解,说起来一套套的人,要好许多。
   [em16]

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-7-6 17:34:00 | 显示全部楼层

Re:转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

恩,数学,图形学,物理是三大基础学科。
c/c++/c#是三大开发语言。
AI,编译原理,操作系统是三个关系密切的学习方向。

但,所有这一切都应该围绕在游戏开发这个中心环境。

0

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
QQ
发表于 2007-7-9 01:57:00 | 显示全部楼层

Re:转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

简化下,线性代数,物理力学基础,C++,人工智能(中的一小部分),图形学原理,C#.net/MFC ,操作系统,编译原理
个人觉得要成为游戏程序员,还要加上算法和数据结构

数学方面,前段时间写个3D赛车游戏DEMO,矩阵阿向量什么的已经熟烂了。
物理方面,大学没学,高中奥赛水平,游戏中因该够用了
C++,以后要靠它吃饭的,不断学吧,上面说到的那些理解的还可以,但感觉面对对象设计方面还差很多
人工智能,人工智能我就会个有限状态机和A*算法什么的,感觉学的时候和想象中不同,很多东西都不太实际,没用心学
图形学,嗯,后天图形学笔试考试,老师上课教的OpenGL,我非的自学DirectX,考试要受罪了!!!
C#.net  这学期在修,做些小应用程序那个爽阿,想想以前用Windows API就觉得痛苦,不过由于不是游戏专业方向的课,没花太多时间去研究,等VISTA普及了再学,呵呵
操作系统和编译原理,上课的时候都没用心学,今年初恶补了两个月
算法数据结构,两年的ACM训练,几万行的代码积累

感觉大学其实也没社会上说的那么不堪,主要是时间多,压力小,想学什么就可以没有忧虑的钻进去学(反正我不在乎平时考试成绩)

还有一年就要毕业了,剩下时间把 《Inside The C++ Objict Model》和《Design Patterns》好好读读,图形学原理再认真学一下,科普下汇编,然后做毕业设计的游戏DEMO,然后找工作!

11

主题

102

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2007-7-20 23:13:00 | 显示全部楼层

Re:转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

原先我也想,这个会点,那个会点应该就可以做游戏开发了...工作了几年后才深刻意识到,写小demo和做大型产品所需的技巧差了十万八千里.
自己概括下来,最难的地方是:对事务进行抽象和分类,以及安排它们的协作关系.
打个比方说,如何设计存储某类对象的ini文件格式也是一种要求很严格的事情.如果这个看似很小很简单的事情没做好,它会让你在项目后期大为头痛.
再如:如果不在项目早期合理地限制模块间的通信关系,到了中后期整个体系就成了网状结构,会造成bug频出,维护困难,难以新增人手.
建议新人耐心地看看<代码大全>(<Code Complete>)这本书.书有上千页,要有心理准备. [em2]

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-7-21 00:46:00 | 显示全部楼层

Re:转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

楼上的,天下代码无数,什么都看完了要到什么时候,发全白估计都看不完,白发了还写什么程序

11

主题

102

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2007-7-22 14:01:00 | 显示全部楼层

Re:转自CSDN 在面试一个游戏编程职位前,你需要知道的东西

回楼上的,书名<Code Complete>原意是"软件锻造"之类的意思,这是一本关于软件工程的书.因为阴差阳错,中文版用了<代码大全>的名字并一直沿用至今.虽然此书在业界很有名气,但估计这个书名让很多初学者错过它了.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 18:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表