mesh.colors不工作。网格为白色

时间:2017-09-06 20:48:41

标签: c# unity3d

我正在开发一个程序性地形生成系统,我想让它具有低多边形效果。我尝试使用纹理颜色,但它不是我想要的。相反,我决定单独指定三角形的颜色,而且我有一个问题。

这是我创建网格的代码。

public Mesh CreateMesh()
{
    Mesh mesh = new Mesh();
    mesh.vertices = vertices;
    mesh.triangles = triangles;
    mesh.uv = uvs;

    Color[] colours = new Color[vertices.Length];

    for (int i = 0; i < triangles.Length; i++)
    {
        int vertIndex = triangles[i];
        if (i % 3 == 0)
        {
            colours[vertIndex] = Color.green;
        }
    }

    mesh.colors = colours;

    if (useFlatShading)
    {
        mesh.RecalculateNormals();
    }
    else
    {
        mesh.normals = bakedNormals;
    }

    return mesh;
}

我暂时使用Color.green。以下是我用于平面着色的代码,以使其具有低多边效果:

void FlatShading()
{
    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;
}

任何人都可以看到问题。如果没有,我会更多地搜索我的代码并试着弄明白。

非常感谢!

编辑:Flatshading被称为BEFORE CreateMesh,所以在分配给网格本身之前计算新的顶点和uv。

1 个答案:

答案 0 :(得分:-1)

解决:我的Shader上有Unlit / Texture,所以它期待纹理。我的坏!