private void Start()
        {
            lineMaterial = new Material(Shader.Find("Hidden/Internal-Colored"));

            mesh = new Mesh();
            Vertex3[] vertices = new Vertex3[NumberOfVertices];

            Vector3[] meshVerts   = new Vector3[NumberOfVertices];
            int[]     meshIndices = new int[NumberOfVertices];

            Random.InitState(seed);
            for (int i = 0; i < NumberOfVertices; i++)
            {
                float x = size * Random.Range(-1.0f, 1.0f);
                float y = size * Random.Range(-1.0f, 1.0f);
                float z = size * Random.Range(-1.0f, 1.0f);

                vertices[i] = new Vertex3(x, y, z);

                meshVerts[i]   = new Vector3(x, y, z);
                meshIndices[i] = i;
            }

            mesh.vertices = meshVerts;
            mesh.SetIndices(meshIndices, MeshTopology.Points, 0);

            hull = new ConvexHull3();
            hull.Generate(vertices);
        }
    public void generateHullMesh(Vertex3[] vertices)
    {
        hull = new ConvexHull3();
        hull.Generate(vertices);
        if (hull == null || hull.Simplexs.Count == 0 || hull.Vertices.Count == 0)
        {
            return;
        }

        mesh            = new Mesh();
        meshFilter.mesh = mesh;

        points   = new Vector3[hull.Simplexs.Count * 3];
        indecies = new int[hull.Simplexs.Count * 3];

        int index = 0;

        foreach (Simplex <Vertex3> f in hull.Simplexs)
        {
            DrawSimplex(f, index);
            index += 3;
        }
        mesh.vertices  = points;
        mesh.triangles = indecies;
    }
        List <int> SimplexToTriangle(ConvexHull3 hull)
        {
            var vertexs  = hull.Vertices;
            var simplexs = hull.Simplexs;

            List <int> tri = new List <int>();

            foreach (var f in simplexs)
            {
                int v0 = Array.IndexOf(vertexs.ToArray(), f.Vertices[0]);
                int v1 = Array.IndexOf(vertexs.ToArray(), f.Vertices[1]);
                int v2 = Array.IndexOf(vertexs.ToArray(), f.Vertices[2]);

                if (f.IsNormalFlipped)
                {
                    tri.Add(v0);
                    tri.Add(v2);
                    tri.Add(v1);
                }
                else
                {
                    tri.Add(v0);
                    tri.Add(v1);
                    tri.Add(v2);
                }
            }

            return(tri);
        }
    // Start is called before the first frame update
    void Start()
    {
        string[]   parts       = { "mask_048_0", "mask_048_1", "mask_048_2", "mask_048_3", "mask_048_4", "mask_048_5", "mask_048_6" };
        GameObject statueAsset = Resources.Load <GameObject>("siva/siva");
        GameObject statue      = Instantiate(statueAsset, new Vector3(0, 0, 0), Quaternion.identity);

        statue.name = "siva";

        //string[] parts = { "part1", "part2", "part3" };

        for (int i = 0; i < parts.Length; i++)
        {
            //Lecture du fichier de coordonnées dans un tableau de vertices

            TextAsset txtAssets = (TextAsset)Resources.Load("siva/" + parts[i]);
            //TextAsset txtAssets = (TextAsset)Resources.Load("myson/maks3D_Myson_0" + i);
            string fileContent = txtAssets.text;

            readXYZ(fileContent);

            //génération de l'enveloppe convexe
            hull = new ConvexHull3();
            hull.Generate(vertices);

            //Conversion de l'enveloppe convexe en mesh
            Mesh mesh = HullToMesh();


            //Création d'un objet qui va contenir le meshcollider
            GameObject partObject = new GameObject(parts[i]);

            //Création du meshcollider à partir du mesh créé précedemment
            MeshCollider meshCollider = partObject.AddComponent <MeshCollider>();
            meshCollider.sharedMesh = mesh;

            MeshFilter meshFilter = partObject.AddComponent <MeshFilter>();
            meshFilter.sharedMesh = mesh;

            MeshRenderer meshRenderer = partObject.AddComponent <MeshRenderer>();
            Material     mat          = new Material(invMat);
            meshRenderer.sharedMaterial = mat;
            //meshRenderer.enabled = false;

            partObject.transform.SetParent(statue.transform, true);


            Debug.Log("fils après2: p=" + partObject.transform.position + " lp=" + partObject.transform.localPosition + " r=" + partObject.transform.rotation + " lr=" + partObject.transform.localRotation);
        }

        //pour debug sans android, décommenter
        //MeshRenderer mrd = transform.gameObject.GetComponent<MeshRenderer>();
        //mrd.enabled = true;
        statue.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
        statue.transform.SetParent(targ.transform);
        DebugT.text = "Sélectionnez une zone";
    }
        private void Start()
        {
            lineMaterial = new Material(Shader.Find("Hidden/Internal-Colored"));

            mesh = new Mesh();
            Vertex3[] vertices = new Vertex3[NumberOfVertices];

            Vector3[] meshVerts   = new Vector3[NumberOfVertices];
            int[]     meshIndices = new int[NumberOfVertices];

            Random.InitState(seed);
            for (int i = 0; i < NumberOfVertices; i++)
            {
                float x = size * Random.Range(-1.0f, 1.0f);
                float y = size * Random.Range(-1.0f, 1.0f);
                float z = size * Random.Range(-1.0f, 1.0f);

                vertices[i] = new Vertex3(x, y, z);

                meshVerts[i]   = new Vector3(x, y, z);
                meshIndices[i] = i;
            }

            mesh.vertices = meshVerts;
            mesh.SetIndices(meshIndices, MeshTopology.Points, 0);


            hull = new ConvexHull3();
            hull.Generate(vertices);

            Mesh ms = new Mesh
            {
                vertices  = VertexToVector(hull.Vertices).ToArray(),
                triangles = SimplexToTriangle(hull).ToArray()
            };

            ms.name = "ConvexHull";
            ms.RecalculateNormals();
            ms.RecalculateBounds();

            DrawMesh.GetComponent <MeshFilter>().mesh = ms;
        }
Exemple #6
0
    // Use this for initialization
    void Start()
    {
        UnityARSessionNativeInterface.ARFrameUpdatedEvent += ARFrameUpdated;

        frameUpdated = false;

        // Vertex3[] vertices = new Vertex3[NumberOfVertices];

        // Random.InitState(seed);
        // for (int i = 0; i < NumberOfVertices; i++)
        // {
        //  float x = size * Random.Range(-1.0f, 1.0f);
        //  float y = size * Random.Range(-0.1f, 0.1f);
        //  float z = size * Random.Range(-1.0f, 1.0f);

        //  vertices[i] = new Vertex3(x, y, z);
        // }

        hull = new ConvexHull3();
        // hull.Generate(vertices);
        // generateMesh();
    }
 void LoadIfNecessary()
 {
     if (meshFilter == null)
     {
         meshFilter = GetComponent <MeshFilter>();
     }
     if (ch2 == null)
     {
         ch2 = new ConvexHull2(new List <Vector3>());
     }
     if (obb2 == null)
     {
         obb2 = new OBB2(ch2);
     }
     if (ch3 == null)
     {
         ch3 = new ConvexHull3(new List <Vector3>());
     }
     if (obb3 == null)
     {
         obb3 = new OBB3(ch3);
     }
 }
Exemple #8
0
    private static (List <Mesh> meshes, List <Vector3> centers) RegionsToMeshes(VoronoiMesh3 voronoi, float scale, int seed, Material mat)
    {
        List <Mesh>    meshes  = new List <Mesh>();
        List <Vector3> centers = new List <Vector3>();

        foreach (VoronoiRegion <Vertex3> region in voronoi.Regions)
        {
            Vertex3        center = region.ArithmeticCenter;
            List <Vertex3> verts  = new List <Vertex3>();

            foreach (DelaunayCell <Vertex3> cell in region.Cells)
            {
                verts.Add(cell.CircumCenter);
                // if (!InBound(cell.CircumCenter, scale)) {
                //     draw = false;
                //     break;
                // }

                // else {
                //     verts.Add(cell.CircumCenter);
                // }
            }

            // If you find the convex hull of the voronoi region it
            // can be used to make a triangle mesh.
            ConvexHull3 hull = new ConvexHull3();
            hull.Generate(verts, false);

            List <Vector3> positions = new List <Vector3>();
            List <Vector3> normals   = new List <Vector3>();
            List <int>     indices   = new List <int>();

            for (int i = 0; i < hull.Simplexs.Count; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Vector3 v = new Vector3();
                    v.x = hull.Simplexs[i].Vertices[j].X;
                    v.y = hull.Simplexs[i].Vertices[j].Y;
                    v.z = hull.Simplexs[i].Vertices[j].Z;

                    positions.Add(v);
                }

                Vector3 n = new Vector3();
                n.x = hull.Simplexs[i].Normal[0];
                n.y = hull.Simplexs[i].Normal[1];
                n.z = hull.Simplexs[i].Normal[2];

                if (hull.Simplexs[i].IsNormalFlipped)
                {
                    indices.Add(i * 3 + 2);
                    indices.Add(i * 3 + 1);
                    indices.Add(i * 3 + 0);
                }

                else
                {
                    indices.Add(i * 3 + 0);
                    indices.Add(i * 3 + 1);
                    indices.Add(i * 3 + 2);
                }

                normals.Add(n);
                normals.Add(n);
                normals.Add(n);
            }

            Mesh mesh = new Mesh();
            mesh.SetVertices(positions);
            mesh.SetNormals(normals);
            mesh.SetTriangles(indices, 0);

            mesh.RecalculateBounds();
            mesh.RecalculateNormals();

            meshes.Add(mesh);
            centers.Add(new Vector3(center.X, center.Y, center.Z));
        }

        return(meshes, centers);
    }
        private void RegionsToMeshes()
        {
            meshes = new List <Mesh>();

            foreach (VoronoiRegion <Vertex3> region in voronoi.Regions)
            {
                bool draw = true;

                List <Vertex3> verts = new List <Vertex3>();

                foreach (DelaunayCell <Vertex3> cell in region.Cells)
                {
                    if (!InBound(cell.CircumCenter))
                    {
                        draw = false;
                        break;
                    }
                    else
                    {
                        verts.Add(cell.CircumCenter);
                    }
                }

                if (!draw)
                {
                    continue;
                }

                //If you find the convex hull of the voronoi region it
                //can be used to make a triangle mesh.

                ConvexHull3 hull = new ConvexHull3();
                hull.Generate(verts, false);

                List <Vector3> positions = new List <Vector3>();
                List <Vector3> normals   = new List <Vector3>();
                List <int>     indices   = new List <int>();

                for (int i = 0; i < hull.Simplexs.Count; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        Vector3 v = new Vector3();
                        v.x = hull.Simplexs[i].Vertices[j].X;
                        v.y = hull.Simplexs[i].Vertices[j].Y;
                        v.z = hull.Simplexs[i].Vertices[j].Z;

                        positions.Add(v);
                    }

                    Vector3 n = new Vector3();
                    n.x = hull.Simplexs[i].Normal[0];
                    n.y = hull.Simplexs[i].Normal[1];
                    n.z = hull.Simplexs[i].Normal[2];

                    if (hull.Simplexs[i].IsNormalFlipped)
                    {
                        indices.Add(i * 3 + 2);
                        indices.Add(i * 3 + 1);
                        indices.Add(i * 3 + 0);
                    }
                    else
                    {
                        indices.Add(i * 3 + 0);
                        indices.Add(i * 3 + 1);
                        indices.Add(i * 3 + 2);
                    }

                    normals.Add(n);
                    normals.Add(n);
                    normals.Add(n);
                }

                Mesh mesh = new Mesh();
                mesh.SetVertices(positions);
                mesh.SetNormals(normals);
                mesh.SetTriangles(indices, 0);

                mesh.RecalculateBounds();
                //mesh.RecalculateNormals();

                meshes.Add(mesh);
            }
        }
 public OBB3(ConvexHull3 convexHull3Data)
 {
     mConvexHull3 = convexHull3Data;
     mBox         = new Box();
 }