自定义BlendState以避免AlphaBlending瑕疵

本文关键字:AlphaBlending 瑕疵 BlendState 自定义 | 更新日期: 2023-09-27 18:29:33

我基本上每帧都在自己身上绘制一个纹理,每次绘制它时,我都想减少alpha,这样它最终会达到0,这样就不会留下任何瑕疵。

基本方程是:

result = (source * sourceBlendFactor) blendFunction (destination * destinationBlendFactor)

由于我的目的地是彩色。透明我想我需要:

result = 0 = (source * sourceBlendFactor); 

我绞尽脑汁研究不同的BlendState组件,但我似乎无法做到这一点。。。

有什么方法可以使alpha线性递减吗?

自定义BlendState以避免AlphaBlending瑕疵

当然可以。定义一个将当前alpha状态保持在1和0之间的值。递减每帧的值,直到它达到0。在绘制方法中,可以确定色调颜色的alpha值。

byte alpha = 255 - (currentAlphaState * 255);
spriteBatch.Draw(...., new Color( 255, 255, 255, alpha) ...); // assuming white is your default tint color