• 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
  • 相关阅读:
    MDL中捕获到损坏的页表页
    跟踪MmSt分页池使用情况
    了解NTFS压缩
    如何跟踪高CPU在用户模式应用程序-现场调试!
    如何与转储文件建立丰富多彩的关系
    Kernel Stack Overflows
    非分页池的消耗
    MBR反汇编
    LPC (Local procedure calls)(二)内核调试扩展
    LPC (Local procedure calls) (一)数据结构
  • 原文地址:https://www.cnblogs.com/konlil/p/2203486.html
Copyright © 2020-2023  润新知