Пользовательский 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
Другие вопросы по тегам