zoukankan      html  css  js  c++  java
  • d3d中的alpha

    一般情况下alpha混合计算公式:

    Final(rgba) = Src(rgba) * Src(blend) ⊕ Dest(rgba) * Dest(blend)
    Src(rgba): 即要绘制的颜色
    Src(blend): Src的系数,由D3DRS_SRCBLEND指定其值(D3DBLEND枚举值),如:D3DBLEND_SRCALPHA(即指定为Src的alpha值)
    ⊕:表示Alpha混合方法,由D3DRS_BLENDOP指定其值(D3DBLENDOP枚举值),最常见的是加法:D3DBLENDOP_ADD
    Dest(rgba): 目标颜色值,通常是缓冲区颜色或者RenderTarget颜色
    Dest(blend): Dest的系数,由D3DRS_DESTBLEND指定其值(D3DBLEND枚举值),如:D3DBLEND_INVSRCALPHA(即指定为 1-SrcAlpha)
    通常情况下的alpha混合,Src(blend)和Dest(blend)分别指定为SrcAlpha和(1-SrcAlpha),并没有考虑DestAlpha,这是因为通常的绘制目标都是BackBuffer(后备缓冲区),而BackBuffer的颜色是没有Alpha值的。
    上述通常情况下的Alpha混合中的alpha通道的混合与rgb颜色通道的混合计算方式是一样的,但是D3D还允许开启D3DRS_SEPARATEALPHABLENDENABLE 标记来单独指定Alpha通道的混合方式。开启了这个标记后,alpha通道的混合公式还是一样:
    Final(alpha) = Src(alpha) * SrcAlpha(blend) ⊕ Dest(alpha) * DestAlpha(blend)
    其中,
    SrcAlpha(blend):SrcAlpha的系数,由D3DRS_SRCBLENDALPHA指定其值(也是D3DBLEND枚举值),如:D3DBLEND_ONE;
    ⊕:表示Alpha混合的混合方法,由D3DRS_BLENDOPALPHA指定其值(也是D3DBLENDOP枚举值),如:D3DBLENDOP_MODULATE;
    DestAlpha(blend):DestAlpha的系数,由D3DRS_DESTBLENDALPHA指定其值(也是D3DBLEND枚举值),如:D3DBLEND_ZERO;
    ----------------------------------
    除了上述的alpha混合之外,d3d另外一个发生混合的地方是“多重纹理混合”(multiple-texture blending),先来看看管线图:
    按d3d文档(Direct3d Architecture Direct3d 9)的描述多重纹理混合应该是发生在pixel-processing的,而上面说的alpha混合是发生在Pixel-rendering的。恩,这张大图印证了我的猜测:http://www.xmission.com/~legalize/book/preview/poster/pipeline-9.0.png
  • 相关阅读:
    Harbor-企业级Registry服务器安装配置和使用(图解)
    kubernetes(k8s)kubectl使用详解
    prometheus和zabbix的对比
    kubernetes学习:CKA考试题
    k8s网络之Flannel网络
    k8s网络主题系列:Flannel和Calico
    kubernetes基础概念
    CoreDNS系列1:Kubernetes内部域名解析原理、弊端及优化方式
    解析记录格式
    五月七号日报
  • 原文地址:https://www.cnblogs.com/konlil/p/2203486.html
Copyright © 2011-2022 走看看