【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3095|回复: 1

DirectX 9.0高级 游戏编程(绪论)

[复制链接]
发表于 2005-7-30 21:38:03 | 显示全部楼层 |阅读模式
Advanced 3D Game rogramming with DirectX 9.0(中文版)

写在前面的话:
本书谨献给所有OGDEV论坛上网游研发爱好者和专业人士,让我们一起为本行业的发展贡献自己的微薄力量。
如需转载本人翻译的书藉,请注明转载出处,谢谢!感谢Peter Walsh 为我们写了如此好的文章,让我们一起来学习它。

【注意】由于本人知识所限,翻译过程中会有很多难免的错误,而且,本书所有的文字都是根据我自己的经验,加入我自己的理解后写出来的,如果间接对大家造成误导,恕不负责,呵呵,极力推荐大家看原文。

ps:最近比较忙,因此原本前天就应该放出的绪论部分到今天才放出,呵呵!不过好歹也出来。

绪论

为什么写这本书?

    在我刚进入游戏开发领域的时候,我曾经带着很多疑难问题,向一些优秀的人请教,问了他们大量的问题。我发现有一点非常重要,那就是大家应该与他人共享他们所拥有的游戏开发行业中的知识,如果每个人把他们的学到的知识共享出来,每个人就可以从其他人那里获得更多更全面的知识,这是一件很好的事情,因为这样我们就可以开发出更好的游戏。没有人可以自己一个人研究计算机图形和游戏编程的所有原理,也没有一个人可以从虚无飘渺的地方学到东西。如果大家愿意花时间和我一起分享他们学到的东西,那么我也会花时间和他们一起分享我学到的东西。

谁应该看这本书?

    这本书倾向于面向那些已经知道如何编写程序,但是在图形/游戏编程方面刚刚有点头绪或者根本没有头绪的人。比如其他领域的程序员或者希望着手从事一点项目实践的大学生。

谁不应该看这本书?

    这本书不是为初学者而设计的。我并不是自视其高,我相信一个初学者如果觉得自己有能力,那么他或她也可以看完这本书。但是,有时候我为了讲清楚一些事情,需要引入一定的概念(比如C++中的继承)。如果你以前从来没有进行过编程,那么你在阅读本书时会感到非常吃力。

使用本书中的代码的必要条件是什么?

    这些都是使用Microsoft Visual C++ 6.0写的C++代码。下载文档(http://www.wordware.com/files/dx9)中同时提供了.DSP 和 .DSW文件,.DSP文件可以在6.0以前的版本中工作,但是.DSW文件只能在6.0或者更高的版本中工作。如果你选择使用其他的编译器,需要把源代码转换成编译器能工作的代码。

为什么使用Windows平台,不使用Linux平台?

    我之所以选择Win32作为API环境,是因为90%以上的计算机用户都在Windows上进行工作。Win32并不是一个很好理解的API,特别是在已经习惯了DOS代码风格以后,但是我想这并不是一个可怕的事情。其实我可以选择在其他平台上工作,但是如果这样做的话,我将会失去9成以上甚至更多的读者。

为什么使用Direct3D,不使用OpenGL?

    OpenGL是另一个图形API,你可能从来都没有用过它。它是Silicon Graphics(硅谷图形图象公司,众所周知的Maya生产商Alias也是他们的一个子公司。)在上个世纪90年代初期设计的,专门用于他们的高端图形工作站。它已经被用于无数个平台和操作系统。在游戏行业之外的领域,比如模拟和学术研究,OpenGL是进行计算机图形操作的标准。它是一个简单的,精致的,快速的API。访问http://www.opengl.org可以得到关于OpenGL的更多信息。

    但是它并不是完美的。首先,OpenGL包含大量的函数。像开发一个接口虽然这是很简单的事情,但是为了确保每个方面都正确工作,它的实现却需要兼顾到很多细节。同时因为是通过驱动程序实现的方式,每一个做3D卡的公司为了开发一个优良的OpenGL驱动程序,他们就必须支持OpenGL的全部特性。要想正确实现这些驱动程序是非常困难的,而且,在相同硬件上开发的图象的性能也会因为驱动程序品质的不同而不同。而DirectX是由微软控制的,它有一个好处就是能够很快的和新的硬件特性相兼容,OpenGL的扩展则需要经过相关协会的深思熟虑后才能进行。

    我的初衷是想开发两个版本的源代码,一个是用于Windows和DirectX,另一个用于Linux和OpenGL,但是以不可能而告终,因此我必须选择一个来开发,最终我选择了Direct3D。

为什么使用C++,不使用C,ASM或者Java?

    当我计划写这本书的时候,我有很多语言可以选择。虽然Delphi,VB,甚至C#都是不错的语言,但是被我认真考虑过的只有C++,Java和C.。Java是Sun Microsystem设计的,它是一个面向对象语言,具备一些高级语言特征,但我认为它就像是垃圾的集合。C是最接近汇编的低级编程语言,它缺少高级语言的结构,不能对事物进行抽象。

    C++是一门非常有意思的语言,因为它的功能介于其它两者之间。C++比C能够更好地支持COM(关于这一点我们将在第一章彻底地来讨论它)。类和操作符重载使代码更加易读(当然,所有好东西也可能会被滥用)。Java,虽然也很酷,但它是个解释性的语言。虽然JIT编译器变得越来越快,并且支持越来越多的API,但是,我还是选择C++,我认为C++更适合这本书。到目前为止,Java还是一个非常年轻的语言,它还会有很多变化(也就是说不稳定:))。

我需要3D加速器吗?

    需要的。如果单纯从技术上来说,那么你根本就不需要任何加速器,使用Direct3D软件就完全足够工作了。但是,你会发现即便是开发出来一个简单普通的场景,它也非常缓慢,不能够很好的实时运行。不过,现在你即使想买一台没有3D加速器的计算机都不可能了,而且,本书上所有的代码,你用低于100美元(在中国没有那么贵,呵呵,现在所有的显卡都是带3D加速的,因此大家不用担心。)的加速器就完全可以处理。

在这本书中C++知识有多重要?

    有些人将C++视作神刃,他们花了大量时间去掌握模板类,这些你可能从来没看到过。他们为自己所有的类重载了iostream操作符,但他们视多重继承却好像魔鬼一样。而我,则只是将C++当作一个工具,它的很多深奥的特性(比如iostream 库)我根本就不知道,我只会使用一些需要用的少量特性(就像多重继承)。坚持一个好的代码风格是非常宝贵的,写这本书中的代码花了我11个月的时间,外加上3次的修订。所有的代码,我都按照C++的编码习惯进行了注释,我希望你也能读得懂。

源代码中所使用的规范是什么?

    我所读过的编程书中,有一本伟大的书叫Code Complete(微软出版社)。这是一本关于如何写好程序(不是如何编程)的手册。在一些像变量名的长度,子程序的设计,文件的长度等细节上,这本书对此进行了详细的讲述。我强烈建议每个立志成为伟大的程序员的人都应该读一读它。你能注意到,我在本书所使用的一些规范跟Code Complete书中所描述的规范非常相似,另外一些,则是从那些伟大的游戏程序员就像John Carmack那里学习所得,还有一些则是从DirectX,MFC和Win32的源程序所得。

    我努力地试着使本书的代码对所有人都可用,我在我认为不清楚的地方进行了注释。我尽量选择好的变量名,并且努力使我的代码看起来干净整洁,同时不影响速度。当然我不可能让所有的人满意。本书中有一些C++编码标准我可能并没有完全遵守,为了使程序运行速度更快,有一些代码也可能会让你感到迷惑。

    如果你以前从来没有使用过C++或者是个编程新手,你将很难看懂本书。C++ rimer(Lippman et al.Addison-Wesley出版)是一本讨论C++语言和其编程必要性的好书,建议你先读一下。

类/结构名

    MFC使用C作为前缀来命名它的类。举个例子,代表Button功能的类就叫做CButton。我挺喜欢这个规范,但是为了避免命名空间冲突,我只能用小写的c作为我自己创建的类的前缀,小写的s做结构的前缀,小写的i做接口的前缀,小写的e作枚举的前缀(cButton 或者sButton)。

    这里有一个例外,虽然很多类都倾向于将功能隐藏起来作为一个组件,但是有一些类或者结构却倾向于使用其基本原型。因此,在使用基本的数学原型比如point和matric的时候,我没有使用前缀,只是用原型的维数作为后缀加在它后面(2D的point就是point2,3D的point就是point3,如此等等)。同理,所有数学原型有许多被重载的操作符都用这种方式处理。

变量名

    半长变量名是一个很好的东西。它们让你的代码有了自我注释,但是需要注意一件事情:如果变量名太长,不但会使你的代码难易阅读,而且会不方便书写。

    我有时会使用短的变量名,在本书我的循环代码中就出现了很多int i,j,k,而且,我会尽量给我所使用的每个变量赋予有意义的名字,通常,这意味着每个变量不只有一个单词组成。

    匈牙利符号是一种流行的变量命名系统,我们将在第一章中接触它。我不很精通它,但是float类型的变量,我一般加上”f”前缀,int类型的变量,一般加上”i”前缀,指针类型变量加上”p”前缀(举个例子:float fTimer;int iStringSize;char* pBuffer)。
请注意,前缀作为变量名的第一个单词,在它后面再跟上其他所有的单词。(我发现pBuffer比pbuffer更具可读性)

随带文件

    本书随带的文件你可以从以下站点下载:http://www.wordware.com/Files/dx9;这些文件包括了一些书中讨论的一些源代码和一个叫Mobots Attack的游戏源码。由于每一章(包括游戏)都有自己独立的工作区(WorkSpace),因此可以被独立编译运行。

by 天天上网  2004-05-23 1:30 at home
发表于 2006-7-16 15:06:49 | 显示全部楼层
Advanced 3D Game Programming with DirectX 9.0(中文版) 这本书在哪可以下载呀?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 04:14

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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