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,
BlendStatepero 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 laAlphaTestEffectclase 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
DepthStencilStateobjetos y unAlphaTestEffectobjeto. Debe crearlos solo una vez.Y el resultado:
fuente