我在第一个一夫一妻制项目中使用DrawUserPrimitives时遇到问题。我正在尝试绘制多个看起来像地形的瓷砖。它有效。。。不知怎么的。这就是它的样子:
我的地形。对不起,由于信誉为0,我无法直接发布
每个瓦片看起来都是这样的:
带有白色边框的单瓷砖
正如你所看到的,每个瓷砖都有一个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个小时之后。我还尝试了一些多重采样。但这绝对没有效果。我知道的还不足以猜测这里可能出了什么问题。我不需要一个解决方案(尽管那很好:)。一个提示就太棒了。提前感谢您的帮助!
您在这里有一个拼写错误:
// [ ][ ][ ]
// [ ][ ][ ]
// [x][ ][ ]
primitiveList[5].Position = new Vector3(0 + startpos.X, 0, 0 + startpos.Z);
primitiveList[4].TextureCoordinate.X = 0;
primitiveList[4].TextureCoordinate.Y = 1;
CCD_ 1的索引应该都是5。你的纹理坐标搞砸了,这导致了随机的白线。