microsoftxiao

记忆 流逝

导航

DirectX SDK资料问题

 

DirectX SDK资料问题。

  

Microsoft® DirectX® 9.0 SDK Update (Summer 2003)

Microsoft DirectX SDK (April 2006) 里的 资料和例子。

Microsoft DirectX SDK (April 2006)的文档 J:\Program Files\Microsoft DirectX SDK (April 2006)\Documentation\DirectX9 目录下。

这个文档仅仅是 DirectX的入门参考资料 查询 Dx API用的。而Dx SDK几乎是几个月就一更新,速度很快,所以 可以一周一关注微软的 DirectX站点。http://www.microsoft.com/windows/directx/default.mspx 这个站点提供应该最全面的最权威的DirectX资料,咨询,有新闻组,而国内的朋友大部分不经常去,是因为英文的问题。我也不经常去,也是因为英文问题。好,看DxSDK的例子。

 

打开DxSDK Document的,我们打开9的,不打开Dx10的。

看到 DirectX Graphics,这里主要将Direct3D的应用,概念,还有代码片段,原理。

因为自DirectX 8 就将 DirectDraw合并到了 DirectX Graphics, 但是Direct3D仍然是基于DirectDraw的, 一些如表面 Surface等的接口依然可以在Direct3D中看到。展开DirectX Graphics可以很容易看到 Tutorials and Samples,指南和例子。 指南里的几篇文章和代码和例子应该是基础的DirectX SDK编程的资料,但是由于是英文的,所以很多初学者退步。而一些不怕困难的家伙要么金山词霸就这么啃,要么自己翻译,要么狂找中文资料,最后还是要自己看。但是只要我们英语基础还可以看这个就没什么问题,并不需要你精通英语,另外程序员主要是理解代码,但是一个问题就是涉及到讲解原理 数学 物理的概念 算法的时候, 由于英语不好会造成 对文章理解的偏离和 理解的不透彻。 所以还要从代码下手,毕竟代码 就是 原理和算法的体现,而代码 无论哪个水平的高级的 低级的开源的都有,所以就是 看和理解的问题,以及时间分配的问题。(跑题了)

 

展开 Tutorials Samples我们看到 指南里 有系列文章 6篇。

这六篇文章都介绍什么了呢? 从基本的使用 Direct3D设备,到利用VertexBuffer

灵活顶点格式(FVF) 渲染顶点 使用 矩阵来描绘3D世界,通过 世界矩阵到

视图矩阵(View Matrix) 投影矩阵( Projection Matrix) 通过这三层变换来将

3D的对象, 转换为 2D的对象( 像素点 ) 渲染到屏幕。因为屏幕始终是平的。

另外还介绍了 如何使用光照 并说明了光照的类型,实现光照的原理。而Direct3D里的

光照是 近似计算的,或 模拟计算的,那么你会说为什么不用真实计算的,因为真实的光是非常耗费资源的,显示世界中光的物理特性,光的能量传递,光的色彩,光的变化等,无论通过软件模拟 还是 通过硬件实现 都很耗费资源,而在实现光照模型的算法上在现在的软硬件条件上绝对不能用完全真实的数学方法实现,也可以就是非常慢,只有期待硬件更强大,或者软件 算法更高效, 模拟的更逼真就可以了。这也就暗示在现阶段,简单的光照对程序性能影响不大,但是使用众多的静态 动态光 就会非常耗费资源,所以要慎重的使用光,

也就是说当学到一定程度时光照是你要经常考虑的问题。

 

另外还介绍了纹理贴图, Texture Map 也叫材质贴图 Material Map

通过在一个矩形区域加载上适当的静态或动态的纹理,以达到逼真的效果。

纹理贴图也是一个很重要的基础, 有凹凸贴图 法线贴图我目前的水平只能说出这么两种。

虽然我只说了两种, 但是根据我知道的,好象每一种效果的贴图都是一种纹理贴图,

什么意思呢? 就是 远远超过了2 10 几十种, 而且会不断增长,随意不要指望你能把所有纹理贴图技术都学全,那样你会忘记初衷,是为了做游戏,而不是做技术研究。除非你是研究员, 把基础的纹理贴图学了,以后再根据需要学习相应的贴图算法,或使用现成的库也来得及。

 

最后一篇指南介绍了 使用Mesh Mesh是网格模型,DirectX中使用.x 叫做

XFile的文件格式。 这种存储3D模型格式用来描绘游戏中用的3D模型。

这种格式 就像 3DS MD2 MD5 等格式一样, 目的就是存储模型。

但具体的细节就各都不一样。 在构造3D世界中,模型用来表示一个3D对象,

或者说,你要在游戏里有人 就要有 人模, 有动物,要有动物模,作为初学者,

我们想做游戏的冲动来源于我们热爱游戏,并希望自己也能创造一个绚丽的世界,

于是 刚开始的时候,我们就把自己的游戏世界想象的非常壮观,里面的东西要什么有什么,

你想一想,这要需要多少模型呢? 所以如果一个游戏里有1万个模型 和有1个模型

游戏的执行效率是天壤之别, 所以关于渲染模型的算法和模型格式的结构等也是很庞大的话题。 而这篇文章介绍了如何 通过DirectX的函数来渲染一个模型。当然,DirectX SDK

里提供了LoadMesh的方法, 但是不是优化的,也不较优化的,所以需要你自己

或是找更高效率渲染模型的方法。 我知道的算法有 BSP 二叉空间分割。

这个算法,可以分割一个模型,也可以用来管理场景,检测碰撞,用途广泛。

DOOM Quake Half Life CS Unreal 等众多 FPS游戏里都大量应用。

并演化出各自特点的BSP管理方法。 但是关于这个算法的讨论国内也不多。

也很少有人拿出易于理解的演示或片段,但终其原因在于这个方法本身就不简单。

因为通过二叉树地整个游戏世界进行管理,就要涉及到数据结构,而国内众多大学

也都有开数据结构的课,理解二叉树不是什么难事,但理解用二叉树来管理游戏场景,碰撞检测, 这个大学就不教了, 所以需要自己去理解。 好在Quake DOOM Half Life的代码里都有,但是那些游戏的代码都非常多,需要你自己把代码分离,支解,找到BSP的部分。

但是 我看见 CodeSample网站上似乎有一片关于BSP的简单演示。另外GameDev.net

上也应该有,所以应该多找找。当然都是鸟文的。

 

Tutorial最后还介绍了HLSL的使用。 目前HLSL是大势所趋, 通过HLSL来写顶点和像素着色器, 硬件厂商简化了 晶体管电路的设计,帮精力放在性能和画质上。

同时在软件上增加了 创造的灵活性, 而且未来 Dx10以后的显卡 都不再带有 固定渲染管线, 但是 HLSL也是个很大的话题,而这里给出了入门。其中包括一个通过

HLSL实现的顶点动画。如果把这点入门文章看懂,DirectX基本上就入门了。再深入就需要大量的Sample

 

Sample里大概提供了35个例子,目的就是让学习者了解DirectX都支持哪些新特性。

35个例子也会随着DirectX SDK的每个版本的发布而有变化,所以很多以前的例子

也许你就看不到了。比如Summer 2003里的一部分例子在 April 2006里就没有了。

那么你说看过这些例子,充分理解这些例子能做游戏了吗? 或者说能达到什么水平。

 

比如现在,April 2006里介绍了 自定义UI PRT ShadowMap SkinMesh Text3D这些。

都做什么呢? 可以自定义UI, 就是在游戏中 一些设定选项等。如 开始游戏

那些按钮, PRT好像是 关于光照的话题,我还没理解好, ShadowMap 阴影贴图。

通过此例子来学习如何通过阴影矩阵来创建 平坦阴影,另外还有ShadowVolumn,体积阴影, 就是像实际物体那样的投射自己的阴影,就比平坦阴影复杂些。就是说游戏中涉及到光和影的相关算法和处理 都是复杂的,但不是最复杂的。另外Text3D展示了如何在游戏中使用字体,更多的例子做什么的我就不多说了,但是要强调的一点是,简单的组合这些例子,或者通过指南和这些例子里的知识 技巧并不能 满足制作出一个可玩的小游戏。除非这个游戏玩法非常简单,比如贪吃蛇等。而且这些例子都是把DirectX 支持的最新技术拿出来,

所以应该算是微软给游戏程序员们的展示,说明DirectX 最新的API都能干什么,支持哪些新特性, 就是一种技术展示,以引导程序员去使用。 所以它并不是为了教学的目的,循序渐进的引导大家去做游戏。 所以这些例子只能做为了解新技术的参考,而具体怎么学做游戏, 一个是直接去找小游戏来改,努力读懂它,修改它,扩充它,直到掌握那个小游戏的架构和里面涉及的算法。另外就是去看书,和看文章。

书就有 windows游戏编程大师》 3D游戏编程大师》都是非常好的教材,介绍的全面,且循序渐进, 但是都要求你有相关 C/C++的阅读和使用基础。

而文章则非常凌散,需要自己去整理, DirectX 8 DirectX 9的入门文章几乎都是照抄

DxSDK Document里的入门指南文章。 所以文章就更没有什么循序渐进了。

 

所以适当的方法就是 既阅读《windows游戏编程大师》 又自己去修改代码,努力把自己的时间分配好, 不分配好的话,会发现忙呼了一年,两年,也弄不出个完整游戏。

我就是那样,所以我正在努力改正之, 初学者切记切记。

 

后记:

 关于DirectX或者OpenGL的资料有很多,而少的是中文资料。所以我们并不寄希望于中文资料,而微软的DirectX SDK软件开发包里的文档是非常不错的API参考资料。里面也从各种图形学 文章 GDC 游戏开发者们的文章中摘取各种原理 示范的片断。但是如果做游戏入门本身的话,有C++ WinAPI 网络编程 数据结构 数据库基础的话,DirectX SDK本身就是一个非常好的参考资料。 我说说里面的文章和例子。

posted on 2006-10-06 21:45  龙巢NET刀  阅读(1925)  评论(1)    收藏  举报