0

3D 地形 (になるもの) の上にグリッドを重ねようとしています。ただし、現在、頂点のリストを使用してラインリストを描画しています。現在のライン リストには 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);

現時点での結果

4

1 に答える 1

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....
   } 
于 2013-07-26T15:39:58.907 に答える