Exemple #1
0
        public void ResolveCorrespondence()
        {
            Problem = new CorrespondenceProblem();

            // Source & target mesh .
            //Vector3[] srcVerts = new Vector3[] { new Vector3(1, 0, 0), new Vector3(1, 1, 0), new Vector3(2, 1, 0), new Vector3(2, 0, 0), new Vector3(3, 1, 0) };
            //Vector3[] tgtVerts = new Vector3[] { new Vector3(1, 0, 0), new Vector3(1, 1, 0), new Vector3(2, 1, 0), new Vector3(2, 0, 0), new Vector3(3, 0.5f, 0) };

            //int[] tris = new int[] {0,1,3,
            //                        1,2,3,
            //                        2,4,3};

            var srcMesh = srcGO.GetComponent <MeshFilter>().sharedMesh;
            var tgtMesh = tgtGO.GetComponent <MeshFilter>().sharedMesh;

            Problem.srcMesh = new MeshData();
            Problem.tgtMesh = new MeshData();

            Problem.srcMesh.VertexList   = srcMesh.vertices;  //srcVerts; // = this.SourceMesh;
            Problem.srcMesh.TriangleList = srcMesh.triangles; //tris;
            Problem.srcMesh.NormalList   = srcMesh.normals;


            Problem.tgtMesh.VertexList   = tgtMesh.vertices;  //tgtVerts;     //= this.TargetMesh;
            Problem.tgtMesh.TriangleList = tgtMesh.triangles; //tris;
            Problem.tgtMesh.NormalList   = tgtMesh.normals;

            // Vertex Constraint List
            Problem.vertexConstraintList = new Dictionary <int, int>();
            Problem.vertexConstraintList.Add(0, 0);
            Problem.vertexConstraintList.Add(1, 1);
            Problem.vertexConstraintList.Add(4, 4);

            Problem.wtSmoothness = 1.0f;
            Problem.wtIdentity   = 0.01f;

            Problem.wtClosestStart = 1.0f;
            Problem.wtClosestEnd   = 5000.0f;
            Problem.wtClosestStep  = 1250f;


            // Create Adjacency list for source model.
            Problem.triAdj = UtilityFunctions.CreateAdjacencyList(Problem.srcMesh.NumberOfVertices, Problem.srcMesh.TriangleList);

            Problem.Solve();
        }