XNA добавляет цвета при перекрытии

У меня есть спрайты, которые, когда они перекрываются, я бы хотел, чтобы они «добавляли» свои значения цветов rgb, чтобы (потенциально) стать белыми, спрайты также имеют изменяющиеся альфа-значения, которые должны оставаться неизменными. Я уже пробовал использовать все опции spritebatch alphablend, add и т.д...

Это возможно через spritebatch или мне нужен шейдер?

Спасибо, Пол.


person Paul    schedule 05.08.2011    source источник
comment
Добавка не дала вам желаемого эффекта?   -  person lysergic-acid    schedule 06.08.2011
comment
Нет, это не аддитивное простое добавление цветов вместе — так что зеленый на зеленом делает более сильный зеленый тон — путем комбинирования альфа-каналов, а не комбинирования цветов.   -  person Paul    schedule 06.08.2011


Ответы (1)


Используя схему Premultiplied Alpha в XNA 4, вы можете выполнять аддитивное смешивание, рисуя текстуру с 0 альфа-каналом. Поскольку это означает, что текстура выполняет нулевую блокировку, а затем к пикселям за ней добавляется RGB, вы получаете аддитивное смешивание.

Просто нарисуйте текстуру с альфа-каналом 0, используя режим пакетной обработки спрайтов «Alphablend». Чтобы снизить аддитивность, увеличьте альфа. Чтобы сделать его менее заметным, уменьшите значение RGB.

Я настоятельно рекомендую убедиться, что для любых текстур в вашем контенте отмечена опция «Предварительно умноженная альфа» в их свойствах, если вы используете это.

person Steffan Donal    schedule 07.08.2011
comment
Спасибо, хотя я не ищу добавку в отдельных каналах - RGB, так как, например, в приведенном выше примере зеленый на зеленом дает более сильный зеленый тон, но я ищу, чтобы он становился белым, когда цвета перекрываются либо тем же цветом, либо другим те. - person Paul; 08.08.2011
comment
Это именно то, что это делает, если вы делаете это правильно. Если у вас есть только зеленый, добавление большего количества зеленого даст вам... более яркий зеленый цвет. Добавьте туда немного красного/синего, и вы получите свой результат. - person Steffan Donal; 08.08.2011
comment
Я знаю, что это так, но это не то, что мне нужно - я ищу зеленый на зеленом (то есть тот же цвет, а также чередование), чтобы получить белый. Я рассмотрю hlsl как вариант. - person Paul; 08.08.2011
comment
Что ж, если вы ищете что-то подобное, вы можете написать шейдер, использующий HSV (Hue, Sat, Value). Сложите вместе значения каждого пикселя, усредните оттенок и насыщенность, и вы получите свой эффект. - person Steffan Donal; 08.08.2011