XNA - Drawling Linelist(网格覆盖3d地形)

时间:2013-07-26 01:20:57

标签: 3d xna game-engine

我正在尝试在我的(将会变成)三维地形上叠加网格。但是现在我使用顶点列表绘制一个折线列表。当前行列表有12个顶点并导出此结果。我希望有人能指出我正确的方向让网格正常工作?

编辑:顺便说一下,现在我需要30个顶点来获得网格?

当前顶点代码:

private void SetUpTileVertices()
    {

        tileVertices = new VertexPositionColor[terrainWidth * terrainHeight];
        for (int x = 0; x < terrainWidth; x++)
        {
            for (int y = 0; y < terrainHeight; y++)
            {
                tileVertices[x + y * terrainWidth].Position = new Vector3(x, heightData[x, y] + 0.01f, -y);
                tileVertices[x + y * terrainWidth].Color = Color.Red;
            }
        }
    }

图:

device.DrawUserPrimitives(PrimitiveType.LineList, tileVertices, 0, tileVertices.Length/2);

Currently the result

1 个答案:

答案 0 :(得分:1)

在绘制地形时......您可以计算世界空间中地形像素的位置,并根据网格线中像素的接近程度来更改其颜色。

如果您的顶点位于(0,0),(1,0),(2,0),....                                    (0,1),(1,1),(2,1),......

你可以将顶点着色器的顶点位置传递给像素着色器......并且在像素着色器中...你可以做类似的事情:

  float4 pixel_shader (in float4 color:COLOR0, 
                     in float2 tex: TEXCOORD0, 
                     in float3 pos:TEXCOORD1) : COLOR
  {
     // Don't draw the pixel if it's to close to grid lines, 
     // Instead you could tint pixel with another color .. 
     clip ( frac(pos.X + 0.01) - 0.02 ); 
     clip ( frac(pos.Z + 0.01) - 0.02 );  

     // Sampling texture and returning pixel color code....
   }