Пользовательский BlendState, чтобы избежать артефактов AlphaBlending - PullRequest
0 голосов
/ 30 марта 2012

По сути, я рисую текстуру на каждом кадре, каждый раз, когда я рисую ее, я хочу уменьшить альфа, чтобы она в конечном итоге достигла 0, чтобы не осталось артефактов.

Основное уравнение:

result = (source * sourceBlendFactor) blendFunction (destination * destinationBlendFactor)

И так как мой пункт назначения - Color.Transparent, я думаю, мне нужно:

result = 0 = (source * sourceBlendFactor); 

Я ломаю голову над различными компонентами BlendState, но я не могу этого достичь ...

Есть ли способ линейного альфа-декремента?

1 Ответ

1 голос
/ 30 марта 2012

Конечно, вы можете.Определите значение, которое содержит текущее альфа-состояние от 1 до 0. Уменьшите это значение в каждом кадре, пока оно не достигнет 0. В методе рисования вы определяете альфа-значение цвета оттенка.

byte alpha = 255 - (currentAlphaState * 255);
spriteBatch.Draw(...., new Color( 255, 255, 255, alpha) ...); // assuming white is your default tint color
...