gpt4 book ai didi

xna - 在 XNA 中运行时从图像加载纹理有什么风险?

转载 作者:行者123 更新时间:2023-12-01 23:33:53 25 4
gpt4 key购买 nike

关于在运行时从图像加载纹理(除了只能在 PC 上执行此操作),有什么需要了解的?

最佳答案

我也一直专门从流中加载我的纹理,我能想到的唯一“危险”是预乘 Alphas。您需要在加载每个纹理时对其进行处理,或者在禁用预乘 alphas 的情况下进行渲染。肖恩·哈格里夫斯 (Shawn Hargreaves) 写了一篇 great blog article on this subject .在评论中,他提到:

If you don't go through our Content Pipeline, you have to handle the format conversion yourself, or just not use premultiplied alpha

因此使用 BlendState.NonPremultiplied 初始化您的 Sprite 批处理应该可以。

在我的游戏中,我在加载时处理了每个纹理。

编辑:这是我的方法:

private static void PreMultiplyAlphas(Texture2D ret)
{
var data = new Byte4[ret.Width * ret.Height];
ret.GetData(data);
for (var i = 0; i < data.Length; i++)
{
var vec = data[i].ToVector4();
var alpha = vec.W / 255.0f;
var a = (Int32)(vec.W);
var r = (Int32)(alpha * vec.X);
var g = (Int32)(alpha * vec.Y);
var b = (Int32)(alpha * vec.Z);
data[i].PackedValue = (UInt32)((a << 24) + (b << 16) + (g << 8) + r);
}
ret.SetData(data);
}

如您所见,它所做的只是将颜色 channel 乘以 alpha,然后将其填回纹理中。没有这个,你的 Sprite 可能会显得更亮/更暗?比他们应该的。 (免责声明:上面的方法不是我写的,是我一个 friend 写的)

关于xna - 在 XNA 中运行时从图像加载纹理有什么风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com