我正在开发一个程序性地形生成系统,我想让它具有低多边形效果。我尝试使用纹理颜色,但它不是我想要的。相反,我决定单独指定三角形的颜色,而且我有一个问题。
这是我创建网格的代码。
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。
答案 0 :(得分:-1)
解决:我的Shader上有Unlit / Texture,所以它期待纹理。我的坏!