《Direct 3d中的2D编程》教你游戏编程的方法和技巧,帮你创建自己的游戏。如果你有一些C或C++的基础,并且正在导找能够带领你从2D编程世界跃入三维世界的书籍,那么现在你将不再苦苦觅!有本书你可以学到从2D API转向Direct3D的所有技巧。本书以2D程序员的视角进行编写,用一种易于理解和便于使用的形式详述了Direct 3D API的编程基础。让我们一起跃入《Direct 3D中的2D编程》为你打开Direct 3D世界吧!
第1部分从DirectDraw7.0到Direct3D8.0
第1章初始化Direct3D
1.1初始化步骤
1.21Direct3D8对象的用途
1.3创建IDirect3D8对象
1.4性能检测
1.5显示格式
1.6兼容格式检查
1.7总结
第2章创建设备
2.1创建IDirect3DDevice8对象
2.2设置视区
2.3Direct3D颜色和清除视区
2.4显示场景
2.5重置显示模式
2.6总结
第3章顶点格式
3.1Direct3D的用途
3.2表示顶点数据
3.3变换或者未变换
3.4顶点缓冲
3.5索引缓冲
3.6总结
第4章渲染图元
4.1渲染状态
4.2开始和结束一个场景
4.3图元类型
4.4不使用顶点缓冲来绘制图元
4.5带有用户内存指针的索引图元
4.6用顶点缓冲绘制图元
4.7用索引缓冲渲染索引图元
4.8总结
第5章表面
5.1资源类型
5.2后备缓冲
5.3图像表面
5.4从一个表面拷贝到另外一个表面
5.5加载图像
5.6Direct3D光标
5.7创建额外的渲染目标
5.8总结
第6章纹理
6.1创建纹理
6.2加载纹理数据
6.3纹理坐标
6.4应用纹理到图元上
6.5纹理寻址模式
6.6多重纹理
6.7总结
第7章Alpha测试
7.1Alpha测试的概述
7.2将图像作为纹理进行加载
7.3一个图像,多个纹理
7,4总结
第2部分Direct3D扩展
第8章坐标空间
8.1坐标空间的类型
8.2几何流水线
8.3总结
第9章矢量
9.1矢量定义
9.2D3DVECTOR
9.3矢量加法
9.4矢量减法
9.5缩放矢量
9.6绝对值
9.7方向
9.8标准化
9.9旋转
9,10点乘
9.11叉乘
9.12D3DX矢量函数
9.13总结
第10章矩阵
10.1矩阵概述
10.2矩阵加法
10.3矩阵乘法
10.4平移
10.5矩阵旋转
10.6缩放
10.7D3DMATRIX
10.8D3DXMATRIX
10.9总结
第11章几何流水线
11.1流水线
11.2设置变换
11.3乘以变换矩阵
11.4总结
第12章Z缓冲
12.1Z缓冲的定义
12.2设置Z缓冲
12.3使用Z缓冲
12.4总结
第13章光照
13.1Direct3D光照
13.2D3DMATERIAL8
13.3D3DLIGHT8
13.4点光源
13.5直射光
13.6聚光灯
13.7环境光
13.8镜面反射光
13.9放射光
13.10小结
第14章Alpha混合
14.1Alpha混合的定义
14.2设置A1pha混合
14.3使用A1pha昆合
14.4总结
第3部分综合运用
第15章模型
15,1模型的定义
15.2X文件
15.3创建一个简单的X文件加载程序
15.4总结
第16章粒子系统
16.1粒子系统的定义
16.2粒子系统的要素
16.3粒子类型
16.4存储一个粒子系统
16.5粒子的生命周期
16.6渲染粒子
16.7一个粒子系统例子
16.8总结
第17章多边形中的点
17.1三角形中的点
17.2总结
第18章总结
18.1大型游戏在哪里
18.2你学到了什么
18,3何去何从
18.4总结
索引
2001年,在听到微软决定从DirectX的8.0版本中完全去除DirectDraw的消息时,我几乎不敢相信白己的耳朵,因为这意味着从此之后必须使用3D接口来完成所有的2D图形处理。在由DirectDraw向Direct3D过渡时,不少2D程序员深感此过程的痛苦,因为市面上所有和Direct3D相关的书或互联网上的教程,都是从3D程序员的角度进行书写的,而不是从一个2D程序员的角度,这也给读者的理解增加了不少困难。的确,在和朋友们进行交流的时候,他们也常谈到由于该类书籍的缺乏带来许多学习上的不便。因此,寻找一本好的2D编程书籍成了我用心关注的一个问题。
转眼间时至2004年夏,当重庆大学出版社的社长助理陈晓阳询问我是否有兴趣翻译由Premier出版社出版的这本有关2D游戏编程的书籍时,我意识到这本书如若能成功翻译,将无疑会成为广大2D游戏程序员的福音,于我本人,也达成了自己的心愿。因此,尽管犹豫数番,我还是选择了冒失受命,兢兢业业、夜以继日地完成了译稿工作。
本书是原著者数本广受读者欢迎的游戏编程书籍之一。细心的读者可能会发现,本书略去了WIN32/DirectX部分的讲述(一来降低了书的价格,二来在于市面上专门讲述WIN32/Dire,tX知识的书籍已经非常之多),开篇即直奔主题,由浅人深地从2D游戏编程知识逐渐向有关3D游戏编程的知识进行讲述,还不断对二者进行了穿插讲述。本书的前半部分主要讲述如何使用Direct3D来实现使用DirectDraw所能实现的功能,详细解释了诸如顶点缓冲、纹理等基本概念,并切实解答了如何创建多重纹理、如何用顶点缓冲渲染图元等问题;后半部分开始逐步介绍3D相关的知识,从读者角度考虑,用易于理解的方式详细讲述了诸如z缓冲、alpha混合、光照、x文件、粒子系统等较高级的主题。这两部分知识的结合为读者从2D世界跨越到3D世界搭设了一道桥梁,使读者在阅读完本书后,能彻悟Direct3D的知识,因此也就能在阅读其他难度更高的Direct3D书时,感到更轻松一些。因此,在翻译该书的过程中,我感到,对2D游戏程序员来说,这是一本知识详尽且有较强实用性的游戏编程书籍,并且凭借自身的体验及了解,我也向大家推荐这本不可多得的好书。
在翻译本书的过程中,我也历经了必然的喜悦与忧愁。喜的是有幸如此深入地研读域外大家之作,拓宽视野,使自己在游戏编程方面更进了一步;忧的是翻译过程中,既要体味原作者的思想本质,又要把握他们的语言风格,还要用国人习惯的表达方式陈述出来,实非易事。由于译者水平所限,不当之处难免,敬请读者惠赐批评。请致电邮:jizhouhuang@cqu.edu.cn.
最后,我要深深感谢我的导师杨丹教授和文俊浩副教授,导师的宽容、鼓励和中肯的批评给了我无尽的教益和启迪,而他们为我创建的充满希望、进取精神的环境促进了这本书的早日译成。同时,我特别感谢重庆大学出版社的社长助理陈晓阳以及袁江等编辑,是他们给了我这样一个不可多得的学习机会。社长助理陈晓阳的大力支持、无私指导,令我难以忘怀;而袁江以及其他参与此书编辑审核的老师们踏实负责、肯干的态度也极大鞭策了我。本书能够尽快译完付梓,是那些一直寄予我关心而我在此无法一一述及的所有师友的信念激励的结果。对他们的莫大帮助,在此诚谨致谢!
黄际洲
2004年12月10日
于重庆大学校园