Пример #1
0
    void CalculateListObject()
    {
        //list relist
        if (list.Count == 4)
        {
            Triangulator.ReCalcuatePosition(list);
        }


        //3D -> 2D position recalculate
        Vector2[] _vertices2D = new Vector2[list.Count];
        Vector3   _pos;

        for (int i = 0; i < list.Count; i++)
        {
            _pos           = list[i].position;
            _vertices2D[i] = new Vector2(_pos.x, _pos.y);
        }

        Triangulator _tr = new Triangulator(_vertices2D);

        int[] _triangles = _tr.Triangulate();

        Vector3[] _vertices = new Vector3[_vertices2D.Length];
        for (int i = 0; i < _vertices.Length; i++)
        {
            _vertices[i] = new Vector3(_vertices2D[i].x, _vertices2D[i].y, 0);
        }

        // Create the mesh
        mesh.Clear();
        mesh.vertices  = _vertices;
        mesh.triangles = _triangles;
        mesh.uv        = _tr.CalculateUV();
        mesh.RecalculateNormals();
        mesh.RecalculateBounds();

        //material texture,
        material.mainTextureScale = _tr.CalculateScale(1f);
    }
Пример #2
0
    void CreateMesh()
    {
        switch (type)
        {
        case eMeshType.TMesh:
            vertices2D = new Vector2[] {
                new Vector2(0, 0),
                new Vector2(0, 50),
                new Vector2(50, 50),
                new Vector2(50, 100),
                new Vector2(0, 100),
                new Vector2(0, 150),
                new Vector2(150, 150),
                new Vector2(150, 100),
                new Vector2(100, 100),
                new Vector2(100, 50),
                new Vector2(150, 50),
                new Vector2(150, 0),
            };
            break;

        case eMeshType.BoxClock:
            vertices2D = new Vector2[] {
                new Vector2(0, 0),
                new Vector2(0, 50),
                new Vector2(50, 50),
                new Vector2(50, 0)
            };
            break;

        case eMeshType.BoxAntiClock:
            vertices2D = new Vector2[] {
                new Vector2(0, 0),
                new Vector2(50, 0),
                new Vector2(50, 50),
                new Vector2(0, 50)
            };
            break;

        case eMeshType.PolygonClock:
            vertices2D = new Vector2[] {
                new Vector2(10, 0),
                new Vector2(0, 50),
                new Vector2(50, 50),
                new Vector2(40, 0)
            };
            break;

        case eMeshType.PolygonAntiClock:
            vertices2D = new Vector2[] {
                new Vector2(0, 0),
                new Vector2(10, 50),
                new Vector2(40, 50),
                new Vector2(50, 0)
            };
            break;
        }

        // Use the triangulator to get indices for creating triangles
        Triangulator tr = new Triangulator(vertices2D);

        int[] _triangles = tr.Triangulate();

        // Create the Vector3 vertices
        Vector3[] _vertices = new Vector3[vertices2D.Length];
        for (int i = 0; i < _vertices.Length; i++)
        {
            _vertices[i] = new Vector3(vertices2D[i].x, vertices2D[i].y, 0);
        }

        // Create the mesh
        mesh.Clear();
        mesh.vertices  = _vertices;
        mesh.triangles = _triangles;
        mesh.uv        = tr.CalculateUV();
        mesh.RecalculateNormals();
        mesh.RecalculateBounds();

        GetComponent <MeshRenderer>().material.mainTextureScale = tr.CalculateScale(10f);

        // Set up game object with mesh;
        //gameObject.AddComponent(typeof(MeshRenderer));
        //MeshFilter filter = gameObject.AddComponent(typeof(MeshFilter)) as MeshFilter;
    }
        void CalculateListObject()
        {
            if (goNewTile != null)
            {
                Destroy(goNewTile);
            }
            goNewTile = new GameObject();
            MeshFilter   _meshFilter   = goNewTile.AddComponent <MeshFilter>();
            MeshRenderer _meshRenderer = goNewTile.AddComponent <MeshRenderer>();
            Mesh         _mesh         = new Mesh();

            _meshRenderer.material = material;
            _mesh.name             = "TileMesh";
            _meshFilter.mesh       = _mesh;

            //¸®½ºÆ®ÀÇ À§Ä¡¸¦ ÀçÁ¶Á¤ ÇÒ ÇÊ¿ä°¡ ÀÖÀ»‹š ÀçÁ¶Á¤ÇÑ´Ù...
            if (list.Count == 4)
            {
                Triangulator.ReCalcuatePosition(list);
            }

            //3D -> 2D position recalculate
            Vector2[] _vertices2D = new Vector2[list.Count];
            Vector3   _pos;
            float     _y = 0f;

            for (int i = 0; i < list.Count; i++)
            {
                _pos           = list[i].position;
                _vertices2D[i] = new Vector2(_pos.x, _pos.z);
                _y            += _pos.y;
            }
            _y /= list.Count;


            //triangle ...
            Triangulator _tr = new Triangulator(_vertices2D);

            int[] _triangles = _tr.Triangulate();

            //vertices
            Vector3[] _vertices = new Vector3[_vertices2D.Length];
            for (int i = 0; i < _vertices.Length; i++)
            {
                _vertices[i] = new Vector3(_vertices2D[i].x, _y, _vertices2D[i].y);
            }

            // Create the mesh
            _mesh.vertices  = _vertices;
            _mesh.triangles = _triangles;
            _mesh.uv        = _tr.CalculateUV();
            _mesh.RecalculateNormals();
            _mesh.RecalculateBounds();

            //material texture,
            material.mainTextureScale = _tr.CalculateScale(.2f);

            for (int i = 0; i < list.Count; i++)
            {
                Destroy(list[i].gameObject);
            }
            list.Clear();
            line.SetVertexCount(0);
        }