Game Programming with DirectX -- 00[序言]
序言
我是数学出身的程序员,所以在这个系列中我会讲解很多的数学模型.
再有, 这个系列是以一个完整的3D游戏为背景的.
环境
DirectX9c SDK
的编译环境是要求Windows XP, Windows Server 2003, Visual Studio .Net 2003 or 2005.
基础知识
这个系列的基础知识 :
a. C/C++; 使用DirectX 的native API.
b. Windows SDK programming skill.
c. COM basic skill.
d. 几何学和高等代数
第零卷 简介
0.1 图形技术的发展
0.1.1 硬件的发展
我们可以从图0.1了解大致的过程.
字符显示 基于位图的图形 覆盖图 实时视频 AGP
------------------------------------------------------------------------------------------->
Multiple/Soft 字体 图形协助处理器 简单3D 高级3D
图0.1
0.1.2 AGP的由来
随着硬件的发展, 显示卡有了自己的内存--显示内存, 图0.2显示了当时的硬件结构.
图0.2
系统扩展总线的一边是CPU和系统内存; 另一边是GPU和显示内存. 正象它们的名字的暗示一样, 在主板上的系统内存可以很轻易的被CPU访问, 但GPU却不能自由访问, GPU只能自由访问显示内存.
如果GPU要系统内存中的数据, 必须由CPU负责从系统内存复制到显示内存,必须通过性能有限的扩展总线.
于是主板就为GPU开了专线--AGP(图0.3), AGP的作用是给GPU访问系统内存开了后门, 在CPU不必知道的情况下自由访问.
当扩展总线还是双道的普通公路时, AGP已经是8道的高速公路了.
图0.3
0.1.3 DirectX的由来
Windows图形显示操作系统在PC上有着辉煌的历史, Windows所提供的应用程序与硬件设备完全分离的特性使得程序员不必为不同的硬件在代码中加入不同的硬件依赖指令, 对于普通的应用程序这是个好想法; 但这个特性对游戏和多媒体程序员来说是个噩梦.
为把应用程序与硬件设备完全分离, 在应用程序与硬件设备之间添加了N层的隔离, 你只能调用最上层的命令, 让最上层再依次调用它相邻的层, 这样一层一层往下调用, 到最下层后再通知硬件设备的驱动层, 驱动层才命令硬件设备为你的调用服务.
------ 近在眼前但似远在天边...
图0.4为图形显示的层次调用
图0.4
于是又一专线来了--DirectX, 它是Windows系统下的游戏和多媒体专线, 如图0.5为图形显示DirectX Graphics
图0.5
DirectX Graphics的工作很简单, 如果硬件设备提供相应的硬件加速功能, 那就用硬件加速; 如果没有相应的硬件加速功能, 那就软件模拟; 之后就通知硬件设备的驱动层.
0.1.4 DirectX的Directness原理
a. 最快速 --- 同硬件厂商合作实现特定的硬件功能.
b. 最短延迟 --- 达到子弹打到你时就能听到你的惨叫, 不会象恐龙一样N秒后才怪叫.
c. 底层接口 --- 提供最基本的功能, 同样的游戏在不同创造性和革命性的程序员手里出来有本质的差别;
你能作出魔兽的效果吗? 为什么我们就不能呢?
0.2 DirectX
0.2.1 DirectX Components
前面废话了很多, 现在我们要结束跑题了. 我们首先来看看DirectX的组成模块,
a. DirectX Graphics --- 图形模块
b. DirectX Input --- 输入/控制模块
c. DirectX Audio --- 音效模块
d. DirectMusic --- capture and play sounds模块
e. DirectDraw --- 被废弃, 由DirectX Graphics中的Direct3D接管
f. DirectPlay --- 被废弃, 由Windows Sockets代替
g. DirectShow --- video and audio playback or capture模块, 不再是DirectX的模块, 由Platform接管
h. DirectSetup --- 自动安装DirectX模块
我们主要讲解兰色的部分, 再包括算法和AI.
0.2.2 DirectX Graphics
这个模块只包括Direct3D.
我们游戏显示的虚幻的世界都是由Direct3D来创建的, 这部分是最最主要的, 我们会化大半的时间来讲解如何展示你心中的梦想,以及你要用Direct3D来实现梦想要掌握的数学模型知识.
0.2.3 DirectX Input
这个模块只包括DirectInput和XInput. XInput是Xbox 360 连接到Windows PC后的控制的部分, 我们不讲解.
如何控制游戏, 我们是通过DirectInput.
0.2.4 DirectX Audio
这个模块只包括DirectSound和XACT. 我们只讲解DirectSound.
0.2.5 算法和AI
这里将展示如何让虚拟的人物和怪物更人性化的在虚拟世界里活动.
0.2.6 综合运用
结合上面的内容, 我们要建立一个完整的3D游戏.