- Home /
Mesh not working
I'm trying to make a mesh with a colours and different highs on it so that it resembles a landscape with mountains and lakes and so forth, but for some reason the mesh only appears as a black completely flat plane. I dont know why this is happening, so if anyone have any suggestions please help. Code for the mesh generator script.
public static class MeshGenerator
{
public static MeshData GenerateTerrainMesh(float[,] heightMap, float heightMultiplier)
{
int width = heightMap.GetLength(0);
int height = heightMap.GetLength(1);
float topLeftX = (width - 1) / -2f;
float topLeftZ = (height - 1) / 2f;
MeshData meshData = new MeshData(width, height);
int vertexIndex = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
meshData.vertices[vertexIndex] = new Vector3(topLeftX + x, heightMap[x, y] * heightMultiplier, topLeftZ - y);
meshData.uvs[vertexIndex] = new Vector2(x / (float)width, y / (float)height);
if (x < width - 1 && y < height - 1)
{
meshData.AddTriangle(vertexIndex, vertexIndex + width + 1, vertexIndex + width);
meshData.AddTriangle(vertexIndex + width + 1, vertexIndex, vertexIndex + 1);
}
vertexIndex++;
}
}
return meshData;
}
}
public class MeshData
{
public Vector3[] vertices;
public int[] triangles;
public Vector2[] uvs;
int triangleIndex;
public MeshData(int meshWidth, int meshHeight)
{
vertices = new Vector3[meshWidth * meshHeight];
uvs = new Vector2[meshWidth * meshHeight];
triangles = new int[((meshWidth - 1) * (meshHeight - 1)*6)];
}
public void AddTriangle(int a, int b, int c)
{
triangles[triangleIndex] = a;
triangles[triangleIndex+1] = b;
triangles[triangleIndex+2] = c;
triangleIndex += 3;
}
public Mesh CreateMesh()
{
Mesh mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.uv = uvs;
mesh.RecalculateNormals();
return mesh;
}
}
Also I have this in another script.
else if (drawMode == DrawMode.Mesh)
{
display.DrawMesh (MeshGenerator.GenerateTerrainMesh(noiseMap, meshHeightMultiplier), TextureGenerator.TextureFromColourMap(colourMap, mapWidth, mapHeight));
}
Answer by YetAnotherKen · Sep 09, 2019 at 07:27 PM
The colouring is in the TextureGenerator scripts. the most complete code is in the 21st video where Sabastian finishes up that set. You may still have some fiddling to do.
But it should still work like it does for him at that part of the series shouldent it? I'm also unable to find any errors in the TextureGenerator script. And why does the mesh also appear completely flat?
His videos are misleading, he makes them with the full build which is ahead of the episodes in the series. You can download his code from github, there is a link to it on the youtube page where his videos are hosted. That should help get you past some of the problems you are having.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Unity isn't reading the mesh I created 1 Answer
Display mesh with wireframe using barycentric coordinates 0 Answers
how do i fix this error 2 Answers
Understanding an error message. 1 Answer