缓冲区Alpha Blend
来源:互联网 发布:php库存管理系统 编辑:程序博客网 时间:2024/06/11 09:56
(demo)源代码下载
Alpha blend
Alpha混合通常是为了实现透明效果,透明效果的程度通过alpha值来控制,对于一个8bit的alpha chanel,可以产生0-255级透明效果,0表示完全透明,255表示完全不透明,在D3D中alpha值的来源主要有三种.
颜色混合方程
其中op在这里定义为混合操作
共有五种形式
ADD表示相加操作,即;
SUBTRACT表示相关(目标-源),即;
REV_SUBTRACT表示反射的相关(源-目标),即;
MIN表示取源、目标颜色中较小值,即;
MAX表示取源、目标颜色中较大值,即。
融合因子:
D3DBLEND_ZERO 融合因子=(0,0,0,0)
D3DBLEND_ONE 融合因子=(1,1,1,1)
D3DBLEND_SRCCOLOR 融合因子=(R_src,G_src,B_src,A_src)
D3DBLEND_INVSRCCOLOR 融合因子=(1-R_src,1-G_src,1-B_src,1-A_src)
D3DBLEND_SRCALPHA 融合因子=(1-A_src,A_src,A_src,A_src)
D3DBLEND_INVSRCALPHA 融合因子=(1-A_src,1-A_src,1-A_src,1-A_src)
D3DBLEND_DESTALPHA 融合因子=(A_dst , A_dst, A_dst , A_dst)
D3DBLEND_INVDESTALPHA 融合因子= (1-A_dst, 1-A_dst, 1-A_dst , 1-A_dst ).
D3DBLEND_DESTCOLOR 融合因子=(R_dst , G_dst, B_dst , A_dst).
D3DBLEND_INVDESTCOLOR 融合因子= (1 - R_dst, 1 - G_dst, 1 - B_dst, 1 - A_dst).
D3DBLEND_SRCALPHASAT 融合因子= (f, f, f, 1),其中f = min(A_src,1 - A_dst)
其中R_src , G_src , B_src , A_src分别表示源(即source)像素的红、绿、蓝、透明四个分量值,而R_dst , G_dst, B_dst , A_dst表示目标(即destination)像素的红、绿、蓝、透明四个分量值。
下面我们用GLSL 来简单实现一下其中的一些效果.
BlendOp = Add;
SrcBlend = One;
DestBlend = Zero;
实现的效果,和没有用AlphaBlendEnable效果一样.
BlendOp = Add;
SrcBlend = One;
DestBlend = One;
这是原操作数为一,目的操作数也为一的时候的效果,加上以前的反射效果,已经很好的模仿玻璃材质
当然我们使用下面这种效果时,源操作数为0,目的操作数为1 时候,就看不见Teapot了
BlendOp = Add;
SrcBlend = Zero ;
DestBlend = One;
下面我们使用源融合为源颜色
BlendOp = Add;
SrcBlend = SrcColor ;
DestBlend = One;
我们接着使用源融合为源颜色,目的融合为目的颜色
BlendOp = Add;
SrcBlend = SrcColor ;
DestBlend = DestColor;
AlphaFunc
AlphaRef = 0xa0;
AlphaFunc = Greater;
(demo)源代码下载
- 缓冲区Alpha Blend
- Alpha Blend code (MFC)
- HDMI blend alpha 配置
- Alpha Blend and some Optimizition
- Alpha Blend and some Optimizition
- OpenGLES demo - 7. Alpha Blend
- pixman ROP/alpha blend 线性变换
- Per Pixel Alpha Blend in C#
- MMX版本的Alpha Blend算法实现
- alpha blend图层混合算法
- RGB/YUV alpha Blend混合算法
- MMX版本的Alpha Blend算法实现
- Shader Alpha混合Blend[转]
- Unity5.x Surface Shader使用alpha blend
- 能是最快的算法alpha blend汇编源代码
- Using Alpha Channel to Blend Image on a Background Smoothly
- OpenGL深度缓存区、深度测试及alpha blend
- MultiPass的混合,接上一篇的Alpha Blend
- #2JAVA中的变量#
- 【杭电】[2036]改革春风吹满地
- java初学者的吐槽
- PHP中include和require的区别详解
- js中匿名函数的N种写法
- 缓冲区Alpha Blend
- OpenJWeb3.3版本下载地址
- CodeForces 581F Contest Page 【树形dp】
- 【杭电】[2055]An easy problem
- jdk的环境变量配置
- docker配置
- 【翻译自mos文章】DR$SS_IDX表无法被导出
- 逆向随笔 - strcat函数的实现和分析
- python中的list和array的不同之处