DirectX9EffectFramework介绍与应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DirectX9EffectFramework介绍与应用

DirectX 9EffectFramework 介绍与应用摘要 本文简要介绍了在DirectX 9 SDK中提供的Effect Framework支持,以及DirectX FX文件结构和Microsoft Hight Level Shading Language的基本知识。本文假定读者对DirectX Graphics有一定了解,并正在学习DirectX Effect Framework。希望能够与各位读者共同探讨、切磋。 简介 Effect的起源 在计算机3维场景中,物体表面的材质代表了其光学特性。最简单的材质可以表现为Diffuse颜色,Specular颜色,Emissive颜色等信息的集合;而为了表现物体表面的细节,可以 在材质中加入一张纹理——这些就构成了最基本的材质信息。在以前的Direct3D程序中,这些信息可以直接传送给设备,由设备自动根据它们来计算物体表面的光学效果。但是, 仅仅有这些基本的材质信息,已经不足以满足游戏制作者的要求和游戏玩家的要求了——他们希望场景中的材质更加复杂,具有更多的细节,更加逼真。 在Direct3D中,除了材质的概念,还存在一个渲染状态(Render State)的概念。在Direct3D Device中存在很多的渲染状态,它们可以在Direct3D进行渲染时控制渲染的流程和效 果,从而实现某些带有特效的材质。程序员可以通过IDirect3DDevice*::SetRenderState()方法来设置这些状态。所有的渲染状态都是一些特定的数值。对状态的设置可以通过硬 编码完成,即在程序中调用SetRenderState()方法,将设置什么样的状态“写死”在程序里,但是这样做的缺点就是太不灵活了——如果想要实现一种新的渲染状态,就需要修改 程序代码。所以更好的一种方法是将为了实现某一种特效材质的一些渲染状态值记录到一个“效果文件”中,通过在程序运行时读取该文件,从中分析出这些值,并将它们作为参 数调用SetRenderState()。这样,要想实现一种新的特效,只需修改“效果文件”而不用更改代码。 Direct3D SDK是通过Effect Framework来支持这种机制的。而前面所述的“效果文件”在Direct3D中是以*.fx文件存在的。在fx文件中保存了为实现某一特效的渲染状态,包括状态名 称和它们的对应值。所以在9.0以前版本的DirectX中就已经有Effect Framework和FX文件了,早期的Effect Framework仅仅是为了实现对渲染状态进行控制。 但是随着计算机显示硬件技术的发展,图形处理单元(GPU)正在重复CPU所走过的路——新一代的GPU已经具有了可编程特性,程序员可以通过对GPU编写一段程序来控制其渲染的 输出效果。这种程序一般称为Shader程序。目前的Shader程序分成两种,Vertex Shader和Pixel Shader。Vertex Shader主要用于对3维网格模型的每一个顶点进行处理,而Pixel Shader主要用于对要绘制到屏幕上的每一个象素进行处理。通过Shader,程序员可以制作出相当丰富的实时渲染效果。 同CPU一样,对GPU编程也是借助一定的编程语言来进行的。 在DirectX 8中,对GPU的编程是通过一种类似于汇编的语言进行的。而在DirectX 9中,使用了一种类似于C语言的高级语言——Microsoft High Level Shading Language (HLSL) 。 无论使用什么语言对GPU编程,都需要把编译好的Shader程序输送到显卡去。Direct3D Device可以通过SetVertexShader()和SetPixelShader()来向显卡输送Shader程序。然而,由 于Shader和材质具有十分紧密的关系——一般来说,一个Shader就是为了实现一种特殊的材质——最好是能够将Shader程序与材质进行整合。 所以,在DirectX 8和DirectX 9中,原来的Effect Framework发生了扩充——在原来的基础上加入了对Shader程序的支持。程序员可以把Vertex Shader和Pixel Shader程序以函数 的方式直接书写在FX文件中。 ?.FX文件 FX文件中的内容大致可以分成几部分: 预编译标志 变量表 结构定义 函数 Technique 预编译标志:预编译标志包括 #define #elif #else #endif #error #if #ifdef #ifndef #include #line #pragma #undef 其中最常用到的是#include和#define,同C语言中的意义很相似:用#i

文档评论(0)

cuotian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档