【发布时间】:2012-12-10 15:06:13
【问题描述】:
当分层多个时,我必须至少将它们与“空”图像或背景组合一次。但没有什么比得上“空”。它是透明的黑色或透明的白色。即使是完全透明的,也会有一种在显示时通常会被忽略的颜色。
我想要以下内容:
Destination = Image1 + Image2
为此,我实际上是这样做的:
Clear(Destination, 0); // Clear it with transparent black
Blend Image1 over Destination
Blend Image2 over Destination
虽然 Destination 是透明的黑色,但黑色有助于最终结果,这是我想避免的。我可以用透明的白色清除目的地,但它只在这个例子中有效,并且对较暗的图像产生同样的问题。
我明白为什么结果是这样的:directx 混合公式是这样设置的:
BlendOp = Add;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
目的地的 alpha (DestAlpha) 在这个公式中根本没有考虑。我可以做些什么来解决这个日常问题,即在将两张图像渲染到其他地方之前将它们混合在一起?
【问题讨论】:
-
我不确定,您是否可以使用固定功能管道解决此问题。为什么重要的是,图像是在一个额外的缓冲区中而不是直接在目标背景上组成的?你想达到什么目标?
-
需要这个额外的缓冲区,因为它是作为像素着色器的输入。
-
不一定需要在固定功能管道中完成,但AFAIK混合公式仍然是固定的。顺便说一句,我正在使用 DirectX9。我不喜欢将两个缓冲区合并到一个单独的像素着色器中,因为这会带来很多开销。
标签: directx alphablending alpha-transparency