此代码使用非零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);
答案 0 :(得分:0)
为了在XNA中使纹理透明,我发现执行以下操作效果更好:
Color color = new Color(r,g,b) * alpha;
看看这是否适合你。
答案 1 :(得分:0)
这可能是因为XNA 4.0+使用premultiplied alpha。这只是处理透明度的一个不同概念。例如,要使颜色完全透明,必须将红色,绿色和蓝色设置为0,而将alpha设置为255。