原文: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);
 

【转载】D3D深度测试和Alpha混合的更多相关文章

  1. D3D中深度测试和Alpha混合的关系

    我在学习D3D的深度测试和Alpha混合的时候,有一些遗憾.书上提供的例子里说一定要先渲染不透明物体,再渲染透明物体,对渲染状态的设置也有特殊要求.我看的很晕.自己查图形学的书,上网找资料,结果还是糊 ...

  2. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记8——载入三维模型&Alpha混合技术&深度测试与Z缓存

    第17章 三维游戏模型的载入 主要是如何从3ds max中导出.X文件,以及如何从X文件加载三维模型到DirextX游戏程序里.因为复杂的3D物体,要用代码去实现,那太反人类了,所以我们需要一些建模软 ...

  3. 【转载】Alpha混合物体的深度排序

    原文:Alpha混合物体的深度排序 先说个题外话, 本来我想解答一下最近Creators Club论坛上经常出现的一个问题, 意外的是在网上竟然找不到什么全面的答案.. 这是个有着复杂答案的简单问题: ...

  4. DirectDraw打造极速图形引擎(Alpha混合)

    显然DirectDraw是Windows下写2D图形程序的最好选择,虽然Direct3D也可以写,但是没DirectDraw简单方便,特别对于初学者,一来就接触那么多函数和参数总不是件愉快的事,所以我 ...

  5. 16位图像Alpha混合的实现(用汇编写的,比MMX还要快)

    Alpha 混合的算法很简单,基于下面的公式就可以实现: D := A * (S - D) / 255 + D D 是目标图像的像素, S 是源图像的像素 A 是 Alpha 值, 0 为全透明, 2 ...

  6. Alpha混合

    ShaderLab syntax: Blending 混合 Blending is used to make transparent objects. 混合是用来制作透明物体的. When graph ...

  7. Shader第十三讲 Alpha混合

    http://blog.sina.com.cn/s/blog_471132920101d8z5.html Alpha Blending,中文译作Alpha混合Blending就是控制透明的.处于光栅化 ...

  8. 【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第56章       STM32H7的DMA2D应用之刷色块, ...

  9. 【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/163.html 作者:毛星云 ...

随机推荐

  1. Web App, Native APP,Hybird App 介绍

    一.Web App 这个主要是采用统一的标准的 HTML,JavaScript.CSS 等 web 技术开发. 用户无需下载,通过不同平台 的浏览器访问来实现跨平台, 同时可以通过浏览器支持充分使用 ...

  2. rinted端口转发工具

    下载包: [root@localhost opt]# wget https://boutell.com/rinetd/http/rinetd.tar.gz 解压编译安装: [root@localhos ...

  3. 【zigbee】【蓝牙】射频信号放大器兼容AT2401C

    现在科技产品的不断进步,智能家居方面慢慢对信号和距离方面的要求渐渐增加.深圳市动能世纪科技有限公司不断的满足客户需求,推出了一款射频信号放大器AT2401C满足客户距离信号等等的需求.并全方位技术支持 ...

  4. Java Calendar and SimpleDateFormat 时间模块

    package UtilTest; import java.util.Calendar; import java.text.SimpleDateFormat; import org.apache.co ...

  5. 验证码帮助类【CaptchaHelper 】

    GDI+:Graphics Device Interface Plus也就是图形设备接口,提供了各种丰富的图形图像处理功能;在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使用Direct ...

  6. keepalived 的进程/usr/sbin/keepalived -D 只有2个

    操作系统:openSUSE 11.3 (x86_64) /usr/sbin/keepalived -D  只有2条 日志:ls  /var/log/messages* -lrth Can't init ...

  7. nRF5 SDK for Mesh(八) Exploring Mesh APIs using light switch example,使用 灯开关 案例探索BLE mesh 的APIS

    Exploring Mesh APIs using light switch example The light switch example is meant to showcase the API ...

  8. linux下安装perl

    1.在官网  http://www.perl.org/get.html  下载perl安装包 2.上传服务器并解压 3../Configure -des -Dprefix=安装目录 4.make&am ...

  9. spring 包的依赖关系

    转自:http://www.cnblogs.com/ywlaker/p/6136625.html 很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring ...

  10. Model验证简单易懂

    public bool UserSex { get; set; } //定义名字 [Display(Name = "年龄")] [Range(0, 150, ErrorMessag ...