`

D3D深度测试和Alpha混合

 
阅读更多
1. 深度测试
a) 深度缓冲区:屏幕上每个像素点的深度信息的一块内存缓冲区.D3D通过比较当前绘制的像素点的深度和对应深度缓冲区的点的深度值来决定是否绘制当前像素.
b) D3DPRESENT_PARAMETERS. AutoDepthStencilFormat = D3DFMT_D16
表示深度值由16位二进制表示
开启深度测试:pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
深度测试函数:D3DRS_ZFUNC:
D3DCMP_NEVER
总是返回FALSE
D3DCMP_LESS (常用)
小于深度缓冲区的相应值时返回TRUE
D3DCMP_EQUAL
等于
D3DCMP_LESSEQUAL
小于等于
D3DCMP_GREATER
大于
D3DCMP_NOTEQUAL
不等于
D3DCMP_GREATEREQUAL
大于等于
D3DCMP_ALWAYS
总是返回TRUE
更新缓冲区:保持深度缓冲区不变还是用当前像素的深度值更新
pDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
2. Alpha混合
a) 原理:Color = (RGBsrc * Ksrc) OP (RGBdst * Kdst)
最常用的方法:Color = (RGBsrc * Alphasrc) + (RGBdst * (1 – Alphasrc)
b) 应用
启用:pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
Blend mode factor
Description
D3DBLEND_ZERO
(0, 0, 0, 0)
D3DBLEND_ONE
(1, 1, 1, 1)
D3DBLEND_SRCCOLOR
(Rs, Gs, Bs, As)
D3DBLEND_INVSRCCOLOR
(1-Rs, 1-Gs, 1-Bs, 1-As)
D3DBLEND_SRCALPHA
(As, As, As, As)
D3DBLEND_INVSRCALPHA
(1-As, 1-As, 1-As, 1-As)
D3DBLEND_DESTALPHA
(Ad, Ad, Ad, Ad)
D3DBLEND_INVDESTALPHA
(1-Ad, 1-Ad, 1-Ad, 1-Ad)
D3DBLEND_DESTCOLOR
(Rd, Gd, Bd, Ad)
D3DBLEND_INVDESTCOLOR
(1-Rd, 1-Gd, 1-Bd, 1-Ad)
D3DBLEND_SRCALPHASAT
(f, f, f, 1); f = min(As, 1-Ad)
Alpha混合方法
D3DBLENDOP_ADD
源计算结果与颜色缓冲区计算结果相加
D3DBLENDOP_SUBTRACT
源计算结果减去颜色缓冲区计算结果
D3DBLENDOP_REVSUBTRACT
颜色缓冲区计算结果减去源计算结果
D3DBLENDOP_MIN
MIN(源计算结果, 颜色缓冲区计算结果)
D3DBLENDOP_MAX
MAX(源计算结果, 颜色缓冲区计算结果)
Color = (RGBsrc * Alphasrc) + (RGBdst * (1 – Alphasrc) )的设置示例:
pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
pDevice->SetRenderState( D3DBLENDOP, D3DBLENDOP_ADD );(默认值,可选)
3. Alpha测试
a) 原理
根据Alpha测试条件来决定当前像素是否绘制,并不需要对颜色缓冲进行操作,所以速度比Alpha混合要快.
b) 应用
启用:pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
Alpha测试函数
D3DCMP_FUNC枚举,默认为D3DCMP_ALWAYS
参考值:
pDevice->SetRenderState( D3DRS_ALPHAREF, 0x00000081);
分享到:
评论

相关推荐

    D3D9 alpha混合 demo (自定义alpha和纹理自带alpha)

    总之,D3D9的Alpha混合技术是实现3D场景中物体半透明效果的关键,它通过混合颜色和调整Alpha值,创造出丰富多样的视觉效果。通过学习和实践这个VS2013工程,开发者不仅能掌握Alpha混合的基本使用,还能进一步提升在...

    VS2008下的win32Alpha混合的例子

    1. `D3DRS_ALPHATESTENABLE` 设置为 FALSE,因为我们要使用Alpha混合而不是Alpha测试。 2. `D3DRS_ALPHABLENDENABLE` 设置为 TRUE,开启Alpha混合功能。 3. `D3DRS_SRCBLEND` 设置为 D3DBLEND_SRCALPHA,定义源颜色...

    dx9 alpha混合纹理

    在3D图形编程中,Alpha混合纹理是一项关键的技术,它使得物体的表面可以具有半透明或者透明的效果,增加了场景的深度和真实感。本文将深入探讨DX9中的Alpha混合纹理,以及如何通过原代码实现这一功能。 首先,我们...

    dx9_alpha_blending_material.zip_Alpha_alpha混合_direct Alpha_direc

    这个压缩包"dx9_alpha_blending_material.zip"显然是为DirectX初学者准备的,包含了相关的资源和教程,帮助学习者理解并实现Alpha混合在DirectX 9中的应用。 Alpha通道(Alpha Channel)是颜色像素的第四个成分,...

    DX Alpha 颜色 混合 颜色透明显示

    在3D图形和游戏开发中,Alpha混合是一个关键的技术,它允许对象在屏幕上显示时具有半透明或透明的效果。 DX中实现颜色混合通常涉及到两个关键步骤:颜色计算和Alpha测试。颜色计算是通过将源颜色(Source Color)和...

    在D3D中创建三维字模型 可以设置颜色,位置,旋转等功能

    例如,为了使颜色混合正确,可能需要设置适当的Alpha混合模式。同时,确保在绘制不同元素之间正确地保存和恢复设备状态。 7. **优化和性能**: 对于大规模的文字渲染,考虑使用批次渲染来提高效率。这意味着将相似...

    Direct alpha

    实现Alpha混合首先需要开启Alpha测试和Alpha混合功能。在Direct3D中,这可以通过设置设备状态来完成。例如,我们可以调用`IDirect3DDevice9::SetRenderState`方法,分别设置`D3DRS_ALPHATESTENABLE`和`D3DRS_...

    D3D9 1.0模块易语言源码

    7. **状态管理**:理解如何管理设备状态,如深度缓冲、Alpha混合、抗锯齿等,这些都是控制3D图形显示质量的关键。 8. **错误处理和调试**:源码中可能会包含错误检查和调试代码,这对于理解Direct3D 9编程中的常见...

    dx9_alpha_blending_material.rar_Alpha

    2. **启用Alpha混合**:接下来,你需要开启Alpha混合。同样使用`SetRenderState`函数,这次是设置`D3DRS_ALPHABLENDENABLE`为`TRUE`。接着设置混合源和目标因子,例如`D3DBLEND_SRCALPHA`和`D3DBLEND_INVSRCALPHA`,...

    d3d游戏开发导引(全部工程文件)完整打包

    9. **Alpha混合**:处理半透明效果,如烟雾、水体等。 10. **状态对象管理**:如渲染状态、混合状态、深度测试状态等,控制Direct3D的行为。 除了Direct3D的基础知识,资源中还包含了一个简单的游戏引擎源码实现。...

    D3D 9 固定功能渲染流水线 演示实例

    这个过程可能涉及混合、alpha测试、雾化等效果。 6. **深度缓冲**:在渲染过程中,深度缓冲区用于检查每个像素是否应该被绘制,避免了物体遮挡的问题。 7. **呈现**:最后,所有的像素颜色被合并并显示在屏幕上,...

    D3d YUV 三层纹理显示

    4. **设置渲染状态**:在绘制之前,需要设置一些D3D渲染状态,比如启用像素着色器,并确保深度缓冲和Alpha混合等选项适合于显示静态图像。 5. **绘制**:使用D3D的DrawPrimitive或DrawIndexedPrimitive函数绘制一个...

    DX透明度alpha的渐变效果

    例如,设置`D3DRS_ALPHATESTENABLE`为`TRUE`启用alpha测试,设置`D3DRS_ALPHAFUNC`和`D3DRS_ALPHAREF`来定义透明度比较的条件。 2. **材质设置**:对于每个绘制的对象,我们需要指定一个包含alpha信息的材质。`D3...

    D3DDrv[虚幻3(Unreal3)引擎的D3D9渲染器源码

    3. **渲染状态设置**:D3DDrv会根据场景需求调整渲染状态,如混合模式、深度测试、反走样、Alpha测试等。 4. **纹理管理**:源码中可能会涉及纹理的加载、绑定和解绑,以及使用不同的纹理过滤和地址模式。 5. **...

    d3dx图形与动画程序设计源代码(part1)

    4. **08_第八章 深度测试与Alpha混合**:深度测试确保了正确处理物体之间的遮挡关系,而Alpha混合则允许透明和半透明效果的实现,是实现复杂场景和特效的关键技术。 5. **09_第九章 雾化**:雾化效果增加了场景的...

    DirectX_RPG_Chap02_03_AlphaBlend

    3. 设置Alpha Blend函数:有多种预定义的混合函数,如D3DBLEND_SRCALPHA和D3DBLEND_INVSRCALPHA,分别对应源颜色的Alpha值和目标颜色的Alpha值的反向。这些函数决定了如何结合源纹理和目标帧缓冲区的颜色。 4. 渲染...

    directx3d编程alpha透射demo

    这通常通过`SetRenderState`函数完成,例如`SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE)`启用Alpha混合,`SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)`设置源颜色的Alpha通道如何混合,`SetRenderState...

    D3D离子雨系统,自己写的,适合初学者

    例如,为了实现粒子雨的透明效果,可能需要开启alpha混合。 4. **粒子更新**:在每一帧,粒子的位置、速度、生命周期等属性都需要更新。这通常通过一个循环完成,对每个粒子进行独立处理。 5. **绘制粒子**:将...

    D3D11_ShadowMappingAndTransparency

    在D3D11中,这可能涉及到alpha测试、alpha混合或者预乘Alpha等技术。`TransparentDepthShader.cpp` 显然是处理透明度的着色器,它可能会根据物体的颜色和透明度信息调整像素的颜色输出。同时,`ColorShaderClass.cpp...

    Direct3D9龙书

    8. **混合与Alpha测试**:解释了透明效果的实现方法,如混合模式和Alpha通道的运用。 9. **状态管理和设备恢复**:介绍如何设置和管理D3D的各种状态,以及在设备丢失时如何恢复渲染状态。 10. **Direct3D扩展(D3...

Global site tag (gtag.js) - Google Analytics