2015-12-20 2 views
0

У меня проблема с использованием DrawUserPrimitives для моего самого первого проекта моногейма. Я пытаюсь сделать несколько фрагментов, которые должны выглядеть как ландшафт. И это работает ... так или иначе. Вот как это выглядит:monogame weird grid texture

My terrain -_-. Sorry, I cant post it directly because of 0 reputation

Каждая плитка выглядит следующим образом:

Single tile with a white border

Как вы можете видеть каждый плитка имеет 1px белую кайму. Я думаю, это единственный источник белых линий.

Задача: Мне не нравятся эти белые горизонтальные линии (не граница вокруг каждой плитки, все в порядке).

Так что мой вопрос:: Как избавиться от них. Что не так с моим кодом?

Каждая ячейка создается этот код:

 // [ ][ ][ ] 
     // [ ][ ][ ] 
     // [x ][ ][ ] 
     primitiveList[0].Position = new Vector3(0 + startpos.X, 0, 0 + startpos.Z); 
     primitiveList[0].TextureCoordinate.X = 0; 
     primitiveList[0].TextureCoordinate.Y = 1; 

     // [ ][ ][ ] 
     // [ ][ ][ ] 
     // [ ][ ][x] 
     primitiveList[1].Position = new Vector3(1 + startpos.X, 0, 0 + startpos.Z); 
     primitiveList[1].TextureCoordinate.X = 1; 
     primitiveList[1].TextureCoordinate.Y = 1; 

     // [ ][ ][x ] 
     // [ ][ ][ ] 
     // [ ][ ][ ] 
     primitiveList[2].Position = new Vector3(1 + startpos.X, 0, 1 + startpos.Z); 
     primitiveList[2].TextureCoordinate.X = 1; 
     primitiveList[2].TextureCoordinate.Y = 0; 
     // Ergibt: 
     // [ ][ ][x] 
     // [ ][ ][ ] 
     // [x][ ][x] 


     // [ ][ ][x] 
     // [ ][ ][ ] 
     // [ ][ ][ ] 

     primitiveList[3].Position = new Vector3(1 + startpos.X, 0, 1 + startpos.Z); 
     primitiveList[3].TextureCoordinate.X = 1; 
     primitiveList[3].TextureCoordinate.Y = 0; 
     // [x][ ][ ] 
     // [ ][ ][ ] 
     // [ ][ ][ ] 
     primitiveList[4].Position = new Vector3(0 + startpos.X, 0, 1 + startpos.Z); 
     primitiveList[4].TextureCoordinate.X = 0; 
     primitiveList[4].TextureCoordinate.Y = 0; 

     // [ ][ ][ ] 
     // [ ][ ][ ] 
     // [x][ ][ ] 
     primitiveList[5].Position = new Vector3(0 + startpos.X, 0, 0 + startpos.Z); 
     primitiveList[4].TextureCoordinate.X = 0; 
     primitiveList[4].TextureCoordinate.Y = 1; 

и код рисования:

 _graphics.GraphicsDevice.Clear(Color.CornflowerBlue); 

     foreach (var pass in effect.CurrentTechnique.Passes) 
     { 
      pass.Apply(); 
     } 


     _graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionNormalTexture>(PrimitiveType.TriangleList, _terrainManager.TerrainVertices, 0, _terrainManager.TerrainVertices.Length/3,VertexPositionNormalTexture.VertexDeclaration); 

Установка эффекта:

 if (effect == null) 
     { 
      effect = new BasicEffect(_graphics.GraphicsDevice); 
      /*effect.CurrentTechnique = effect.Techniques ["BasicEffect_PixelLighting_Texture"]; 
      */ 

      effect.EnableDefaultLighting(); 
      effect.TextureEnabled = true; 
      effect.Texture = _grassGrid; 

      var state = new RasterizerState { MultiSampleAntiAlias = true }; 
      state.DepthBias = 100.0f; 
      effect.GraphicsDevice.RasterizerState = state; 

      /*foreach (var lol in effect.Techniques) 
      { 
       Console.WriteLine (lol.Name); 
      }*/ 
      //effect.CurrentTechnique = effect.Techniques ["BasicEffect_Texture"]; 

      _graphics.PreferMultiSampling = true; 
      _graphics.GraphicsDevice.PresentationParameters.MultiSampleCount = 4; 
      //_graphics.ApplyChanges(); 

Я просто не могу» t выяснить, где проблема. По крайней мере, через 3 часа поиска/попытки и ошибки. Я также попробовал включить несколько мультисэмплинг. Но это не имеет никакого эффекта. Я не знаю достаточно, чтобы просто догадаться, что здесь может быть неправильно. Мне не нужно решение (хотя это будет хорошо :)). Подсказка была бы потрясающей. Заранее спасибо за помощь!

ответ

1

У вас есть опечатка здесь:

// [ ][ ][ ] 
// [ ][ ][ ] 
// [x][ ][ ] 
primitiveList[5].Position = new Vector3(0 + startpos.X, 0, 0 + startpos.Z); 
primitiveList[4].TextureCoordinate.X = 0; 
primitiveList[4].TextureCoordinate.Y = 1; 

Индексы primitiveList все должно быть 5. Ваши координаты текстуры получил перепутались, что вызывает случайные белые линии.

+0

Это было! Мне нужны новые очки, или было уже слишком поздно. Большое спасибо! – sereschkin