Forum
Contact





DirectX using C#
DirectX using C++
DirectX using Visual Basic



Latest Forum posts

 Tutorial 3 for Windows Phone 7
  Posted by: Anonymous
  When: 20/05/2013 at 02:30:13

 No download link for 2d series: shooter
  Posted by: zaboleq
  When: 07/05/2013 at 15:46:28

 Collision Class?
  Posted by: Anonymous
  When: 05/05/2013 at 19:03:59

 stack overflow
  Posted by: cityguy
  When: 07/04/2013 at 01:58:38

 Meshes looks strange.
  Posted by: ab_saratov
  When: 01/04/2013 at 04:31:08

 Lamppost Not loaded
  Posted by: Anonymous
  When: 22/03/2013 at 06:43:52

 Collision Class?
  Posted by: Da_Boom
  When: 21/03/2013 at 01:23:09

 Math boggles me
  Posted by: cityguy
  When: 17/03/2013 at 03:44:48

 Collision Class?
  Posted by: Da_Boom
  When: 16/03/2013 at 03:44:42

 Tree update
  Posted by: Anonymous
  When: 15/03/2013 at 21:11:22

 XNA 4.0
  Posted by: Anonymous
  When: 15/03/2013 at 19:43:57

 Error when I try to run.
  Posted by: Anonymous
  When: 15/03/2013 at 19:21:06

 Error With the Effect File
  Posted by: Anonymous
  When: 15/03/2013 at 18:21:01

 Can only get shadowmap
  Posted by: Anonymous
  When: 15/03/2013 at 15:48:52

 Vertex and Pixel Shader Versions?
  Posted by: Anonymous
  When: 15/03/2013 at 15:07:16

 Unsupported properties
  Posted by: Anonymous
  When: 15/03/2013 at 14:23:00

 Problem Loading Skybox
  Posted by: Rana
  When: 15/03/2013 at 10:34:45

 Black Screen Of Death - Help!
  Posted by: Anonymous
  When: 15/03/2013 at 03:43:43

 2.0 anyone?
  Posted by: Anonymous
  When: 15/03/2013 at 02:19:48

 Defitinition of tha rotation axis
  Posted by: Anonymous
  When: 15/03/2013 at 00:55:14




Topic: Sprit Batch Issue



  
Goto parent category
  
Create a new user account


   Sprit Batch Issue
 Poster : garfinkle
 Posts: 7
 Country : England
 City: Manchester

  
Posted by garfinkle on 22/12/2008 at 14:28:16
Hi All

I've built the terrain and water system and made them into an framework based system. If am drawing the terrain and water as follows


protected override void Draw(GameTime gameTime)
        {
            SetupWater();

            water.DrawRefractionMap();
            water.DrawReflectionMap();

            float time = (float)gameTime.TotalGameTime.TotalMilliseconds / 100000.0f;
            device.RenderState.CullMode = CullMode.None;
            device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.Black, 1.0f, 0);

            SetupSkyDome();
            skyDome.DrawSkyDome();

            SetupTerrain();
            terrain.DrawTerrain();

            water.DrawWater(time);            
            base.Draw(gameTime);
        }


Everything at this point is loading fine.

I want to use a SpriteBatch to load images and text onto the screen for an interface, however when ever I add the following code to the draw() method


            spriteBatch.Begin();
            int i = 0;
            foreach (string entry in log)
            {
                spriteBatch.DrawString(myFont, entry, new Vector2(20, 20 * ++i), Color.White);
            }
            foreach (string gamerTime in gamerTimes.Values)
            {
                spriteBatch.DrawString(myFont, gamerTime, new Vector2(graphics.GraphicsDevice.Viewport.Width - 150, 20), Color.Red);
            }

            spriteBatch.End();


The graphics go crazy. The terrain becomes semi-transparent and the water plane overlays the whole terrain.

Any idea why the spritebatch is causing this problem.

P.S. The sprite batch causes the issue no matter where in the draw method i put it.

Thanks in advance.

Garfinkle
 Poster : garfinkle
 Posts: 7
 Country : England
 City: Manchester

  
Posted by garfinkle on 22/12/2008 at 14:42:28
Fixed it,

Here is the issue and how to solve it for anyone else who may have this problem.

When you use a SpriteBatch, it resets several settings that affect 3D drawing before the spritebatch.begin() method starts.

To fix the issue, you just need to reset the changed variables just before the 3D objects are drawn.

The settings that need to be reset are as follows. I have written them in a function so that it can be used easier in draw methods


void prepare3d()
{
            GraphicsDevice.RenderState.DepthBufferEnable = true;
            GraphicsDevice.RenderState.AlphaBlendEnable = false;
            GraphicsDevice.RenderState.AlphaTestEnable = false;

            GraphicsDevice.SamplerStates[0].AddressU = TextureAddressMode.Wrap;
            GraphicsDevice.SamplerStates[0].AddressV = TextureAddressMode.Wrap;
}



so if you call the prepare3d() method in draw() before you start any 3D drawing, there will be no issues when dealing with Spritebatches.

Hope this helps anyone

  
Post a new reply
 





Google
 
Web www.riemers.net
If you appreciate the amount of time I spend creating and updating
these pages, feel free to donate -- any amount is welcome !
- Website design & DirectX code : Riemer Grootjans -
©2006 Riemer Grootjans


News
Home
Forum
XNA 2.0 Recipes Book (8)
XNA 3.0 Recipes Book (8)
Downloads
Extra Reading (3)
Matrices: geometrical
Matrix Mathematics
Homogenous matrices
Community Projects (1)
Tutorials (160)
XNA 4.0 using C# (89)
DirectX using C# (54)
Series 1:Terrain (14)
Opening a window
Linking to the Device
Drawing a triangle
Camera
Rotation - Translation
Indices
Terrain creation
Terrain from file
DirectInput
Importing bmp files
Colored vertices
DirectX Light basics
Mesh creation
Mesh lighting
Series 2: Flightsim (19)
Series 3: HLSL (19)
Short Tuts (2)
Resizing problem
Checking Device caps
DirectX using C++ (15)
DirectX using VB (2)