Ejemplo n.º 1
0
        protected override void OnPopulateMesh(VertexHelper vh)
        {
            // get default mesh positions
            base.OnPopulateMesh(vh);

            if (m_warpManager == null)
            {
                m_warpManager = new WarpManager();
            }

            if (m_warpedMeshData == null)
            {
                m_warpedMeshData = new WarpManager.WarpManagerMeshData();
            }

            PopulateWarpManagerData();

            if (m_meshVerts == null)
            {
                m_meshVerts     = new List <UIVertex> ();
                m_meshVertsVec3 = new Vector3[4];
                m_meshUvsVec2   = new Vector2[4];
            }

            // Grab the default calculated mesh vert positions
            vh.GetUIVertexStream(m_meshVerts);

            // Populate vector3 array of mesh vert positions
            m_meshVertsVec3 [0] = m_meshVerts [0].position;
            m_meshVertsVec3 [1] = m_meshVerts [1].position;
            m_meshVertsVec3 [2] = m_meshVerts [2].position;
            m_meshVertsVec3 [3] = m_meshVerts [4].position;

            // Populate vector2 array of mesh vert uvs
            m_meshUvsVec2 [0] = uvRect.min;                                 // BL
            m_meshUvsVec2 [1] = uvRect.min + new Vector2(0, uvRect.height); // TL
            m_meshUvsVec2 [2] = uvRect.max;                                 // TR
            m_meshUvsVec2 [3] = uvRect.min + new Vector2(uvRect.width, 0);  // BR

            // Get warp mesh data
            m_warpManager.PopulateMesh(m_meshVertsVec3, m_meshUvsVec2, m_warpManagerData, ref m_warpedMeshData);


            // Repopulate mesh data with Warped data
            vh.Clear();

            for (int idx = 0; idx < m_warpedMeshData.m_positions.Length; idx++)
            {
                vh.AddVert(m_warpedMeshData.m_positions[idx], color, m_warpedMeshData.m_uvs[idx]);
            }

            for (int idx = 0; idx < m_warpedMeshData.m_indices.Length; idx += 3)
            {
                vh.AddTriangle(m_warpedMeshData.m_indices[idx], m_warpedMeshData.m_indices[idx + 1], m_warpedMeshData.m_indices[idx + 2]);
            }
        }
Ejemplo n.º 2
0
        public override void UpdateMesh(bool a_changeMesh = true)
        {
            base.UpdateMesh(false);

            if (m_warpManager == null)
            {
                m_warpManager = new WarpManager();
            }

            if (m_warpedMeshData == null)
            {
                m_warpedMeshData = new WarpManager.WarpManagerMeshData();
            }

            PopulateWarpManagerData();

            // Get warp mesh data
            m_warpManager.PopulateMesh(MeshVerts, m_warpManagerData, ref m_warpedMeshData);

            // Construct the colours array
            if (m_meshColours == null || m_meshColours.Length != m_warpedMeshData.m_positions.Length || m_meshColours[0].Equals(m_colour) == false)
            {
                m_meshColours = new Color[m_warpedMeshData.m_positions.Length];

                for (int idx = 0; idx < m_meshColours.Length; idx++)
                {
                    m_meshColours [idx] = m_colour;
                }
            }

            // Update Mesh Values
            if (m_warpedMeshData.m_positions.Length > m_mesh.vertexCount)
            {
                m_mesh.vertices  = m_warpedMeshData.m_positions;
                m_mesh.uv        = m_warpedMeshData.m_uvs;
                m_mesh.triangles = m_warpedMeshData.m_indices;
            }
            else
            {
                m_mesh.triangles = m_warpedMeshData.m_indices;
                m_mesh.vertices  = m_warpedMeshData.m_positions;
                m_mesh.uv        = m_warpedMeshData.m_uvs;
            }

            m_mesh.colors = m_meshColours;

            // Update Cached values
            SetStruct <float> (ref m_cropLeftCache, m_cropLeft);
            SetStruct <float> (ref m_cropTopCache, m_cropTop);
            SetStruct <float> (ref m_cropRightCache, m_cropRight);
            SetStruct <float> (ref m_cropBottomCache, m_cropBottom);

            SetStruct <Vector3> (ref m_cornerOffsetBLCache, m_cornerOffsetBL);
            SetStruct <Vector3> (ref m_cornerOffsetBRCache, m_cornerOffsetBR);
            SetStruct <Vector3> (ref m_cornerOffsetTLCache, m_cornerOffsetTL);
            SetStruct <Vector3> (ref m_cornerOffsetTRCache, m_cornerOffsetTR);

            SetStruct <int> (ref m_numSubdivisionsCache, m_numSubdivisions);
            SetStruct <bool> (ref m_bezierEdgesCache, m_bezierEdges);

            if (m_bezierEdges)
            {
                SetStruct <Vector3> (ref m_leftBezierHandleACache, m_leftBezierHandleA);
                SetStruct <Vector3> (ref m_leftBezierHandleBCache, m_leftBezierHandleB);
                SetStruct <Vector3> (ref m_topBezierHandleACache, m_topBezierHandleA);
                SetStruct <Vector3> (ref m_topBezierHandleBCache, m_topBezierHandleB);
                SetStruct <Vector3> (ref m_rightBezierHandleACache, m_rightBezierHandleA);
                SetStruct <Vector3> (ref m_rightBezierHandleBCache, m_rightBezierHandleB);
                SetStruct <Vector3> (ref m_bottomBezierHandleACache, m_bottomBezierHandleA);
                SetStruct <Vector3> (ref m_bottomBezierHandleBCache, m_bottomBezierHandleB);
            }
        }
Ejemplo n.º 3
0
        protected override void OnPopulateMesh(VertexHelper vh)
        {
            // get default mesh positions
            base.OnPopulateMesh(vh);

            if (type != Type.Simple)
            {
                Debug.LogWarning("Slice, Tiled and Filled sprite types aren't supported by UIImageWarp. Please set to 'Simple'.");
                return;
            }

            if (m_warpManager == null)
            {
                m_warpManager = new WarpManager();
            }

            if (m_warpedMeshData == null)
            {
                m_warpedMeshData = new WarpManager.WarpManagerMeshData();
            }

            PopulateWarpManagerData();

            if (m_meshVerts == null)
            {
                m_meshVerts     = new List <UIVertex> ();
                m_meshVertsVec3 = new Vector3[4];
                m_meshUvsVec2   = new Vector2[4];
            }

            // Grab the default calculated mesh vert positions
            vh.GetUIVertexStream(m_meshVerts);

            // Populate vector3 array of mesh vert positions
            m_meshVertsVec3 [0] = m_meshVerts [0].position;
            m_meshVertsVec3 [1] = m_meshVerts [1].position;
            m_meshVertsVec3 [2] = m_meshVerts [2].position;
            m_meshVertsVec3 [3] = m_meshVerts [4].position;

            // Populate vector2 array of mesh vert uvs
            m_meshUvsVec2 [0] = m_meshVerts[0].uv0;
            m_meshUvsVec2 [1] = m_meshVerts[1].uv0;
            m_meshUvsVec2 [2] = m_meshVerts[2].uv0;
            m_meshUvsVec2 [3] = m_meshVerts[4].uv0;

            // Get warp mesh data
            m_warpManager.PopulateMesh(m_meshVertsVec3, m_meshUvsVec2, m_warpManagerData, ref m_warpedMeshData);


            // Repopulate mesh data with Warped data
            vh.Clear();

            for (int idx = 0; idx < m_warpedMeshData.m_positions.Length; idx++)
            {
                vh.AddVert(m_warpedMeshData.m_positions[idx], color, m_warpedMeshData.m_uvs[idx]);
            }

            for (int idx = 0; idx < m_warpedMeshData.m_indices.Length; idx += 3)
            {
                vh.AddTriangle(m_warpedMeshData.m_indices[idx], m_warpedMeshData.m_indices[idx + 1], m_warpedMeshData.m_indices[idx + 2]);
            }
        }