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]); } }
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); } }
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]); } }