如何在Direct3D 9中设置全局的alpha混合值?

是否可以在Direct3D 9中全局设置一个alpha值,它调整每个后续绘制的像素alpha值?

我想让整个场景淡入淡出。 我知道,例如ID3DXSprite::Draw()可以让你在Color参数中设置它,但是我使用像素着色器来绘制2D圆和矩形,所以我必须将Alpha值传递给它们中的每一个。

使用着色器和普通的alpha混合,我不认为这是可能的。 如果要用全局常量replace场景中的所有Alpha值,可以使用D3DBLEND_BLENDFACTORD3DBLEND_INVBLENDFACTOR 。 但是,听起来像你想要乘以一个全局常量每个像素的阿尔法值。 这最好在像素着色器中完成。

这就是说,淡出每个场景元素的alpha可能不是你真正想要做的。 它会产生一个奇怪的效果,因为不透明物体在淡入淡出时会变得透明。 例如,隐藏在墙后的物体将在淡入淡出时短暂可见,因为墙和物体都是部分透明的。

如果你想淡出一个常量的颜色(黑色,白色等),更好的方法可能是在整个场景中渲染该颜色的全屏,而不是改变场景中的任何东西的alpha值。 如果你想淡入一个不同的场景(比如溶化),那么第二个场景应该被绘制到屏幕外的渲染目标上,然后在第一个场景上进行全屏渲染。