"Accumulate" buffer results in XNA4?

Posted by Utkarsh Sinha on Game Development See other posts from Game Development or by Utkarsh Sinha
Published on 2012-04-01T22:45:00Z Indexed on 2012/04/01 23:40 UTC
Read the original article Hit count: 335

Filed under:
|

I'm trying to simulate a "heightmap" buffer in XNA4.0 but the results don't look correct. Here's what I'm hoping to achieve: http://www.youtube.com/watch?feature=player_detailpage&v=-Q6ISVaM5Ww#t=517s (8:38).

From what I understand, here are the steps to reach there:

  • Pass height buffer + current entity's heightmap
  • Generate a stencil and update the height buffer
  • Render sprite+stencil

For now, I'm just trying to get the height buffer thing to work. So here's the problem. Inside the draw loop, I do the following:

  • Create a new render target & set it
  • Draw the heightmap with a sprite batch(no shaders)
  • graphicsDevice.SetRenderTarget(null)
  • Draw the rendertarget with SpriteBatch

I expected to see all entities' heightmaps. But only the last entity's heightmap is visible. Any hints on what I'm doing wrong? Here's the code inside the draw loop:

            RenderTarget2D tempDepthStencil = new RenderTarget2D(graphicsDevice, graphicsDevice.Viewport.Width, graphicsDevice.Viewport.Height, false, graphicsDevice.DisplayMode.Format, DepthFormat.None);
            graphicsDevice.SetRenderTarget(tempDepthStencil);


            // Gather depth information
            SpriteBatch depthStencilSpriteBatch = new SpriteBatch(graphicsDevice);
            depthStencilSpriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.None, RasterizerState.CullCounterClockwise);
            depthStencilSpriteBatch.Draw(texHeightmap, pos, null, Color.White, 0, Vector2.Zero, 1, spriteEffects, 1);
            depthStencilSpriteBatch.End();

            graphicsDevice.SetRenderTarget(null);
            SpriteBatch b1 = new SpriteBatch(graphicsDevice);
            b1.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null);
            b1.Draw((Texture2D)tempDepthStencil, Vector2.Zero, null, Color.White, 0, Vector2.Zero, 1, spriteEffects, 1);
            b1.End();

© Game Development or respective owner

Related posts about xna-4.0

Related posts about rendering