Предложенный подход для Photoshop-подобных режимов смешивания в XNA - PullRequest
1 голос
/ 11 ноября 2010

Я работаю над 2D-проектом на C # с использованием XNA, где мне нужно визуализировать несколько оттенков серого на Texture2D - я переключаю состояния рендеринга и использую пакет спрайтов и получаю результаты главным образом благодаря другим сообщениям stackoverflow. То, что я не смог найти, это как смешать, используя что-то отличное от Alpha или Multiply.

Результат, который я ищу, будет эквивалентен режиму смешивания Lighten в Photoshop - между содержимым текстуры и спрайтом, который я рисую, мне действительно нужны пиксели светлее, чем текстура, нарисованная для текстуры. Мой наивный подход заключается в циклическом прохождении данных пикселей в источнике и месте назначения. Есть ли хорошее решение?

1 Ответ

2 голосов
/ 11 ноября 2010

Если вы используете XNA 4.0, вы можете передать объект BlendState в SpriteBatch.Begin.

Вы хотите установить BlendState.ColorBlendFunction на BlendFunction.Max. В документации перечислены действительные функции наложения.

Для достижения вашего эффекта, я думаю, вы также захотите установить ColorSourceBlend и ColorDestinationBlend оба равными Blend.One.

То же самое возможно в более ранних версиях XNA, но вы должны использовать SpriteBatch с SpriteSortMode.Immediate и изменять соответствующие члены GraphicsDevice.RenderState после вызова Begin и перед первым вызовом Draw.

Прочтите эту запись в блоге для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...