Каковы риски загрузки текстур из изображений во время выполнения в XNA?
Что нужно знать о (кроме возможности делать это на ПК) загрузке текстур из изображений во время выполнения?
1 ответ
Я также исключительно загружаю свои текстуры из потоков, и единственная "опасность", с которой я могу столкнуться, - это Premultiplied Alphas. Вам нужно будет либо обработать каждую текстуру при загрузке, либо выполнить рендеринг с предварительно умноженными альфа-каналами. Шон Харгривз написал отличную статью в блоге на эту тему. В комментариях он упоминает:
Если вы не проходите через наш конвейер контента, вам придется самостоятельно выполнять преобразование формата или просто не использовать предварительно умноженную альфа
Поэтому инициализация ваших спрайтовых паролей с помощью BlendState.NonPremultiplied должна работать.
В моей игре я обработал каждую текстуру при загрузке.
РЕДАКТИРОВАТЬ: Вот мой метод:
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);
}
Как видите, все, что он делает, это умножает цветовые каналы на альфа, а затем вставляет их обратно в текстуру. Без этого ваши спрайты, вероятно, будут выглядеть ярче / темнее? чем они должны. (отказ от ответственности: я не писал метод выше, мой друг написал)