Creating custom plane mesh - Why it's flipped?

I am making a custom mesh, a Plane, simply for educational purposes.

The mesh is created correct but it’s facing downwards (-Y Global), if I want to see it correct then I will have to rotate the GameObject 180 degrees so it’s facing upwards (Y Global), which is bad. I don’t want to rotate it.

Do you know how can I create it correctly right from the start?

In case you’re interested to know here’s the snippet.

public static void Test()
{
	GameObject go = new GameObject("Test");
	MeshRenderer mr = go.AddComponent<MeshRenderer>();
	mr.sharedMaterial = new Material(Shader.Find("Diffuse"));
	MeshFilter mf = go.AddComponent<MeshFilter>();
	Mesh m = new Mesh();
	m.name = "TestMesh";
			
	m.vertices = new Vector3[] {
		new Vector3(-1, 0, -1),
		new Vector3(1, 0, -1),
		new Vector3(1, 0, 1),
		new Vector3(-1, 0, 1)
	};
	
	m.triangles = new int[] {
		0, 1, 2, 0, 2, 3
	};
	
	m.RecalculateNormals();
	m.RecalculateBounds();
	mf.sharedMesh = m;		
}

1 Answer

1

The simplest way is to reverse the order you’re creating the triangles:

m.triangles = new int[] {
   3, 2, 0, 2, 1, 0
};

Reversing the list of m.vertices would, I believe, do the same thing.

EDIT: Technically, another way to do this is to use a material with a shader that only renders backfaces. However, I’d avoid that route unless I knew exactly why I was doing it.

Superb! Thanks. :)