一夫一妻制怪异的网格纹理



我在第一个一夫一妻制项目中使用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。你的纹理坐标搞砸了,这导致了随机的白线。

最新更新