Drawing 2D Grid in 3D View - Need help with method

Posted by Deukalion on Game Development See other posts from Game Development or by Deukalion
Published on 2012-07-05T19:14:51Z Indexed on 2012/07/05 21:25 UTC
Read the original article Hit count: 272

Filed under:
|
|
|
|

I'm trying to draw a simple 2D grid for an editor, to able to navigate more clearly around the 3D space, but I can't render it:

Grid2D class, creates a grid of a certain size at a location and should just draw lines.

public class Grid2D : IShape
{

    private VertexPositionColor[] _vertices;

    private Vector2 _size;
    private Vector3 _location;

    private int _faces;

    public Grid2D(Vector2 size, Vector3 location, Color color)
    {
        float x = 0, y = 0;

        if (size.X < 1f)
        {
            size.X = 1f;
        }

        if (size.Y < 1f)
        {
            size.Y = 1f;
        }

        _size = size;
        _location = location;

        List<VertexPositionColor> vertices = new List<VertexPositionColor>();
        _faces = 0;

        for (y = -size.Y; y <= size.Y; y++)
        {
            vertices.Add(new VertexPositionColor(location + new Vector3(-size.X, y, 0), color));
            vertices.Add(new VertexPositionColor(location + new Vector3(size.X, y, 0), color));

            _faces++;
        }

        for (x = -size.X; x <= size.X; x++)
        {
            vertices.Add(new VertexPositionColor(location + new Vector3(x, -size.Y, 0), color));
            vertices.Add(new VertexPositionColor(location + new Vector3(x, size.Y, 0), color));

            _faces++;
        }

        _vertices = vertices.ToArray();
    }

    public void Render(GraphicsDevice device)
    {
        device.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineList, _vertices, 0, _faces);
    }

}

Like this:

+----+----+----+----+
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
+----+----+----+----+
|    |    |    |    |
+----+----+----+----+

Anyone knows what I'm doing wrong? If I add a Shape without texture, it's set automatically to VertexColorEnabled and TextureEnabled = false.

This is how I render it:

        foreach (RenderObject render in _renderObjects)
        {
            render.Effect.Projection = projection;
            render.Effect.View = view;
            render.Effect.World = world;

            foreach (EffectPass pass in render.Effect.CurrentTechnique.Passes)
            {
                pass.Apply();

                try
                {
                    // Could be a Grid2D
                    render.Shape.Render(_device);
                }
                catch
                {
                    throw;
                }
            }
        }

Exception is thrown:

The current vertex shader declaration does not include all the elements required by the current Vertex Shader. Normal0 is missing.

Simply put, I can't figure out how to draw a few lines. I want to draw them one at a time and I guess that's the problem I haven't figured out, and even when I tried rendering vertices[i], vertices[i+1] and primitiveCount = 1, vertices = 2, and so on it didn't work either.

Any suggestions?

© Game Development or respective owner

Related posts about XNA

Related posts about c#