Jump to content

  • Log In with Google      Sign In   
  • Create Account


ReyLith

Member Since 22 Sep 2011
Offline Last Active Mar 26 2013 12:47 PM
-----

Topics I've Started

XNA doesn't sometimes draw properly (moved)

23 March 2013 - 04:03 AM

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.

XNA doesn't sometimes draw 3D models properly

22 March 2013 - 11:52 AM

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.

Beginner in game programming

22 September 2011 - 09:36 AM

Hi,

I want to develop a game for my final project degree. I have high programming skills (C, C++, Java, Pythom, etc). By this, I had thought to pass directly to use a graphic engine. The problem is that after looking at several pages, I can't find a general graphic engine.

My first idea was to start from 0 with OpenGL but other people told me that it is very difficult (what do you think?). I have been looking at some graphic engines as Ogre3D, Torque, XNA and so on. With XNA I can get god result soon but I want to learn how to do in low-level.

I'm a little confused and not know where to begin and motor used for this.

Thanks

PARTNERS