Каковы риски загрузки текстур из изображений во время выполнения в 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);
}

Как видите, все, что он делает, это умножает цветовые каналы на альфа, а затем вставляет их обратно в текстуру. Без этого ваши спрайты, вероятно, будут выглядеть ярче / темнее? чем они должны. (отказ от ответственности: я не писал метод выше, мой друг написал)

Другие вопросы по тегам