3D计算机图形学零起点全攻略
这篇文章不包含任何技术知识,但我的希望它能指明一条从零开始通往3D领域的成功之路.我将罗列我看过的相关经典书籍作为学习文献,阅读规则是每进入下个内容,我都会假设已经完成前面全部的文献研习内容.相信若能按照这条路走到最后,会有所进益.
完成整部分内容需要具备基础:
英语:CET4以上
数学:精通数字加减乘除法.
物理:基本力学.
计算机:了解电脑的基本知识,熟练使用Windows.
电脑配置:
CPU:双核1.5以上
显卡:NVIDIA GeForce8400G MS以上(支持DirectX10)
内存:512以上
_____________________________________________________
下面是不需要解释的几句话|||||||||||||||||||||||||||||||||||||||||
_____________________________________________________
要进军3D计算机图形学领域,首要前提必须对其有浓烈的兴趣,然后是勤奋,和拥有一颗聪明的大脑.
需要理论实践相结合,如果说成就感可以延续兴趣,那么实践既是获取成就的坦途.而理论是铺垫坦途的基石.
在3D领域获得成就并非一朝一夕,3D领域是不断前进的,要在其中获取一席之地,那么必须与时俱进.
任何软件,语言或库,接口以致设备,硬件皆一类工具而已,精通它们并不能引以为豪,它们是死物,在这个及很多领域里,我们应该获取的是其实践和理论的思想.这句话在这里也可以理解为:程序不过是实现3D计算机图形学工具中的一种.
网络是一所很好的学校.
_____________________________________________________
计算机和编程|||||||||||||||||||||||||||开始||||||||||||||||||||||||||||
_____________________________________________________
我一直认为,计算机入门需要具备一定的理论基础,<计算机导论>很好的诠释了这一点:
<研习周期>:半个月.
<理论>:囊括了计算机基本的知识,对认知计算机处理机制和为很多内容奠定基础.
<批注>:我的大学教材,为了考试,被迫看完,事实上里面还是有很多有趣的东西的.如果觉得太乏味,大致了解之后可以跳过.
了解计算机基本知识后就可以开始向编程迈进了,在这之前需要选择一个编译环境,我认为Microsoft Visual Studio最为适合,Baidu一下即可了解其基本使用方式.
接下来需要选定一门计算机语言作为启蒙语言,相信我,这时候C语言一定是不二之选.所以<C程序设计>这时候很有用.
<研习周期>:1-3个月.
<理论>:介绍C语言语法和其基本库.
<实践>:课后习题很完整地针对相关知识进行练习.
<批注>:谭浩强强强的大学教材,是我摸得最滥的一本书.是培养兴趣的关键所在,如果在研习时无法提起兴趣,那么之后的事情自然无从谈起,请尽早放弃. 最好的情况是课后习题全部弄懂,大部分经过上机实践,附录则可以当字典使用,当C语言基本了解之后,更好的另一本字典是MSDN,通过Baidu可以了解它的使用,大多数情况下,MSDN是和Microsoft Visual Studio邦在一起的.
熟悉C语言与Microsoft Visual Studio的使用,标志着迈向计算机编程的第一步.但是要进行项目,单纯语法使用远远不够,何谓算法是灵魂?熟悉数据结构就是起点.所以这时候需要的是<数据结构 使用C语言>.
<研习周期>:1-3个月.
<理论>:介绍常用数据结构.
<实践>:把每种数据结构编写成头文件,有良好的扩展性.
<批注>:大学教材,我用的是第三版,实践时候有些乏味,但是非常重要,一定不可跳过,建议实现哈夫曼编码加密解密等以熟悉数据结构.
_____________________________________________________
学习OOP||||||||||||||||||||||||||||||入门|||||||||||||||||||||||||||||
_____________________________________________________
C语言是面向过程的语言,在了解图形之前,可能看不到任何非命令行效果.
众所周知,黑底白字永远没有图文并茂来得有激情.所以这时候对面向对象越越欲试是理所当然的.
学习OOP,应该从最简单入手,如果有比较好视觉冲击效果,那再好不过了.
权衡再三,我认为Flash的脚本语言ActionScript3.0最为适合.
作为脚本语言,它简单.经过2代的演变,它成熟.基于Flash平台,它的图形API丰富,为3D打下很好的图形基础.
学习一门脚本语言,我觉得没必要进行单纯的语法学习,应该综合起来对算法思想进行初步学习.
于是<Make Thing Move>成为当前最好的一本书.
<研习周期>:1-3个月.
<理论>:介绍基本的物理,图形知识,并ActionScript3做比较好的介绍.
<实践>:每一个语法或算法,都会进行实现并列出全部代码.
<批注>:第一本经典书籍.后面介绍基本了3D知识,是zerO3D引擎的启蒙读物, 这本书被我翻得破破烂烂,我把全部的代码都重写或者抄进Flash CS3里面,CS3的IDE实在很慢很慢,代码码得很辛苦辛苦,但是很值得很值得.
<项目1>:现在可以开始第一个图形或物理引擎的编写了,Flash里编写一个引擎其实是很简单的事情.它的API很齐全,把<Make Thing Move>的源码扩展成一个Flash3D物理引擎核心,是当前巩固编程基础,熟悉OPP思想和了解设计模式的最好途径.这个项目周期应该在1周以上,代码量上千,相机至少实现粒子与相机(3D Camera)功能(尽量在不参阅其它资料的前提下),以实现纹理贴图为佳,可尝试参照相关资料实现导入,动画等功能.在项目开始之前,需要Baidu了解ActionScript3.0的软件工程基础(命名规则等),接口(Interface)使用,事件处理机制(event).
除了全中文的zerO3D之外可参照其它开源Flash3D引擎PaperVision3D,Away3D,Sandy3D.
还有ActionScript 3.0 语言和组件参考及<ActionScript3.0 Cookbook>.
<研习周期>:任意.
<理论>:ActionScript3.0的语法及组件介绍.
<实践>:提供大量例程演示代码.
<批注>:可作为字典使用,Flash Player9时代我翻得挺多的,Flash Player10出来之后就丢角落里了,不过听说现在出Flash Player10版了.
这期间,应该试着通过Baidu了解什么是API,SDK,SVN等词汇.
相信很多人会认为所谓引擎是很神圣的一类事物,但是当试着去实现之后才发现这并没有什么大不了的Flash3D引擎更是如此.也许做得还不够好,别担心,做好准备向3D迈开第二步.
_____________________________________________________
扎实理论,深入语言||||||||||||||||||||||准备|||||||||||||||||||||||||||||
_____________________________________________________
每一件事情,最艰难的是门槛,如果一路走到这里,那么说明最艰难的时刻已经过去了.从现在起,每种计算机框架技术的学习周期都应该大幅缩短.因为立刻要深入技术堆中去,如果周期过长,只会说明两个问题,一个是自身基础不扎实,需要回顾到上一个阶段中去.另一个问题更为严重,因为用那么长的周期学完这些技术之后,大概我们都已经老了.
ActionScript3.0是一款脚本语言,也许可以使用它做很炫很漂亮的东西,但是如果仅满足于它的编程思想那目光也太过浅显了.在高级语言中,如果你不了解C++,那么你将始终不会了解一门语言可以如此博大,如此霸气.至始至终,我从来没质疑的一句话是:如果你没有使用过C++,那你之前所作的根本不是真正的编程.
因此,要完全掌握OOP,C++才是王道.
<C++程序设计教程>很好的诠释了这点.
<研习周期>:2-7天.
<理论>:C++语法及库介绍.
<实践>:课后习题与语法一一对应.
<批注>:书是厚得可以,但我读完这本书就用了2天,然后基本就掉在角落里封尘了.我相信,当入门之后,理解这些东西很轻而易举.
在学习了C++之后,不得不提的是一本经典读物.C++沉思录
<研习周期>:床前读物.
<实践>:分析C++的常见陷阱和编程要害.
<批注>:第二本经典书籍,作为一个C++程序员,绝对是床前读物之一.
学过数据结构都知道,世界上有效率这种东西.相信每个使用ActionScript3.0开发过自己3D物理引擎的人都会深有体会.高级语言封装的东西太多太杂,导致效率在不经意间流失.提高效率的一种好方法是使用低级语言,比较C语言,比如汇编,而有的时候,汇编比C语言更为有用,所以需要一本<汇编语言程序设计>.
<研习周期>:1-2周.
<理论>:汇编命令介绍.
<实践>:课后习题与语法一一对应.
<批注>:由于汇编与中高级计算机语言有些略微差异,所以可能研习周期要多一点,不过相信还是可以轻松掌握.
接下来需要为大型项目做准备,按照软件工程,需要一个好的设计模式做框架,这就需要<设计模式>.
<研习周期>:床前读物.
<理论>:很详细地讲解了设计模式和编程注意事项.
<批注>:软件工程必备.
项目中必不可少的是测试,测试是一件很麻烦但是必须的事情.掌握比较完善的测试技术有利于项目的完善.<软件测试教程>很完整地对测试技术做了介绍.
<研习周期>:1-2周.
<理论>:对测试技术做了介绍.
<实践>:白盒测试有例程.
<批注>:这本书的内容其实是从另外两本国外测试书籍搬过来的,虽然有抄袭之嫌,但是抄得很全,测试技术的内容很足,不过测试技术是与时俱进的,有些测试模型都比较旧了,但是原理差别不大,一定要做相关了解.比较乏味,我看的时候很挣扎,哈欠连天:-(.
以上是为计算机图形学3D引擎编程做准备,然而3D引擎一向离不开游戏,或者说,游戏是目前最能直接实现3D计算机图形学技术价值的体现.所以<电脑游戏设计>也可以看一看.
<研习周期>:随便看看.
<理论>:游戏的介绍.
<实践>:少量游戏逻辑算法.
<批注>:实话说这本书就是这里抄一点那里抄一点然后一捆就成一本书了(中国IT出版物的癖病,一般XXX主编的书基本都是这样),不过抄得很好,对于电脑游戏的入门很有帮助.
然后是必不可少的数学基础<高等数学(上)(下)>.
<研习周期>:1-3个月.
<理论>:介绍导数,微分等高等数学知识.
<批注>:大学教材读本,现在看起来可能不晓得它上面写的像蚯蚓一样的东西是干什么的,顶个屁用,但是随着3D图形学的深入,一定会觉得它们很有用,特别到高级部分,不懂实在不行.我手头的是第五版,相信经过五代的演变,第六版会更好,当之无愧是学3D计算机图形学需了解,考研需翻烂的东西.
好了,下面是本篇的压轴,经典中的经典,一个好的程序员必备的床前读物,众所周知的<Code Complete>,隆重登场!
<研习周期>:睡前必读.
<理论>:软件工程等理论详细介绍.
<实践>:代码分析,构陷,要害,效率等分析.
<批注>:经典之王,如果你想成为高级程序员,这本书必不可少.这本书十年如一日地放在我床头,睡前都看一下.
磕磕碰碰,终于走到这里了,回首从开始至今,是一个很长的过程.现在已经有了一个很好的理论和实践基础,好吧,从现在开始, 正式开始进入计算机图形的研究.
_____________________________________________________
基本图形API学习||||||||||||||||||||||||初级||||||||||||||||||||||||||||||
_____________________________________________________
之学习C++,最主要的原因是它有很完善的图形接口和构架接口.
什么都是循序渐进的,3D计算机图形学是计算机图形学里的一个中层分支,先从简单的比较刺激眼球开始.
现在的情况是,不认识什么是Win32,什么是MFC,C++编程还是命令行的.
但是,这里并不想再专门弄一本书详细学习这些接口.我的意见是,API仅是供人使用的工具而已,专于这些东西是不能带来任何自豪感的.
所以,综上所述,无疑,此时<Windows游戏编程大师技巧>是最佳读物.
<研习周期>:1-3个月.
<理论>:Win32编程及Windows游戏编程算法介绍,逐步呈现一个游戏引擎.
<实践>:每章都有完整的游戏代码,实现游戏引擎.
<重写周期>:1个月.
<批注>:经典之四,大师级作品,代码一定要重写过,封装成自己的游戏.
<项目2>:现在的知识已经足够开始一个游戏的编写,研习<Windows游戏编程大师技巧>之后写一个游戏简直轻而易举,这个游戏项目周期应该在1个月以上,代码量应该超过一万行,至少应该实现游戏可玩性,以实现初级人工智能为佳,可尝试3D游戏的构建.
如果此时对游戏里面的人工智能编程感兴趣,渴望更高级的内容,<游戏编程---人机博弈>和<游戏编程中的人工智能>是我认为很经典的游戏人工智能读物,它们重在算法,本来应该放在中级里的,但是我想现在的知识已经足够应付它们,并且对眼前的方向和发展很有利,在这里兴趣可能会产生分歧,人工智能与3D计算机图形学都是大方向,虽然这里不打算再深入人工智能,亦可尝试着向这个领域进行深入摸索.
<研习周期>:1-2个月.
<理论>:各种搜索树的算法.
<实践>:以一个象棋游戏为实例,实现各种人工智能搜索引擎算法.
<重写周期>:1个月.
<批注>:经典书籍,这本书写得浅显易懂,我正准备着手重写成一个象棋游戏.
<研习周期>:1-3个月.
<理论>:遗传算法和神经网络算法的介绍.
<实践>:每章都有实例.
<批注>:经典书籍,本书把遗传算法和神经网络算法运用到人工智能算法中去.
接下来<Visual C++ 数字图像处理开发入门与编程实践>正好是Windows编程及图形的后续.
<研习周期>:1-3个月.
<理论>:MFC,GUI及各种图像技术很详尽的介绍.
<实践>:每项技术都有相关实例.
<批注>:经典之七,这本书放在这里可能有点难,也算初级的一个大门槛,不过它介绍得很详细,实例也很好,代码一定要实现过一遍.这是Win32图形图像的入门攻略本.
以上所学习的都是2D图形学内容,相信此时一定对3D有所期待.老规矩,先来看得见的.
C++平台有两种3D SDK用得最为广泛.第一个是DirectX,另一个是OpenGL.
前者效果较好,后者移植性较好.
但是考虑到DirectX的文献较多,并且我相信大多数中国人喜欢看中文的.<DirectX 9.0 3D游戏开发编程基础>是公认最好的入门书籍.虽然DirectX 9.0在国外很落伍了,但是这里毕竟需要考虑到国内市场,况且学习它们,只作为一种参照,仅此而已.这里不得不提的是Web即将进入Web GL时代,如果需要从事Web 3D开发,比较适合还是OpenGL.
<研习周期>:1-7天.
<理论>:基本图形数学理论介绍,DirectX9.0 API介绍.
<实践>:每章都有内容实例.
<批注>:这本书实际就是把DirectX 9.0的Sample抄一遍,有些数学方法说得很侈谈,不知道是不是翻译原因,像应付了事那种,很让人火大,相信学了3D计算机图形学再回头看这本书的人都会有此类心得体会.这本书实际上我是最近才买的,看得漫不经心,不过还是...可是...但是只花2天时间就看完了.
这本书介绍的东西是远远不够的,要深入学习D3D最好的方式是从SDK的Sample入手,这期间一定要熟悉Shader(HLSL),了解DX的相关封装环境,由于听说(DX10我还没有做很深入的了解,只能听说)DX10已经抛弃了固定流水线采用纯Shader方式,所以要很好的使用D3D,Shader很重要,固<Shaders for Game Programmers and Artists>此时可能会很有帮助.这里需要说明的是事实上DirectX的中文书很少,既然要好书,英文读物是必不可少的,所以下面两本都是英文的,并且越下去英文越会占据主导地位,不能把眼光仅局限于国内,不是么?
<批注>:这本书我还没看,不过听说很好,就先放上来了,等我看完再补上评论好了:-).
这时候可能已经对3D充满激情,迫切想开发自己的3D作品了,而游戏是此时最直接的表达方式,然而开发一个好的3D游戏需要一个好的3D游戏引擎支持.好的,<3D Game Programming All In One>可以引领前进的路.也是熟悉游戏引擎开发游戏的最好方式.
<研习周期>:1-2个月.
<理论>:游戏开发的细节介绍.
<实践>:使用Torque引擎开发一款游戏.
<重写周期>:1个月.
<批注>:作者是著名游戏引擎Torque的开发者,它手把手地指引读者使用Torque开发成一款3D游戏.实话说,这本书我没看完,不过写得很好,很适合熟悉使用游戏引擎开发游戏.代码最好重写.
到这里,计算机图形学的基础知识已经了解得八八九九,3D计算机图形学也了解皮毛,下面将进入到中级阶段的研习.
_____________________________________________________
算法是程序的灵魂||||||||||||||||||||||||中级||||||||||||||||||||||||||||||
_____________________________________________________
一流企业卖文化,二流企业卖品牌,三流企业卖产品.同理可证,人亦如此.上面学习的尽是他人写好的接口,如果单晓得使用,那谈不上什么值得骄傲的资本.要成为大师,需要了解更深层次的东西.下面将深入3D图形学底层算法中去.<3D游戏编程大师技巧>是最好的代表.
<研习周期>:1-3个月.
<理论>:3D图形学流水线及3D游戏引擎基础介绍.
<实践>:编写一个完整的软件3D引擎,并加入动画,场景管理等系统.
<重写周期>:3个月.
<批注>:经典之八,与Windows游戏编程大师技巧一样是大师级作品,Alchemy3D算法很多来自此书.此书中文版绝版了,实在是国人的悲哀,不过淘宝上还可以买到.要学习3D,本书必看,代码一定要重写.我手头这本被翻来复去的看,作为办公台读物一点都不为过.
<项目3>:研习完<3D游戏编程大师技巧>,已经可以写出自己的软3D引擎.这个3D引擎应该周期在3个月以上,代码量2万以上,至少实现使用高级语言对<3D游戏编程大师技巧>的封装,渲染同屏2万面FPS30以上,实现3D流水线,以实现场景管理,动画系统,粒子系统,地形系统,代码量在10万以上为佳,最好能在保留高效率的前提下对光栅化进行DirectX或OpenGL式扩展,完成整个DirectX或OpenGL3D流水线及渲染功能,如:纹理寻址模式等,引擎应以效率为最优先,可使用C与汇编进行底层编写.
这里提供两条线路,
Windows线路:可使用C++进行封装,operator关键字对于3D数学基本运算很有用.
Web线路:首推Flash,可使用Alchemy技术,一边使用C,然后在ActionScript3.0进行封装.
参考引擎:Alchemy3D(除此之外我找不到任何参考引擎了:-)).
这期间,可能用到也必须用到一些数学算法,所以<3D游戏与计算机图形学中的数学方法>很有用.
<研习周期>:1-2个星期.
<理论>:如书名.
<批注>:成为3D大师不得手头一本的书.书很薄,但是设计到很多数学知识,众所周知数学算法是很麻烦的,要理解可能要看很久,不过一定要理解,我那本可能是盗版的,错别字很多,很让人火大,但是还是被我摸得很多页都发黄了,封面一半不见了.
在上面所有文献我都尽可能选择中文或中文翻译书籍,但随着内容的深入,国内文献会越来越少,至此,我觉得国内的技术已经无法赶上潮流.所以下面全部或大部分将是英文读本,要掌握顶尖技术,就要学会适应全英文的环境,好吧,现在已经具备开发3D软引擎的能力,但是目光不能仅此而已.要提升自己能力水平,从扩展3D引擎开始.而游戏是实现3D引擎的最直接方式.好的,<3D Game Engine Programming>将展示这一切.
<研习周期>:1-3个月.
<理论>:游戏引擎渲染,动画,网络,AI,场景管理等介绍.
<实践>:编写一个游戏引擎的各种细节.
<重写周期>:3个月.
<批注>:经典之九,游戏的巅峰书籍了,游戏编程大师必经之路.,国内可能买不到这本书,不过可以看电子版的,电驴上可以找到256MB的读本,不过那下载速度...我下了很久...很久,然后800多页全部打印出来了.
<项目4>:开发一个自己的3D游戏引擎,相信这是很简单的事情.这个3D游戏引擎项目可找人合作开发,应该至少代码量在10万行以上,至少实现渲染,动画,网络,AI,场景管理等功能,以实现编辑器(场景编辑器,AI编辑器,人物编辑器等)为佳,最好实现高效率,高扩展性(可对DirectX,OpenGL对接).
也可以选择对<项目3>进行扩充,但是比较推荐的还是使用硬件加速,图形效率方面单靠CPU是无法承受太多的考验的,GPU是引擎可用性的有力保证.
3D游戏引擎可能需要多种导入格式及动画系统,这时候<Focus On 3D Models>最为适合.
<研习周期>:工具书籍.
<理论>:介绍各种模型格式和动画算法.
<实践>:每种模型都有解析库.
<批注>:页数不多,电子版电驴上有.各种骨骼各种动画(骨骼蒙皮,渐变等)一应俱全,标准版模型导入库全攻略.
3D游戏引擎也可能需要自己的地形系统.所以<Focus On 3D Terrain Programming>也很有用.
<研习周期>:1-2周.
<理论>:介绍地形高位图,LOD,纹理等算法.
<实践>:各种地形算法一一实现.
<重写周期>:1周.
<批注>:页数不多,也很容易找到电子版.从地形高位图到地形光照等都一应俱全,标准版地形引擎手册.
以上对3D计算机图形学的了解都是实践性,但是要真正在3D计算机图形学里游刃有余,则需要深厚的理论做基石.现在已经有了很好的实践之后再去理解纯理论的教科书读本<3D计算机图形学>就会发觉不那么生涩了.
<研习周期>:1-3月,床前读物.
<理论>:3D计算机图形学完整的理论知识.
<批注>:如果攻读过软件硕士学位,修过<高级计算机图形学>课程或者攻读过博士学位,研讨过<图形图像处理>方向,也许会了解这本书,不过我相信那时候是用英文版的,所以这本全中文版的会好看一些.我手头这本很不幸也是中文的,由此可证我很喜欢中文...我的床前读物之二,没得说的,必看.
走到这里的人,想必已经对3D计算机图形学有比较深入的了解,不管是实践还是理论都已经很充足.下面迎来的将是图形领域的高级领域.这些领域可能已经超过程序的范畴,既是纯技术的东西,这里可能会有一些难度,但是现在对于应经拥有1个游戏,3个引擎开发经验的自己来说,这已经不是最困难的考验了.
_____________________________________________________
技术的考验||||||||||||||||||||||||高级||||||||||||||||||||||||||||||
_____________________________________________________
就现在的能力来说,也许单纯的编程并不能满足自己的求知欲了.所幸3D计算机图形学并非只局限于软件编程,要精通3D计算机图形学,硬件也是很必要的.而图形处理硬件的代表是什么?GPU当然是首当其冲.<GPU Gems>很好的诠释了这点.
<研习周期>:1-2年.
<理论>:对GPU的挖掘和很多新技术的介绍.
<批注>:最后的经典书籍(不能不经典的经典),GPU Gems目前总共有三本,Nvdia及业界精英编写.可以说每一本都是技术的革新.电子版电驴3本都有下.我就不一一说明了,可能难度会很高,最好的方式是能找到一个伙伴一起讨论研习.
到达这里的标志是,可能会出现一种很奇怪的现象:网络不管用了.原本自己遇到的问题都可以在网上找到合理的解释,但是现在却搜不到了.接下来的东西都是研讨性的,零散的.攻读过博士学位的人都知道,这就如博士课程一般,学校的课程是其次,研发是主导.就像在某一领域的顶峰,很多东西都需要自己来做,自己来思考.
(转载请注明出处:Copyright 2009(C)怀念从前,zerO3D.cn)