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
  • 相关阅读:
    作男人 一定要有品位
    如何管理“人”
    Facebook怎样开发软件:工程师驱动的文化(转)
    为人处事100条——修身养性,经典收藏!
    抽空看看这些电影
    曹重英:技术人员也要打造人脉竞争力(转)
    动态分段统计SQL
    不成熟男人与成熟男人的区别
    Ubuntu11.10国内更新源地址汇总以及添加方法(目前最全最快的源)
    ubuntu11.10 64bits机器安装flash方法
  • 原文地址:https://www.cnblogs.com/konlil/p/2203486.html
Copyright © 2011-2022 走看看