`
luliangok
  • 浏览: 779143 次
文章分类
社区版块
存档分类
最新评论

[待整理]IDirect3DDevice::SetRenderState()中的参数作用说明

 
阅读更多
疯鱼无阻
http://bbs.ogdev.net/TopicContent.aspx?BoardID=2&TopicID=1960&Page=1

我把根据SDK的帮助文档翻译,结合自己的理解写出来,大家来看看,请指出不正确的地方.

DDRS_ZENABLE用于控制深度缓存的状态。它的状态是用一个枚举类型来表示的:D3DZB_TRUE、D3DZB_FALSE和D3DZB_USEW。在D3D中z-buffering是对z轴上的信息起作用,所以,如果你需要表示的是2D信息的话,可以用pd3dDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);关闭z-buffering。比如游戏中的UI,需要用到一些控制面板之类的DD,这个时候就是需要关闭它的。这个渲染参数的默认值是跟D3DPRESENT_PARAMETERS中的EnableAutoDepthStencil的值是相关联的;如果这个值是TRUE,那么渲染状态就是D3DZB_TRUE,反之为D3DZB_FALSE。

D3DRS_FILLMODE从名字看的话,这个渲染模式是用来;控制填充模式的,它的值也是一个枚举类型D3DFILL_POINT、D3DFILL_WIREFRAME和D3DFILL_SOLID。默认值是D3DFILL_SOLID,不过这个值的作用现在还没有看出来。:P

D3DRS_SHADEMODE这个参数控制的是阴影模式,默认值是D3DSHADE_GOURAND,翻译过来一般是叫做高络德渲染。另外两个D3DSHADE_FLAT和D3DSHADE_PHONG。高络德阴影模式是对一个三角形的3个顶点的颜色进行线性叉值算法得到的。平面阴影模式只利用三角形的第一个顶点进行描述。很显然用D3DSHADE_GOURAND渲染方式可以得到更加逼真的阴影效果。

D3DRS_ZWRITEENABLE默认值TRUE表示可以写深度缓存,这个参数可以保护深度缓存不被系统修改。深度比对规则是依照D3DRS_ZFUNC参数的,如果值为FALSE的话,假设深度缓存被修改,但是这个值却不能写进缓存。

D3DRS_ALPHATESTENABLE这个参数将允许每个象素点都做alpha测试;如果测试通过的话,这个象素就会被帧缓存处理,否则的话,它会被所有帧缓存忽略掉。这个测试其实就是通过D3DRS_ALPHAFUNC参数提供的对比函数,比较输入的alpha值和参照值之间的差别,这个参照值是由D3DRS_ALPHAREF参数确定的,默认值是FALSE。

D3DRS_LASTPIXEL默认值是TRUE,绘制一条线的最后一个象素,如果是FALSE,就是不画。这个参数的主要作用是在绘制线框的时候体现出来的,假设我们要画一个矩形边框,有时候,矩形的两条线段的端点会出现重叠的现象,影响效果,这个时候,你可以把这个参数设为FALSE;但是要注意的是,除非你有明确的目的,一般不要轻易修改这个参数的值,它可能导致线框的结合处出现断开的现象。

D3DRS_SRCBLEND和D3DRS_DESTBLEND是用来设定支持的混合模式。

D3DRS_CULLMODE这个参数用来指定三角形背面的剔除方式。它的值是一个D3DCULL类型的枚举类型。D3DCULL_NONE,不要剔除背面;D3DCULL_CW,按照顺时针的方向的顶点剔除背面;D3DCULL_CCW,按照逆时针方向剔除背面。而最后一个就是默认值,还没弄清楚区别在什么地方。

D3DRS_ZFUNC这个参数在前面有提到,与D3DRS_ZWRITTENABLE有些关联。它的值是D3DCMPFUNC枚举类型的值;默认值是D3DCMP_LESSEQUAL。它允许程序根据一个象素距离摄像机的长度来接受或者拒绝它。这个象素的深度值会与depth-buffer的值进行比较,如果通过了这个测试,这个象素就会被写。实际上,如果象素没有通过测试的话,软件光栅处理和很多硬件加速都会更加快一些,因为不要渲染象素的话,就不需要对纹理进行过滤和调节。

D3DRS_ALPHAREF设定象素alpha测试的参考值,它的值是一个DWORD型的低8位,区间是从0x00000000到0x000000ff。默认值是0。

D3DRS_ALPHAFUNC这个参数允许程序根据象素的alpha值来决定是否接受。类似D3DRS_ZFUNC。

D3DRS_DITHERENABLE使程序允许抖动,默认是FALSE。

D3DRS_ALPHABLENDENABLE允许使用alpha混合,默认是FALSE。而混合类型是由D3DRS_SRCBLEND和D3DRS_DESTBLEND决定的。

D3DRS_FOGENABLE允许烟雾混合,也就是常说的烟雾效果。默认FALSE。

D3DRS_SPECULARENABLE打开镜面反射效果,默认是FALSE。

D3DRS_FOGCOLOR设定烟雾颜色。

D3DRS_FOGTABLEMODE这个烟雾公式被用来计算象烟雾,设定烟雾模式,默认值是D3DFOG_NONE,另外还有D3DFOG_EXP,D3DFOG_EXP2,D3DFOG_LINEAR。

分享到:
评论

相关推荐

    E_D3D9 Beta3模块源码

    删除与基类重复的方法,相对减少源码体积(不多,约20KB).3:[+]ID3DXPMesh 之前版本漏掉了(MSDN内没有,d3dx9mesh.h中有).4 [+]ID3DXSPMesh 之前版本漏掉了(MSDN内没有,d3dx9mesh.h中有).5:[+]IDirect3D9Ex。6:[+]...

    拉伸IDirect3DSurface9

    我如何将一个IDirect3DSurface9拉伸到另一个?功能IDirect3DDevice9 :: StretchRect无法在屏幕外的表面上使用。

    ColorFill_D3D11Texture2D.rar

    对ID3D11Texture2D实现颜色填充(对D3D11实现IDirect3DDevice9::ColorFill效果) 运行环境VS2019 编Rlease x86版本

    D3D游戏程序设计入门

    Direct3D 的IDirect3DDevice9::Clear 方法。图1.1 显示了应用程序、Direct3D 和图形设备之间的关 系。 图1.1 图1.1中Direct3D所表示的是Direct3D中已定义的,供程序员使用的Direct3D接口和函数的集合。 这些接口和...

    D3D8 hook 游戏屏幕写入文字

    可以在D3D8的游戏中写入自己的文字。hook 了IDirect3DDevice8::EndScene 来实现屏幕写字。希望对这方面感兴趣的童鞋有所帮助。 该示例由PowerBasic编写,很容易读懂。

    Direct3D中实现图元的鼠标拾取

    Direct3D中实现图元的鼠标拾取

    006-【直播】D3D绘制一个圆(郁金香).c

    d3d9 画平面圆 void DrawCircle( IDirect3DDevice9* pd3dDevice, int xCenter, int yCenter, int nRadius, D3DCOLOR FrameColor)

    idirect卫星通信系统 产品及技术优势介绍

    3. iDirect 全球网络管理系统(NMS) 4. iDirect 虚拟网络运营商(VNO)、用户网络检察员(CNO) 5. iDirect 与移动通信 6. iDirect 系统其它方面的优势 6.1 小站安装容易 6.2 Rx CRC 关联 6.3 自动波束(网络)切换...

    易语言D3D模块源码

    6:[+]IDirect3DDevice9Ex 7:[+]IDirect3DSwapChain9Ex 8:[+]IDirect3D9ExOverlayExtension 9:[+]IDirect3DDevice9Video 10:[+]IDirect3DAuthenticatedChannel9 11:[+]IDirect3DCryptoSession9 12:[+]...

    用Direct3D设计淡入淡出的效果(演示程序)

    在纹理和顶点混合的初期,我们可以调用IDirect3DDevice9::SetTextureStageState函数来进行操作。下面是这个函数的声明: HRESULT SetTextureStageState( DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD ...

    DIRECTX.9.0.3D游戏开发编程基础.pdf

    3.4.2 IDirect3DDevice9::DrawIndexedPrimitive 3.4.3 Begin/End Scene 3.5 D3DX几何体 3.6 例程:三角形、立方体、茶壶、D3DXCreate* 3.7 小结 第4章 颜色 4.1 颜色表示 4.2 顶点颜色 4.3 着色 4.4 例程:...

    directx 3d 实例

    IDirect3DDevice9 *g_pD3DDevice = NULL; // Sky vertex structure, fvf, vertex buffer, and texture typedef struct { float x, y, z, rhw; float u, v; } sSkyVertex; #define SKYFVF (D3DFVF_XYZRHW | D3DFVF...

    Introduction to 3D Game Programming with DirectX 9.0

    3.4.2 IDirect3DDevice9::DrawIndexedPrimitive 80 3.4.3 Begin/End Scene 81 3.5 D3DX几何体 81 3.6 例程:三角形、立方体、茶壶、D3DXCreate* 83 3.7 小结 87 第4章 颜色 89 4.1 颜色表示 89 4.2 顶点颜色...

    NVIDIA Cg 2.2 February 2010

    IDirect3DDevice9 pDev 然后Initialization CG(参考initCG函数定义) Step2 1:注册CgFX状态 从固定管线接管纹理状态 根据cgfx文件名创建Effect对象 cgD3D9RegisterStates myCgContext ; CGcontext myCgContext ...

    d3d8to9:D3D8伪驱动程序,可将API调用和字节码着色器转换为等效的D3D9

    关于某些源代码文件包含的内容的快速概述: 文件描述 主要D3D8入口点Direct3DCreate8定义 IDirect3D8接口的实现,包括设备创建 IDirect3DDevice8接口的实现,包括着色器转换 否则将在d3d8.h中找到所有使用过的D3D8...

    C/C++文档.chm

    2011年2月7日 - 顶点着色器例子——Diffuse Lighting(《龙书》) #include "d3dUtility.h" // // Globals // IDirect3DDevice9* Device = 0; const int Width = 640;

    易语言-E_D3D9 Beta3模块

    6:[+]IDirect3DDevice9Ex 7:[+]IDirect3DSwapChain9Ex 8:[+]IDirect3D9ExOverlayExtension 9:[+]IDirect3DDevice9Video 10:[+]IDirect3DAuthenticatedChannel9 11:[+]IDirect3DCryptoSession9 12:[+]IDirectInput8 ...

    iDirect小站操作简单指导PPT教案.pptx

    iDirect小站操作简单指导PPT教案.pptx

    D3D render pipeline

    The IDirect3DDevice9 interface is introduced and an overview of device methods and internal state is given. Finally, a basic framework is given for a 2D application. Chapter 1 begins with an overview...

Global site tag (gtag.js) - Google Analytics