我想使用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)
有可能实现这一目标吗?如果是,怎么样?
答案 0 :(得分:3)
使用OpenGL 3.0及以上版本时完全可以实现,因为可以为RGB和A单独设置混合功能。对于您的情况,这将是
@model IEnumerable<Theme_Hisaab.Models.MyViewModel>
指定目标alpha的混合因子的最后一个参数可能必须进行调整,因为您没有指定目标alpha的行为&lt; 1.有关详细信息,请查看function documentation。