XNA。的Texture2D。 SetData的。错误的Alpha通道

时间:2017-04-09 20:27:16

标签: c# colors xna texture2d

此代码使用非零Alpha通道创建纹理。

Texture2D result = new Texture2D(Program.MainThread.GraphicsDevice, (Int32)texture_size, (Int32)texture_size);
Color[ ] colorData = new Color[result.Width * result.Height];
for (UInt32 x = 0; x < result.Width; x++) {
    for (UInt32 y = 0; y < result.Height; y++) {
        UInt32 index = (UInt32)(x * result.Width + y);
        colorData[index] = new Color(1f, 0f, 0f, 0f);
    }
}
result.SetData(colorData);

颜色变得略微透明。但是,大约是0.5f的值。为什么会这样?

P.S。 Color.Transparent正常工作,但我有一个以编程方式计算的alpha通道,例如:

colorData[index] = new Color(1f, 0f, 0f, 1f - temp);

2 个答案:

答案 0 :(得分:0)

为了在XNA中使纹理透明,我发现执行以下操作效果更好:

Color color = new Color(r,g,b) * alpha;

看看这是否适合你。

答案 1 :(得分:0)

这可能是因为XNA 4.0+使用premultiplied alpha。这只是处理透明度的一个不同概念。例如,要使颜色完全透明,必须将红色,绿色和蓝色设置为0,而将alpha设置为255。