- Home /
Question by
$$anonymous$$ · Aug 24, 2014 at 07:51 PM ·
meshuvprogrammatically
Mesh.vertices and Mesh.uv Clarification
I am trying to make random shapes with a mesh, but my first step is to learn how to make a mesh programmatically. My question is simple. Why does A work, but B does not?
A (should be right triangle with right angle at top left and it works):
void Start () {
gameObject.AddComponent("MeshFilter");
gameObject.AddComponent("MeshRenderer");
Mesh mesh = GetComponent<MeshFilter>().mesh;
mesh.Clear();
mesh.vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0) };
mesh.uv = new Vector2[] { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1) };
mesh.triangles = new int[] { 0, 1, 2 };
}
B (should be right triangle with right angle at bottom right...but nothing draws):
void Start () {
gameObject.AddComponent("MeshFilter");
gameObject.AddComponent("MeshRenderer");
Mesh mesh = GetComponent<MeshFilter>().mesh;
mesh.Clear();
mesh.vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(1, 1, 0) };
mesh.uv = new Vector2[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(1, 1) };
mesh.triangles = new int[] { 0, 1, 2 };
}
Comment
Best Answer
Answer by robertbu · Aug 24, 2014 at 07:54 PM
Triangles are one sided. You have to wrap them in the correct order (clockwise). So given your points, the display side of the triangle is opposite in B from A. To fix the problem, you can: 1) rotate the game object, 2) reorder the vertices, 3) reorder the triangle. For example, change line 8 in B to:
mesh.triangles = new int[] {0,2,1};