Exemplo n.º 1
0
 //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);
     }
 }
Exemplo n.º 2
0
 private void initVertices(VoxelDrawData draw_data)
 {
     initVertices0(draw_data);
     initVertices1(draw_data);
     initVertices2();
     initVertices3();
     initVertices4();
 }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
		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;
		}
Exemplo n.º 9
0
 private Task initVertices1Task(VoxelDrawData data)
 {
     Task task = new Task ();
     task.init = delegate {
         initVertices1(data);
     };
     return task;
 }
Exemplo n.º 10
0
        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());
            }
        }
Exemplo n.º 11
0
        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;
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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());
            }
        }
Exemplo n.º 14
0
 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;
 }
Exemplo n.º 15
0
 private void initVertices(VoxelDrawData draw_data)
 {
     initVertices0 (draw_data);
     initVertices1 (draw_data);
     initVertices2 ();
     initVertices3 ();
     initVertices4 ();
 }
Exemplo n.º 16
0
 //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);
     }
 }
Exemplo n.º 17
0
        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);
            }
        }
Exemplo n.º 18
0
 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;
 }
Exemplo n.º 19
0
 public void init()
 {
     draw_ = null;
 }