Foros - Stratos

Stratos => XNA => Mensaje iniciado por: Hans en 20 de Marzo de 2010, 09:59:13 AM

Título: Problemo con los render targets
Publicado por: Hans en 20 de Marzo de 2010, 09:59:13 AM
Estoy intentando usar deferred shadows y a parte de ya de por sí odiar bastante tener que meterme con este tipo de cosas (me va más la lógica que programar cosas gráficas en sí mismas) cuando no encuentro soluciones aún lo odio más, si cabe  >:D

Si hago esto:


            for (int i = 0; i < scene.Count; i++) scene[i].Draw(Camera.ViewMatrix, Camera.ProjectionMatrix, true, null, true);



(http://i16.photobucket.com/albums/b12/the_hans/1-7.jpg)


Pero si intento renderizar esa misma escena a un render target y luego dibujarla a vía spritebatch me sale todo blanquecino, como mezclado con el difuso. Y no tengo ni pajolera idea de qué está mal.

            GraphicsDevice.SetRenderTarget(0, basicSceneTexture);
            for (int i = 0; i < scene.Count; i++) scene[i].Draw(Camera.ViewMatrix, Camera.ProjectionMatrix, true, null, true);
            GraphicsDevice.SetRenderTarget(0, null);


            GraphicsDevice.Clear(Color.Black);

            spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
            spriteBatch.Draw(basicSceneTexture.GetTexture(), Vector2.Zero, Color.White);
            spriteBatch.End();


(http://i16.photobucket.com/albums/b12/the_hans/2-7.jpg)



La idea era sacar un rendertarget con la escena básica, un render target con la escena con las deferred shadows y luego mezclarlas, a ver cómo quedaba la cosa. Pero tengo problemas hasta con la escena básica :-[
Título: Re: Problemo con los render targets
Publicado por: blau en 20 de Marzo de 2010, 11:09:39 PM
Parece como si se te hubiese quedado por ahi algun renderstate raro.

¿Que pasa si cambias el SpriteBlendMode.AlphaBlend a SpriteBlendMode.None?

Título: Re: Problemo con los render targets
Publicado por: Hans en 21 de Marzo de 2010, 12:06:20 AM
He encontrado el problema, era a la hora de crear el rendertarget.

Cambiar

new RenderTarget2D(GraphicsDevice, width, height, 1, SurfaceFormat.Single, RenderTargetUsage.DiscardContents);

por

new RenderTarget2D(GraphicsDevice, width, height, 1, SurfaceFormat.Color, RenderTargetUsage.DiscardContents);

Single por color :P


Gracias de todas formas Blau ;)