Странный «пушок» при рендеринге текстуры на плоскости в XNA 4.0

Я только начинаю работать с XNA и уверен, что упускаю кое-что очень простое. У меня есть квадроцикл, который я нарисовал для земли. На эту плоскость я обернул 2D текстуру. Вблизи текстура выглядит хорошо, но когда я перемещаю камеру, я вижу кучу белых артефактов повсюду. Они исчезают, когда я подхожу к ним. Я предполагаю, что это проблема выборки или что-то подобное, но я застрял.

Во-первых, я создал класс QuadDrawer, чтобы нарисовать плоскость для меня. Он является производным от DrawableGameComponent.

QuadDrawer:

class QuadDrawer : DrawableGameComponent
  {
    private string _textureName;
    private Texture2D _texture;
    private BasicEffect _effect;

    private float _size = 100;

    private VertexPositionNormalTexture[] _vertices;
    private int[] _indices;

    public QuadDrawer(Game game, float size, string textureName)
      : base(game)
    {
      this._size = size;
      this._textureName = textureName;
    }

    public override void Initialize()
    {
      BuildVertices();
      base.Initialize();
    }

    private void BuildVertices()
    {
      _vertices = new VertexPositionNormalTexture[4];
      _indices = new int[6];

      _vertices[0].Position = Vector3.Forward + Vector3.Left;
      _vertices[0].TextureCoordinate = new Vector2(0.0f, 1.0f);
      _vertices[1].Position = Vector3.Backward + Vector3.Left;
      _vertices[1].TextureCoordinate = new Vector2(0.0f, 0.0f);
      _vertices[2].Position = Vector3.Forward + Vector3.Right;
      _vertices[2].TextureCoordinate = new Vector2(1.0f, 1.0f);
      _vertices[3].Position = Vector3.Backward + Vector3.Right;
      _vertices[3].TextureCoordinate = new Vector2(1.0f, 0.0f);

      for (int i = 0; i < _vertices.Length; i++)
      {
        _vertices[i].Normal = Vector3.Up;
        _vertices[i].Position *= _size;
        _vertices[i].TextureCoordinate *= _size;
      }

      _indices[5] = 0; _indices[4] = 1; _indices[3] = 2;
      _indices[2] = 2; _indices[1] = 1; _indices[0] = 3;
    }

    protected override void LoadContent()
    {
      _texture = this.Game.Content.Load<Texture2D>(_textureName);
      _effect = new BasicEffect(this.GraphicsDevice);
      _effect.EnableDefaultLighting();
      _effect.PreferPerPixelLighting = true;
      _effect.SpecularColor = new Vector3(0.1f, 0.1f, 0.1f);

      _effect.World = Matrix.Identity;
      _effect.TextureEnabled = true;
      _effect.Texture = _texture;

      base.LoadContent();
    }

    protected override void Dispose(bool disposing)
    {
      base.Dispose(disposing);
    }

    public override void Draw(GameTime gameTime)
    {
      MyGame game = this.Game as MyGame;

      GraphicsDevice.SamplerStates[0] = SamplerState.AnisotropicWrap;
      GraphicsDevice.DepthStencilState = DepthStencilState.Default;

      _effect.View = game.Camera.ViewMatrix;
      _effect.Projection = game.Camera.ProjectionMatrix;

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

        GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionNormalTexture>(PrimitiveType.TriangleList, _vertices, 0, 4, _indices, 0, 2);
      }
      base.Draw(gameTime);
    }

  }

Из метода Initialize () моего основного класса Game я просто создаю экземпляр этого объекта и передаю GameObject, Size и имя текстуры, которое я хочу использовать:

_floor = new QuadDrawer(this, 100.0f, "Textures/checker");
  this.Components.Add(_floor);

После того, как объект добавлен в мою коллекцию компонентов, вызывается метод Draw моего QuadDrawer, и все должно быть хорошо. Вот изображение того, что я вижу. Обратите внимание, что это должен быть сплошной серый цвет со светлыми линиями, идущими в виде сетки. Белые артефакты движутся, когда вы перемещаете камеру по поверхности, но исчезают, когда вы приближаетесь.

Вот изображение, показывающее белые артефакты:

Fuzzy

Это крупный план, показывающий, как это должно выглядеть: Close Up

Вот еще одна картинка, показывающая, насколько плохо может быть на расстоянии: Better view of the problem

А вот как это должно выглядеть издалека: enter image description here

Картина не самая лучшая, но вы понимаете, о чем я говорю. Когда камера движется, становится совсем плохо. Я видел эту текстуру в других местах, и она отлично работает. Есть идеи, что это может быть?

Я был бы рад предоставить дополнительную информацию, если она вам понадобится.

Спасибо,

-Scott

5
задан Scott 23 June 2011 в 04:35
поделиться