以下是繪制正方形面片的一個例子,方便之后查閱:
效果如圖所示:
紅軸為x方向,藍軸為z方向。
代碼如下:
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 public class SingleMesh:MonoBehaviour 5 { 6 public int size = 1;//邊長 7 public int segment = 5;//分段數 8 public Material mat;//mesh材質 9 private Vector3[] vertices;//頂點 10 private Vector2[] uv;//紋理坐標 11 private int[] triangles;//索引 12 13 14 [ContextMenu("Create Mesh")] 15 /// <summary> 16 /// 創建mesh 17 /// </summary> 18 private void CreateMesh() 19 { 20 GameObject obj_cell = new GameObject(); 21 obj_cell.name = "cell"; 22 Mesh mesh = new Mesh(); 23 mesh.Clear(); 24 SetVertivesUV();//生成頂點和uv信息 25 SetTriangles();//生成索引 26 mesh.vertices = vertices; 27 mesh.uv = uv; 28 mesh.triangles = triangles; 29 30 mesh.RecalculateNormals();//重置法線 31 32 mesh.RecalculateBounds(); //重置范圍 33 obj_cell.AddComponent<MeshFilter>().mesh = mesh; 34 obj_cell.AddComponent<MeshRenderer>(); 35 obj_cell.GetComponent<MeshRenderer>().material = mat; 36 } 37 38 /// <summary> 39 /// 設置頂點信息 40 /// </summary> 41 private void SetVertivesUV() 42 { 43 vertices = new Vector3[(segment + 1) * (segment + 1)]; 44 uv = new Vector2[vertices.Length]; 45 int num = 0; 46 float m = (float)size / (float)segment; 47 for (int i = 0; i < segment + 1; i++) 48 for (int j = 0; j < segment + 1; j++) 49 { 50 vertices[num] = new Vector3(j * m,0, i * m); 51 uv[num] = new Vector2((float)j / segment, (float)i / segment); 52 num++; 53 } 54 55 } 56 /// <summary> 57 /// 設置索引 58 /// </summary> 59 private void SetTriangles() 60 { 61 triangles = new int[segment * segment * 6]; 62 int index = 0;//用來給三角形索引計數 63 for (int i = 0; i < segment; i++) 64 for (int j = 0; j < segment; j++) 65 { 66 int line = segment + 1; 67 int self = j + (i * line); 68 69 triangles[index] = self; 70 triangles[index + 1] = self + line + 1; 71 triangles[index + 2] = self + 1; 72 triangles[index + 3] = self; 73 triangles[index + 4] = self + line; 74 triangles[index + 5] = self + line + 1; 75 76 index += 6; 77 } 78 } 79 }
其中triangles索引為鏈接各定點的順序,一個小格的鏈接順序如下:
准則:三角形有兩面,正面可見,背面不可見。三角形的渲染順序與三角形的正面法線呈左手螺旋定則。大部分按順時針:012,213