0

各三角形に草のテクスチャが追加されるように、各頂点にテクスチャ座標を追加しようとしています。私が持っているコードは、領域全体にテクスチャを引き伸ばしますが、うまくいきません。(0,0)、(0,1)、(1,1) などを頂点に正しく追加するにはどうすればよいですか? 現在、それらは SetUpVertices() メソッドに追加されていますが、コードが左上、左下、右下などであるかどうかを区別できる場合は、SetUpIndices() メソッドに追加する必要があります。関連するメソッドは以下にあり、完全な Game1.cs コードはここにありますhttp://pastebin.com/REd8QDZA

    private void SetUpVertices()
    {
        vertices = new VertexPositionNormalTexture[terrainWidth * terrainHeight];
        for (int x = 0; x < terrainWidth; x++)
        {
            for (int y = 0; y < terrainHeight; y++)
            {
                vertices[x + y * terrainWidth].Position = new Vector3(x, -y, heightData[x, y]);
                vertices[x + y * terrainWidth].TextureCoordinate.X = x / (terrainWidth - 1.0);
                vertices[x + y * terrainWidth].TextureCoordinate.Y = y / (terrainHeight - 1.0);
            }
        }
    }
    private void SetUpIndices()
    {
        indices = new short[(terrainWidth - 1) * (terrainHeight - 1) * 6];
        int counter = 0;
        for (int y = 0; y < terrainHeight - 1; y++)
        {
            for (int x = 0; x < terrainWidth - 1; x++)
            {
                int lowerLeft = x + y * terrainWidth;
                int lowerRight = (x + 1) + y * terrainWidth;
                int topLeft = x + (y + 1) * terrainWidth;
                int topRight = (x + 1) + (y + 1) * terrainWidth;

                indices[counter++] = (short)topLeft;
                indices[counter++] = (short)lowerRight;
                indices[counter++] = (short)lowerLeft;

                indices[counter++] = (short)topLeft;
                indices[counter++] = (short)topRight;
                indices[counter++] = (short)lowerRight;
            }
        }
    }
4

1 に答える 1

1

指定するだけ

vertices[x + y * terrainWidth].TextureCoordinate.X = x;
vertices[x + y * terrainWidth].TextureCoordinate.Y = y;

デフォルトでは、1 より大きいテクスチャ座標はラップされ、テクスチャが繰り返されます。

于 2013-02-13T20:29:19.887 に答える