【问题标题】:XNA. Texture2D. SetData. Wrong Alpha ChannelXNA。纹理2D。设置数据。错误的 Alpha 通道
【发布时间】:2017-09-04 19:30:25
【问题描述】:

此代码创建具有非零 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 的值。为什么会这样?

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

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

【问题讨论】:

    标签: c# colors xna texture2d


    【解决方案1】:

    要在 XNA 中使纹理透明,我发现执行以下操作会更好:

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

    看看这是否适合你。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 2013-06-28
        • 2011-01-11
        • 1970-01-01
        相关资源
        最近更新 更多