• 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
  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/konlil/p/2203486.html
Copyright © 2020-2023  润新知