- Home /
Question by
ben199131837575 · Mar 26, 2020 at 02:10 AM ·
meshuv mappingheightmapmesh renderer
Why would a mesh, by default, be rotated 180 on the X / Z axis?,Why would a texture / mesh be rotated on the z / x and invert all height values by defaul?
I am having some trouble using a mesh with a texture on it to create some landscape. The issue is the mesh renders completly upside down. The texture is on the bottom and the whole heightmapping is upside down. What can cause this? I have found a work around for now, which is to manually rotate the mesh and to manually invert the height values, but this might be an issue later on when I come to use multiple meshes and map things around them likely items.
Mesh Generation Code:
public static MeshData GenerateTerrainMesh(float[,] heightMap)
{
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 x = 0; x < width; ++x)
{
for(int y = 0; y < height; ++y)
{
meshData.uvs[vertexIndex] = new Vector2(x / (float)width, y / (float)height);
meshData.vertices[vertexIndex] = new Vector3(topLeftX + x, heightMap[x, y], topLeftZ - y);
if(x < width - 1 && y < height - 1)
{
meshData.AddTriangle(vertexIndex, vertexIndex + width + 1, vertexIndex + width);
meshData.AddTriangle(vertexIndex + 1 + width, vertexIndex, vertexIndex + 1);
}
++vertexIndex;
}
}
return meshData;
}
Mesh Data code
public Vector3[] vertices;
public int[] triangles;
public int triangleIndex;
public Vector2[] uvs;
public MeshData(int meshWidth, int meshHeight)
{
uvs = new Vector2[meshWidth * meshHeight];
vertices = new Vector3[meshWidth * meshHeight];
triangles = new int[(meshWidth - 1) * (meshHeight - 1) * 6];
triangleIndex = 0;
}
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;
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612225740im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Combining Mesh's For Mesh Deformation 1 Answer
How do I use many different tile textures for one mesh? 2D Tile based game. 2 Answers
Having 6x times more vertices than in 3d max. 1 Answer
Changing colour in a mesh? 0 Answers
combining meshes 0 Answers