Esempio n. 1
0
        static void GenerateOutline(SpriteCache sprite, ITextureDataProvider textureDataProvider,
                                    out List <Vertex2D> vertices, out List <int> indices, out List <Edge> edges)
        {
            if (textureDataProvider == null ||
                textureDataProvider.texture == null)
            {
                vertices = new List <Vertex2D>();
                indices  = new List <int>();
                edges    = new List <Edge>();
                return;
            }

            const float detail         = 0.05f;
            const byte  alphaTolerance = 200;

            var smd = new SpriteMeshData
            {
                spriteID = new GUID(sprite.id),
                frame    = sprite.textureRect,
                pivot    = sprite.pivotNormalized
            };

            var meshDataController = new SpriteMeshDataController
            {
                spriteMeshData = smd
            };

            meshDataController.OutlineFromAlpha(new OutlineGenerator(), textureDataProvider, detail, alphaTolerance);
            meshDataController.Triangulate(new Triangulator());

            vertices = smd.vertices;
            indices  = smd.indices;
            edges    = smd.edges;
        }
Esempio n. 2
0
        private void GenerateGeometry(SpriteCache sprite, float outlineDetail, byte alphaTolerance, float subdivide)
        {
            Debug.Assert(sprite != null);

            var mesh = sprite.GetMesh();

            Debug.Assert(mesh != null);

            m_SpriteMeshDataController.spriteMeshData = mesh;
            m_SpriteMeshDataController.OutlineFromAlpha(m_OutlineGenerator, mesh.textureDataProvider, outlineDetail, alphaTolerance);
            m_SpriteMeshDataController.Triangulate(m_Triangulator);

            if (subdivide > 0f)
            {
                var largestAreaFactor = subdivide != 0 ? Mathf.Lerp(0.5f, 0.05f, Math.Min(subdivide, 100f) / 100f) : subdivide;
                m_SpriteMeshDataController.Subdivide(m_Triangulator, largestAreaFactor, 0f);
            }
        }