褪色透明与预乘alpha

我将一个物体从完全可见变为透明,但是渐变使物体变暗。

this.Color = Color.Lerp(Color.White, Color.Transparent, weight); 

该对象确实褪色透明,但是..变得更暗,更透明。 曾经有一个Color.TransparentWhite和Color.TransparentBlack在非预乘alpha xna世界中。 我怎样才能使淡出透明使对象淡入透明与预乘alpha?

我们使用GraphicsDevice.DrawUserIndexedPrivitives和BlendState将BlendState.AlphaBlend设置为四边形。 这应该在XNA4中进行预乘alpha混合。

另外,如何在渲染中使用颜色

 effect.Alpha = this.Color.A / 255f; effect.DiffuseColor = new Vector3(this.Color.R / 255f, this.Color.G / 255f, this.Color.B / 255f) 

我怀疑当使用Alpha和DiffuseColor使精灵/文本透明时,我不应该使用预乘alpha。 但是,当我使用Color.Lerp淡入新的颜色(1,1,1,0)它仍然变暗。

如果颜色是预乘alphaforms,则需要将RGB和alpha都设为零。 只将阿尔法归零将导致添加剂混合。 我不知道如何定义Color.Transparent,但也许它不是(0,0,0,0)。

如果将所有东西都收缩到零仍然会导致变暗的效果,那么颜色不会被用作预乘alpha。

如果您想使用alpha衰落的“老方法”,则可以禁用特定纹理的预乘alpha。 我怀疑新旧方法之间有明显的差异,但新的方法确实可能有点暗淡。

在“属性”选项卡中检查您的渐变纹理,并在“内容处理器”组下将“Premultiply Alpha”设置为false。 如果您使用的是Sprite批处理,请在绘制之前将其设置为BlendState.NonPremultiplied。 然后做你的插值: this.Color = new Color(this.Color.R, this.Color.G, this.Color.B, alphaFade);

使用effect.DiffuseColor和effect.Opacity时,不应使用预乘颜色空间。

问题是我使用Color.Lerp:

 Color.Lerp(new Color(1,1,1,1), new Color(1,1,1,0), .5f); color : {R:127 G:127 B:127 A:127} 

我所做的解决这个问题的方法是将颜色设置为:

 effect.Opacity = this.Color.A / 255f; if (effect.Opacity > 0) { effect.DiffuseColor = new Vector3(this.Color.R / 255f, this.Color.G / 255f, this.Color.B / 255f) / Opacity; } else { effect.DiffuseColor = Vector3.Zero; } 

请注意/ Opacity从预乘色彩空间返回到正常色彩空间。

不要使用颜色组件,只需设置alpha:

 this.Color.A = weight; 

(如果不透明,权重= 255,透明时为0)