2015-12-20 98 views
0

我有一個問題,使用DrawUserPrimitives爲我的第一個monogame項目。我正在嘗試繪製應該看起來像地形的多個貼圖。它的工作原理......以某種方式。這是它的樣子:monogame奇怪的網格紋理

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(); 

我只是」找出問題所在。至少經過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