Я ищу способ визуализации каждого непрозрачного пикселя в спрайте сплошным белым цветом (чтобы «высветить» спрайт белым, когда игрок получает урон и т. Д.). Это на Windows Phone 7.
Я использовал очень простой пользовательский шейдер, чтобы сделать это в XNA 3.1, но WP7 не поддерживает их, и найти альтернативу оказалось сложно.
Буду признателен за любую помощь или предложения. Я бы предпочел не создавать вручную сплошную белую копию каждого спрайта в моей игре.
xna
shaders
windows-phone-7
Райан Макд
источник
источник
Ответы:
Способ 1
Вам не нужно создавать сплошную белую версию каждого спрайта в вашей игре вручную - вы также можете автоматизировать процесс во время загрузки. Другими словами, вы можете использовать
Texture2D.GetData()
для доступа к пикселям вашей текстуры (и извлекать их как простыеColor[]
), перебирать их, заменяя непрозрачный пиксель сплошным белым, а затем сохранять его в новой текстуре, используя иTexture2D.SetData()
.Способ 2
Я пытался поиграться,
BlendState
но не смог найти способ сделать все это белым, по крайней мере, в рамках ограничений профиля Reach. Но если кто-то знает способ, дайте мне знать. Однако я нашел способ сделать это, используя буфер трафарета и встроенныйAlphaTestEffect
класс. Идея заключается в следующем:Вот код, который я использовал:
(Шаг 1) Сначала убедитесь, что создается резервный буфер с местом для буфера трафарета:
(Шаг 2) Создайте белую текстуру 1x1, которая будет масштабироваться, чтобы заполнить весь экран:
(Шаг 3) А теперь самое сложное - рендеринг. Ну, не очень сложно, но требует двух
DepthStencilState
объектов и одногоAlphaTestEffect
объекта. Вы должны создать их только один раз.И результат:
источник