Estoy buscando una manera de renderizar cada píxel no transparente en un sprite blanco sólido (para 'flashear' el sprite blanco cuando el jugador recibe daño, etc.). Esto está en Windows Phone 7.
Estaba usando un sombreador personalizado muy simple para hacer esto en XNA 3.1, pero WP7 no los admite y resulta difícil encontrar una alternativa.
Agradecería cualquier ayuda o sugerencia. Sin embargo, prefiero no tener que crear manualmente una copia blanca sólida de cada sprite en mi juego.
xna
shaders
windows-phone-7
Ryan McD
fuente
fuente
Respuestas:
Método 1
No tienes que crear una versión blanca sólida de cada sprite en tu juego de forma manual ; también podrías automatizar el proceso en el momento de la carga. En otras palabras, puede usar
Texture2D.GetData()
para acceder a los píxeles de su textura (y recuperarlos como un simpleColor[]
), iterar sobre ellos reemplazando cualquier píxel no transparente con blanco sólido y luego guardarlo en una nueva textura usando yTexture2D.SetData()
.Método 2
Traté de jugar con,
BlendState
pero no pude encontrar una manera de hacer que todo sea blanco, al menos no dentro de las limitaciones del perfil Reach. Pero si alguien sabe una manera, hágamelo saber. Lo que sí encontré, sin embargo, fue una forma de hacerlo utilizando el búfer de plantilla y laAlphaTestEffect
clase incorporada . La idea es la siguiente:Aquí está el código que usé:
(Paso 1) Primero asegúrese de que el backbuffer se esté creando con espacio para un búfer de plantilla:
(Paso 2) Cree una textura blanca 1x1 que se escalará para llenar toda la pantalla:
(Paso 3) Y ahora la parte difícil: representarlo. Bueno, no es realmente difícil, pero requiere dos
DepthStencilState
objetos y unAlphaTestEffect
objeto. Debe crearlos solo una vez.Y el resultado:
fuente