如何使Texture2D半透明?XNA

23

我正在使用SpriteBatch在屏幕上绘制一个Texture2D,想知道如何控制图片的不透明度?有人知道实现这个最好的方法吗?

2个回答

48

假设您正在使用带预乘alpha的XNA 4.0。在spritebatch.draw中,将颜色乘以浮点数,例如0.5f表示50%的透明度,并像平常一样进行绘制。如果您没有使用预乘alpha,则出于性能原因和更直观的考虑,建议您这样做。

示例:

_spriteBatch.Draw(texture, location, Color.White * 0.5f);

编辑: 还要确保将混合状态设置为BlendState.AlphaBlend,或者另一个支持Alpha且不是NonPremultiplied的混合状态。

示例:

_spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);

8
Color上使用乘法运算符会调节所有四个通道(RGBA),只有在使用预乘混合模式(例如:AlphaBlend)时,才会提供所期望的透明度变化。对于其他混合状态(例如:AdditiveNonPremultiplied)需要按照预期工作,您应该直接设置颜色的 alpha 值(不要改变 RGB 通道)。 - Andrew Russell

6

只需使用new Color(RGBA);即可设置颜色,其中:

  • R代表红色
  • G代表绿色
  • B代表蓝色
  • A代表透明度

例如:

new Color(100, 100, 100, 100);

3
这可能不是有意为之,但你刚刚向我展示了Color参数不是枚举类型,哈哈!我不知道你可以像那样创建自己的颜色。 - TheGateKeeper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接