首先得声明我这篇文章只有很少的篇幅介绍龙书,其实我是想写点东西给那些看完龙书的人。
这是我接触3D图形编程的第一本书,接触3d图形编程前,我看的是《Windows 游戏编程大师技巧》,只看了前几章,当时我急着想去学3D的酷玩意儿,立刻就没耐心看GDI,DirectDraw。转投Direct3D门下,入门书当然是这本龙书了。对我来说龙书最棒的地方在于,它除了开始的数学基础章节外,每一章都能详细地引导读者去实现一个简单的3D特性,从画三角形到摄像机,到简单的粒子系统,地形,甚至到shader。Luna无疑是睿智而狡猾的,他知道初学者往往耐心不够,所以他总是适时地丢出个胡萝卜,让读者保持着继续的动力。这一点是我在《Windows 游戏编程大师技巧》没看到的。(见鬼,谁爱去学画线那点破玩意...这里完全是个人情感,我没看完后者,所以没资格评价)
但是Luna忽视了一点,就是学完了龙书该做什么?他或许没想到有很多投身于游戏编程的孩子都是像我这样,眼高手低而且懒于探索,爱看现成内容的。起初的他们编程基础不扎实(1年编程经验),完全不了解图形学(就龙书那点,而且多半只是照葫芦画了个瓢,还是不懂原理)。于是这些孩子后来的日子就苦了。
由于他缺乏埋头苦干的品质,于是他们只能上网寻找高人指点如何走下面的路,接着他苦苦寻找该如何理解和实现更高深的内容,去看DirectX Sampler里晦涩的代码,虽然很多知识对当时缺乏实际代码经验的他实在有点难,在这样茫茫然然浪费了许多时光之后,他找到一本还可以的英文书,里面虽然内容不深,但是一步一步教着去实现了简单的Demo,里面包含了蹩脚的封装,难堪的场景管理,但对他来说还是可以够到的,于是他终于东拼西凑地写出了第一个属于自己的Demo。他看到了自己的不足,但还不知道如何改进,他觉得这个学习之旅越来越难,懒惰催促着他该放弃了。但他的内心不愿放弃这个童年的梦想,于是他甚至逼迫自己翻译了另一本英文书籍,他又能看懂更多了。或许是冥冥中的必然,他看到了Ogre,在经历的那么多晦涩的代码后,学习Ogre已经不再是那么难了,他在同学的帮助下熟悉了部分Ogre,写了更多的代码,看了更多的代码。终于,他发现曾经如同天书的RTR,现在闪烁着金色的光芒,而他发现自己图形的基础实在太差了,而且对图形引擎的细节还是一知半解(游戏引擎更别说了)。于是他便开始阅读ogre的源码,并纳为己用......
我不知道还有没有像我这样的笨蛋,但现在回头想想,自己当初如果能有个人来指点一二,并且沉下心,多写代码,今天我能走的更远。下面就是推荐学习的路线:
0.耐下性子,认真学习数据结构与算法,至少要学到图。这是我当年没有好好做而如今最后悔的步骤,推荐书无所谓,严蔚敏的也行,allen weiss的最好,但最重要的是不是光去理解,而是自己去实现,你会发现后者比前者难的多。
1.DirectX的龙书,我推荐看清华大学翻译的这个,首先段菲翻译的的确很不错,有些地方译者还加了自己的话和推荐的书外阅读,虽然有些链接失效了,但这是原版没有的(准确的说是翁云兵先生翻译的版本里没有的,原文我没看过)。其次,处于尊重版权,我也推荐去买这本书,而不是下电子版,相信我,对于初学者来说,这本书在你学习3d编程的一两年内,你还是能在从中学到知识的。
2.实现龙书,我不是说把他的例子抄一遍。这时候你需要做的是,把龙书的代码推掉,利用龙书的所有内容,重新自己写一个小的demo,可以就是一个小场景漫游,但是希望你开动想象力,多写点逻辑,多写点独特的非图形的东西,不要觉得这很难,其实随便想一个简单的东西都有够你写的,推荐看这篇文章,你会发现灵感有时候没那么难出现:http://www.gamelook.com.cn/?p=15451
3.这个时候,如果上述步骤你都完成了,恭喜你,你已经不再是初级菜鸟了,首先,你需要去买RTR(Real-Time Rendering英文版 ,淘宝上影印80),然后,程序设计上我推荐买一本大话设计模式,把其中简单的模式看一下,看不懂的就别看(那说明你还没到那水平,或者说还没遇到过这个模式能解决的问题)。接着,推荐你阅读clayman大人很有名的一篇博客:http://www.cnblogs.com/clayman/archive/2009/05/17/1459001.html
然后去选择一个方向去阅读文中推荐的书籍,我推荐是地形和动画,因为这两个方向的书我看过。。。《Real Time 3D Terrain Engines Using C++ And DX9》网上有我翻译的中文版,虽然代码的确需要花一定的时间去理解(作为demo,代码写的不错,可以算一个小的图形引擎了),不过场景管理还是图形里相当核心的一块,所以读还是有好处的,不过我的建议也是读完4到9章和附录就可以实际编码了。而后者《Character Animation With Direct3D》代码浅显易懂,而且人物动画绝对是当今次世代的一个大头,我虽然没有全看完,但还是相信这本书绝对很值得一读。读完后最后重构你之前写的demo吧,并且加入这两本书的特性。
4 你将从菜鸟学院毕业了,现在的你对图形已经不再一窍不通,对程序结构也不再那么陌生。下面我终于要向你推荐Ogre了,你将很愉悦的略读一下《Pro OGRE 3D Programming》,(打工仔一帮人翻译了中文版),到此你当初写demo时的许多难题在这里或许能引擎共鸣,然后你将很轻松地阅读ogre的官网的初中级教程,如今的你手握一个文档详细,社区活跃的图形引擎,接着拿着他重新去写一个小游戏吧,要求还是一样,尽可能多地利用所学知识。
是的,我还想写第5条,但我忍住了,因为曾经有个笨蛋经过或跳过了上述几个阶段后,学到了甚至更多的东西,最重要的是如今他不再需要有人来指点,便可以确定自己该走哪一条路,虽然他不一定看不到旅途的终点,但已然能够嘹望到前方的光明。所以我相信,你也能:)
ps:希望大家有经济能力的还是购买正版书籍,亚马逊没那么麻烦,而且淘宝上其实有很多代购的。