Cg着色器Alpha混合

时间:2016-10-16 07:44:31

标签: opengl shader cg

我想使用Alpha Blending (SRC_ALPHA, ONE_MINUS_SRC_ALPHA),基本上就是这样:

frag_out.aaaa * frag.out + ((1.0, 1.0, 1.0, 1.0) - frag_out.aaaa) * pixel_color

假设屏幕上的像素颜色为(1.0, 1.0, 1.0, 1.0) 我目前呈现的颜色是(1.0, 1.0, 1.0, 0.4)

当我渲染它时,屏幕上的结果颜色为alpha 0.76(即使它之前是完全不透明的)

事实上:

(0.4, 0.4, 0.4, 0.4) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 0.76)

所以基本上屏幕上的颜色是不透明的(白色),然后我在屏幕上放一个透明的精灵,屏幕变得透明(0.76 alpha),我能够透过背景看。如果我能像这样融合它将是完美的:

(0.4, 0.4, 0.4, 1.0) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 1.0)

有可能实现这一目标吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:3)

使用OpenGL 3.0及以上版本时完全可以实现,因为可以为RGB和A单独设置混合功能。对于您的情况,这将是

@model IEnumerable<Theme_Hisaab.Models.MyViewModel>

指定目标alpha的混合因子的最后一个参数可能必须进行调整,因为您没有指定目标alpha的行为&lt; 1.有关详细信息,请查看function documentation