原文: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. python 爬虫部分解释

    example:self.file = www.baidu.com存有baidu站的index.html def parseAndGetLinks(self): # parse HTML, save ...

  2. 深入理解 iOS Rendering Process

    本文将从 OpenGL 的角度结合 Apple 官方给出的部分资料,介绍 iOS Rendering Process 的概念及其整个底层渲染管道的各个流程. 相信在理解了 iOS Rendering ...

  3. z-index终结者

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/30280627         z-in ...

  4. win10 系统下获取系统版本号为6.2的问题

    近期赶时髦升级了win10,用着挺爽.但是某天在测试一个bug时发现要对win10做特殊处理,于是直接调用了GetVersionEx,并取出版本号进行判断,但是发现得到的版本竟然是6.2.当时就被雷到 ...

  5. Odoo中报表PDF样式出错的解决办法

    如果发现生成的pdf样式不对,那可能是wkhtmltopdf没办法访问web服务器导致的.wkhtmltopdf进程使用web.base.url作为根url来生成对应文件路径,但这个地址是每次管理员登 ...

  6. 一步步入门编写PHP扩展

    1.写在最前 随着互联网飞速发展,lamp架构的流行,php支持的扩展也越来越多,这样直接促进了php的发展. 但是php也有脚本语言不可避免的问题,性能比例如C等编译型语言相差甚多,所以在考虑性能问 ...

  7. shell脚本进阶 详解及其实例(一)

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  8. vim使用四个空格代替TAB键

    让VIM可以在你写程序的时候自动缩进,并用4个空格代替TAB键. 编辑 ~/.vimrc 保存这四行: “set smartindent”, “set tabstop=4”, “set shiftwi ...

  9. ActiveRecord初始化,可以实现jfinal系统启动完成后,再建立数据库连接

    1.JFinalConfig的afterJFinalStart方法,可以实现系统启动成功后,调用的方法 2.ActiveRecord 多数据源初始化 package com.meiah.common; ...

  10. 书单list

    2018年对我来说是个踩到狗屎的一年,不能说运气差,只能说过去所有的不良决策后果都集中到2018年爆发了,希望新的一年,都好起来.书单很短,买的确实很多,真的惭愧. 昨日世界 南渡北归 上学记 回忆录 ...