Exemplo n.º 1
0
    void MapAndExtract()
    {
        foreach (var meshFilter in objectsToExtract)
        {
            Mesh mesh = meshFilter.sharedMesh;

            Stopwatch sw = Stopwatch.StartNew();
            var(triangles, vertices) = FaceMapper.mapTriangles(mesh.triangles, mesh.vertices);
            clearAllChildren(meshFilter.gameObject);

            int totalFaces         = triangles.Count;
            int facesForContinents = (int)(totalFaces * (1f - percentageOfSea));
            int totalAmountOfLand  = 0;
            foreach (var size in continents.Values)
            {
                totalAmountOfLand += size;
            }
            foreach (var continent in continents)
            {
                int sizeOfThisContinent = facesForContinents * continent.Value / totalAmountOfLand;
                var extractedFaces      = FaceMapper.extractFaces(triangles, sizeOfThisContinent);

                createSubMesh(meshFilter.gameObject, continent.Key, extractedFaces, landMaterial);
            }

            createSubMesh(meshFilter.gameObject, "sea", triangles, seaMaterial);

            sw.Stop();
            UnityEngine.Debug.Log("Time taken for " + meshFilter.gameObject.name + " -> " + sw.Elapsed.TotalMilliseconds + "ms");
        }
    }
        public void MapperRetursFourTrianglesThatAreAdjacent()
        {
            var(mappedTriangles, _) = FaceMapper.mapTriangles(triangles, vertices);

            Assert.True(mappedTriangles[0].isAdjacent(mappedTriangles[1]));
            Assert.True(mappedTriangles[1].isAdjacent(mappedTriangles[2]));
            Assert.True(mappedTriangles[2].isAdjacent(mappedTriangles[3]));
        }
        public void MapsInUnder20Milis()
        {
            int numberIterations = 3;

            Stopwatch sw = Stopwatch.StartNew();

            for (int i = 0; i < numberIterations; i++)
            {
                FaceMapper.mapTriangles(mesh.triangles, mesh.vertices);
            }
            sw.Stop();
            Assert.Less(sw.Elapsed.TotalMilliseconds / numberIterations, 20);
        }
        public void TrianglesAreAdjacent()
        {
            var(mappedTriangles, _) = FaceMapper.mapTriangles(triangles, vertices);

            Assert.True(mappedTriangles[0].adjacent.Contains(mappedTriangles[1]));

            Assert.True(mappedTriangles[1].adjacent.Contains(mappedTriangles[0]));
            Assert.True(mappedTriangles[1].adjacent.Contains(mappedTriangles[2]));

            Assert.True(mappedTriangles[2].adjacent.Contains(mappedTriangles[1]));
            Assert.True(mappedTriangles[2].adjacent.Contains(mappedTriangles[3]));

            Assert.True(mappedTriangles[3].adjacent.Contains(mappedTriangles[2]));
        }
        public void TriangleHasAdjacent()
        {
            var(mappedTriangles, _) = FaceMapper.mapTriangles(triangles, vertices);

            Assert.IsNotEmpty(mappedTriangles[0].adjacent);
            Assert.AreEqual(mappedTriangles[0].adjacent.Count, 1);

            Assert.IsNotEmpty(mappedTriangles[1].adjacent);
            Assert.AreEqual(mappedTriangles[1].adjacent.Count, 2);

            Assert.IsNotEmpty(mappedTriangles[2].adjacent);
            Assert.AreEqual(mappedTriangles[2].adjacent.Count, 2);

            Assert.IsNotEmpty(mappedTriangles[3].adjacent);
            Assert.AreEqual(mappedTriangles[3].adjacent.Count, 1);
        }
        public void Setup()
        {
            vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0),
                                       new Vector3(0, 0, 1), new Vector3(1, 0, 1), new Vector3(0, 1, 1), new Vector3(1, 1, 1) };
            triangles = new int[] { 0, 1, 2,
                                    1, 2, 3,

                                    0, 1, 4,
                                    1, 4, 5,

                                    0, 2, 4,
                                    2, 4, 6,

                                    2, 3, 6,
                                    3, 6, 7,

                                    1, 3, 5,
                                    3, 5, 7,

                                    4, 6, 5,
                                    5, 6, 7 };

            (mappedTriangles, _) = FaceMapper.mapTriangles(triangles, vertices);
        }