Пользовательский BlendState, чтобы избежать артефактов AlphaBlending
По сути, я рисую текстуру на каждом кадре, каждый раз, когда я рисую ее, я хочу уменьшить альфу, чтобы она в конечном итоге достигла 0, чтобы не осталось артефактов.
Основное уравнение:
result = (source * sourceBlendFactor) blendFunction (destination * destinationBlendFactor)
И так как мой пункт назначения - Color.Transparent, я думаю, что мне нужно:
result = 0 = (source * sourceBlendFactor);
Я ломаю голову над различными компонентами BlendState, но не могу этого достичь...
Есть ли способ линейного альфа-декремента?
1 ответ
Решение
Что вы можете. Определите значение, которое содержит текущее альфа-состояние от 1 до 0. Уменьшите это значение в каждом кадре, пока оно не достигнет 0. В методе рисования вы определяете альфа-значение цвета оттенка.
byte alpha = 255 - (currentAlphaState * 255);
spriteBatch.Draw(...., new Color( 255, 255, 255, alpha) ...); // assuming white is your default tint color