//private private void initVertices0(VoxelDrawData draw_data) { for (int i = 0, count = draw_data.vertices.Count; i < count; ++i) { Vertex new_vertex = new Vertex(draw_data.vertices[i], i); vertices.Add(new_vertex); } }
private void initVertices(VoxelDrawData draw_data) { initVertices0(draw_data); initVertices1(draw_data); initVertices2(); initVertices3(); initVertices4(); }
private Task initVertices1Task(VoxelDrawData data) { Task task = new Task(); task.init = delegate { initVertices1(data); }; return(task); }
public void build2(VoxelProduct product) { draw_ = product.draw; List <VoxelDrawData.Vertice> vertices = draw_.vertices; //Debug.Log ("!@@" + vertices.Count); List <int> triangles = draw_.triangles; List <VoxelDrawData.Vertice> tVertices = new List <VoxelDrawData.Vertice>(); List <int> tTriangles = new List <int>(); Dictionary <int, int> ht = new Dictionary <int, int>(); for (int i = 0; i < vertices.Count; ++i) { int index = tVertices.FindIndex(delegate(VoxelDrawData.Vertice v) { if (v.position == vertices[i].position && v.color == vertices[i].color && v.normal == vertices[i].normal ) { return(true); } else { return(false); } }); int newIndex = -1; int oldIndex = i; if (index == -1) { newIndex = tVertices.Count; tVertices.Add(vertices[i]); } else { newIndex = index; } ht[oldIndex] = newIndex; } for (int i = 0; i < triangles.Count; ++i) { int oldIndex = triangles[i]; int newIndex = ht[oldIndex]; tTriangles.Add(newIndex); } // Debug.Log ("!@@" + tVertices.Count); product.draw.triangles = tTriangles; product.draw.vertices = tVertices; }
private Task initVerticesTask(VoxelDrawData data) { TaskList tl = new TaskList(); tl.push(TaskLog.Logger(initVertices0Task(data), "init_vertices0")); tl.push(TaskLog.Logger(initVertices1Task(data), "init_vertices1")); tl.push(TaskLog.Logger(initVertices2Task(), "init_vertices2")); tl.push(TaskLog.Logger(initVertices3Task(), "init_vertices3")); tl.push(TaskLog.Logger(initVertices4Task(), "init_vertices4")); return(tl); }
private Dictionary<Vector3, Dictionary<Color, Dictionary<Vector3, Point>>> mesh_ = null; // = new Dictionary<Vector3, Point>(); #endregion Fields #region Methods public static Dictionary<Vector3, Dictionary<Color, Dictionary<Vector3, Point>>> Draw2Mesh(VoxelDrawData draw) { Dictionary<Vector3, Dictionary<Color, Dictionary<Vector3, Point>>> mesh = new Dictionary<Vector3, Dictionary<Color, Dictionary<Vector3, Point>>>();// = new Dictionary<Vector3, Point>(); List<VoxelDrawData.Vertice> vex = draw.vertices; for (int i = 0; i < vex.Count; ++i) { VoxelDrawData.Vertice v = vex[i]; if (!mesh.ContainsKey (v.normal)) { mesh [v.normal] = new Dictionary<Color, Dictionary<Vector3, Point>> (); } if (!mesh [v.normal].ContainsKey (v.color)) { mesh [v.normal] [v.color] = new Dictionary<Vector3, Point> (); } Point point = new Point (); point.vertice = v; mesh [v.normal] [v.color][v.position] = point; } List<int> trx = draw.triangles; for (int i = 0; i < trx.Count; i += 3) { VoxelDrawData.Vertice a = vex [trx [i]]; VoxelDrawData.Vertice b = vex [trx [i+1]]; VoxelDrawData.Vertice c = vex [trx [i+2]]; Dictionary<Vector3, Point> m = mesh [a.normal] [a.color]; Point A = m [a.position]; Point B = m [b.position]; Point C = m [c.position]; A.link.Add (B); A.link.Add (C); B.link.Add (A); B.link.Add (C); C.link.Add (A); C.link.Add (B); } return mesh; }
private void initVertices1(VoxelDrawData draw_data) { for (int i = 0, count = draw_data.triangles.Count; i < count; i += 3) { Vertex v0 = vertices[draw_data.triangles[i]]; Vertex v1 = vertices[draw_data.triangles[i + 1]]; Vertex v2 = vertices[draw_data.triangles[i + 2]]; Triangle new_triangle = new Triangle(v0, v1, v2); v0.neighbor_vertices.Add(v1); v0.neighbor_vertices.Add(v2); v0.adjacent_faces.Add(new_triangle); v1.neighbor_vertices.Add(v2); v1.neighbor_vertices.Add(v0); v1.adjacent_faces.Add(new_triangle); v2.neighbor_vertices.Add(v0); v2.neighbor_vertices.Add(v1); v2.adjacent_faces.Add(new_triangle); } }
public override void build(VoxelProduct product){ draw_ = product.draw; List<VoxelDrawData.Vertice> vertices = draw_.vertices; List<int> triangles = draw_.triangles; List<VoxelDrawData.Vertice> tVertices = new List<VoxelDrawData.Vertice>(); List<int> tTriangles = new List<int>(); Dictionary<int, int> ht = new Dictionary<int, int>(); for(int i=0; i<vertices.Count; ++i){ int index = tVertices.FindIndex(delegate(VoxelDrawData.Vertice v) { if(v.position == vertices[i].position && v.color == vertices[i].color && v.normal == vertices[i].normal ){ return true; } else{ return false; } }); int newIndex = -1; int oldIndex = i; if(index == -1){ newIndex = tVertices.Count; tVertices.Add(vertices[i]); }else{ newIndex = index; } ht[oldIndex] = newIndex; } for(int i = 0; i<triangles.Count; ++i){ int oldIndex = triangles[i]; int newIndex = ht[oldIndex]; tTriangles.Add(newIndex); } product.draw.triangles = tTriangles; product.draw.vertices = tVertices; }
private Task initVertices1Task(VoxelDrawData data) { Task task = new Task (); task.init = delegate { initVertices1(data); }; return task; }
public static void Mesh2Draw(Dictionary<Vector3, Dictionary<Color, Dictionary<Vector3, Point>>> mesh, VoxelDrawData draw) { //VoxelDrawData draw = new VoxelDrawData (); draw.vertices.Clear (); draw.triangles.Clear (); List<Vector3> nKeys = new List<Vector3> (mesh.Keys); List<Triangle> trx = new List<Triangle> (); for (int i = 0; i < nKeys.Count; ++i) { Dictionary<Color, Dictionary<Vector3, Point>> colors = mesh [nKeys [i]]; List<Color> cKeys = new List<Color> (colors.Keys); for (int j = 0; j < cKeys.Count; ++j) { Dictionary<Vector3, Point> points = colors [cKeys [j]]; List<Vector3> pKeys = new List<Vector3> (points.Keys); for (int m = 0; m < pKeys.Count; ++m) { Point point = points [pKeys [m]]; GetTriangle (point, trx); point.index = draw.vertices.Count; draw.vertices.Add (point.vertice); points.Remove (pKeys [m]);/**/ } } } Debug.Log (trx.Count); for (int i = 0; i < trx.Count; ++i) { draw.triangles.AddRange (trx[i].getIndex()); } }
public void build(VoxelProduct product) { draw_ = product.draw; List <VoxelDrawData.Vertice> vertices = draw_.vertices; List <int> triangles = draw_.triangles; List <VoxelDrawData.Vertice> tVertices = new List <VoxelDrawData.Vertice>(); Dictionary <Vector3, Pack> board = new Dictionary <Vector3, Pack>(); List <Pack> temp = new List <Pack> (); List <int> tTriangles = new List <int>(); Dictionary <int, int> ht = new Dictionary <int, int>(); List <Pack> all = new List <Pack> (); for (int i = 0; i < vertices.Count; ++i) { all.Add(new Pack(i, vertices [i])); } while (all.Count != 0) { for (int i = 0; i < all.Count; ++i) { if (board.ContainsKey(all [i].vertice.position)) { Pack ver = board [all[i].vertice.position]; if (ver.vertice.color != all [i].vertice.color || ver.vertice.normal != all [i].vertice.normal) { temp.Add(all [i]); } else { ht [all [i].index] = ht[ver.index]; } } else { board [all [i].vertice.position] = all[i]; tVertices.Add(all[i].vertice); ht [all [i].index] = tVertices.Count - 1; } } board.Clear(); all = temp; temp = new List <Pack> (); } for (int i = 0; i < triangles.Count; ++i) { int oldIndex = triangles[i]; int newIndex = ht[oldIndex]; tTriangles.Add(newIndex); } product.draw.triangles = tTriangles; product.draw.vertices = tVertices; }
public static Dictionary <Vector3, Dictionary <Color, Dictionary <Vector3, Point> > > Draw2Mesh(VoxelDrawData draw) { Dictionary <Vector3, Dictionary <Color, Dictionary <Vector3, Point> > > mesh = new Dictionary <Vector3, Dictionary <Color, Dictionary <Vector3, Point> > >(); // = new Dictionary<Vector3, Point>(); List <VoxelDrawData.Vertice> vex = draw.vertices; for (int i = 0; i < vex.Count; ++i) { VoxelDrawData.Vertice v = vex[i]; if (!mesh.ContainsKey(v.normal)) { mesh [v.normal] = new Dictionary <Color, Dictionary <Vector3, Point> > (); } if (!mesh [v.normal].ContainsKey(v.color)) { mesh [v.normal] [v.color] = new Dictionary <Vector3, Point> (); } Point point = new Point(); point.vertice = v; mesh [v.normal] [v.color][v.position] = point; } List <int> trx = draw.triangles; for (int i = 0; i < trx.Count; i += 3) { VoxelDrawData.Vertice a = vex [trx [i]]; VoxelDrawData.Vertice b = vex [trx [i + 1]]; VoxelDrawData.Vertice c = vex [trx [i + 2]]; Dictionary <Vector3, Point> m = mesh [a.normal] [a.color]; Point A = m [a.position]; Point B = m [b.position]; Point C = m [c.position]; A.link.Add(B); A.link.Add(C); B.link.Add(A); B.link.Add(C); C.link.Add(A); C.link.Add(B); } return(mesh); }
public static void Mesh2Draw(Dictionary <Vector3, Dictionary <Color, Dictionary <Vector3, Point> > > mesh, VoxelDrawData draw) { //VoxelDrawData draw = new VoxelDrawData (); draw.vertices.Clear(); draw.triangles.Clear(); List <Vector3> nKeys = new List <Vector3> (mesh.Keys); List <Triangle> trx = new List <Triangle> (); for (int i = 0; i < nKeys.Count; ++i) { Dictionary <Color, Dictionary <Vector3, Point> > colors = mesh [nKeys [i]]; List <Color> cKeys = new List <Color> (colors.Keys); for (int j = 0; j < cKeys.Count; ++j) { Dictionary <Vector3, Point> points = colors [cKeys [j]]; List <Vector3> pKeys = new List <Vector3> (points.Keys); for (int m = 0; m < pKeys.Count; ++m) { Point point = points [pKeys [m]]; GetTriangle(point, trx); point.index = draw.vertices.Count; draw.vertices.Add(point.vertice); points.Remove(pKeys [m]); /**/ } } } Debug.Log(trx.Count); for (int i = 0; i < trx.Count; ++i) { draw.triangles.AddRange(trx[i].getIndex()); } }
public Vertex(VoxelDrawData.Vertice v, int input_id) { id = input_id; position = v.position; color = v.color; normal = v.normal; neighbor_vertices = new List<Vertex>(); adjacent_faces = new List<Triangle>(); cost = int.MaxValue; collapse = null; is_continuous_polygon = true; can_move = true; }
private void initVertices(VoxelDrawData draw_data) { initVertices0 (draw_data); initVertices1 (draw_data); initVertices2 (); initVertices3 (); initVertices4 (); }
private Task initVerticesTask(VoxelDrawData data) { TaskList tl = new TaskList (); tl.push (TaskLog.Logger(initVertices0Task (data), "init_vertices0")); tl.push (TaskLog.Logger(initVertices1Task (data), "init_vertices1")); tl.push (TaskLog.Logger(initVertices2Task (), "init_vertices2")); tl.push (TaskLog.Logger(initVertices3Task (), "init_vertices3")); tl.push (TaskLog.Logger(initVertices4Task (), "init_vertices4")); return tl; }
public void init() { draw_ = null; }