Sign in to follow this  
ReyLith

XNA doesn't sometimes draw 3D models properly

Recommended Posts

Hi,
 
I am developing an 3D platformer game with XNA framework and I am experimenting some errors in drawing. Here is some images of the errors, that appears in 3D models and in planes:
R4ro3.png    VOfHO.png
 
In the first image, all the plane should be with the gray texture. In the second image shouldn't appear the errors. The code that I am using to load the vertices and textures is the next:
 
    // CODE INCLUDED IN LOAD() METHOD
    Vector3 left = Vector3.Cross(_normal, _up);
    Vector3 lowerLeft, upperLeft, lowerRight, upperRight;
    for (int i = 0; i < _rows; i++)
    {
       for (int j = 0; j < _cols; j++)
       {
           if (information[i + 5, j] != "Null")
           {
               string[] aux = information[i + 5, j].Split('_');

               lowerLeft = _origin + (_up * i);
               lowerLeft += -left * j;
               lowerLeft += -left * ToInt(aux[1][0]);
               upperLeft = lowerLeft + (_up * ToInt(aux[1][1]));
               lowerRight = lowerLeft + (left * ToInt(aux[1][0]));
               upperRight = lowerRight + (_up * ToInt(aux[1][1]));

               _vertices.Add(new VertexPositionNormalTexture(
                   lowerRight, _normal, new Vector2((1.0f / _numberOfTiles) * (Convert.ToInt32(aux[0]) - 1), 1)));
               _vertices.Add(new VertexPositionNormalTexture(
                   upperRight, _normal, new Vector2((1.0f / _numberOfTiles) * (Convert.ToInt32(aux[0]) - 1), 0)));
               _vertices.Add(new VertexPositionNormalTexture(
                   lowerLeft, _normal, new Vector2((1.0f / _numberOfTiles) * Convert.ToInt32(aux[0]), 1)));

               _vertices.Add(new VertexPositionNormalTexture(
                   upperRight, _normal, new Vector2((1.0f / _numberOfTiles) * (Convert.ToInt32(aux[0]) - 1), 0)));
               _vertices.Add(new VertexPositionNormalTexture(
                   upperLeft, _normal, new Vector2((1.0f / _numberOfTiles) * Convert.ToInt32(aux[0]), 0)));
               _vertices.Add(new VertexPositionNormalTexture(
                   lowerLeft, _normal, new Vector2((1.0f / _numberOfTiles) * Convert.ToInt32(aux[0]), 1)));
           }
       }
    }

    _tileVertexBuffer = new DynamicVertexBuffer(EngineManager.GameGraphicsDevice,
        VertexPositionNormalTexture.VertexDeclaration,
        _rows * _cols * 6, BufferUsage.WriteOnly);

 

The code used to draw the vertices is the next:
 
    // CODE INCLUDED IN DRAW() METHOD
    _tileVertexBuffer.SetData<VertexPositionNormalTexture>(_vertices.ToArray());

    _effect.View = CameraManager.ActiveCamera.View;
    _effect.Projection = CameraManager.ActiveCamera.Projection;
    _effect.Texture = TextureManager.GetTexture(_textureName).BaseTexture;
    _effect.DiffuseColor = Color.LightBlue.ToVector3();
                
    foreach (EffectPass pass in _effect.CurrentTechnique.Passes)
    {
        pass.Apply();

        EngineManager.GameGraphicsDevice.SetVertexBuffer(_tileVertexBuffer);
        EngineManager.GameGraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, _tileVertexBuffer.VertexCount / 3);
    }

    EngineManager.GameGraphicsDevice.SetVertexBuffer(null);

 

I am not using an index buffer to draw the plane and I don't know if this is the problem. I have spent a long time surfing on Internet but I can't find a similar problem. Thanks in advance.
 
PD: Sorry for my english level.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this