将颜色应用于平面阴影网格

时间:2018-01-31 16:27:02

标签: c# unity3d mesh vertices

我试图制作程序生成的低多边形地形并为网格着色我决定使用顶点着色。

要生成颜色,我使用以下代码:

    Color[] colourMap = new Color[size * size];
    for (int y = 0; y < size; y++)
    {
        for (int x = 0; x < size; x++)
        {
            colourMap[y * size + x] = BlendColours(GetNeighbourColours(x, y, heightMap, biomeMap));
        }
    }

与普通网格完美匹配,因为顶点列表的长度等于颜色贴图的长度。

然而,一旦我应用平面着色,由于每个三角形没有共享顶点,顶点的数量现在变得很大,因此颜色贴图大小不再等于新的顶点数,并且代码不再起作用。 平板式应用如下:

public void ApplyFlatShading()
{
    Vector3[] flatShadedVertices = new Vector3[triangles.Length];
    Vector2[] flatShadedUvs = new Vector2[triangles.Length];

    for (int i = 0; i < triangles.Length; i++)
    {
        flatShadedVertices[i] = vertices[triangles[i]];
        flatShadedUvs[i] = uvs[triangles[i]];
        triangles[i] = i;
    }

    vertices = flatShadedVertices;
    uvs = flatShadedUvs;
}

我尝试过的事情:

我试图通过将颜色贴图的长度设置为顶点数而不是(尺寸*尺寸)来查看错误,只是为了看它是如何工作的。显然,只有一小部分顶点是彩色的,因为颜色生成代码不再准确。如下所示: enter image description here

我想知道如何解决这个问题,以便我可以为所有顶点着色。我认为在应用平面着色后应该可以生成颜色,因此如果需要在平面着色后知道顶点列表的长度,那应该是可能的。

谢谢!

0 个答案:

没有答案