private void _UpdateMeshIfNeeded() { m_meshVertices3D.Clear(); m_trackedPlane.GetPlanePolygon(m_meshVertices3D); if (_AreVerticesListsEqual(m_previousFrameMeshVertices, m_meshVertices3D)) { return; } Pose centerPose = m_trackedPlane.GetCenterPose(); for (int i = 0; i < m_meshVertices3D.Count; i++) { m_meshVertices3D[i] = centerPose.rotation * m_meshVertices3D[i] + centerPose.position; } Vector3 planeNormal = centerPose.rotation * Vector3.up; m_meshRenderer.material.SetVector("_PlaneNormal", planeNormal); m_previousFrameMeshVertices.Clear(); m_previousFrameMeshVertices.AddRange(m_meshVertices3D); m_meshVertices2D.Clear(); m_trackedPlane.GetPlanePolygon(ref m_meshVertices2D); Triangulator tr = new Triangulator(m_meshVertices2D); m_mesh.Clear(); m_mesh.SetVertices(m_meshVertices3D); m_mesh.SetIndices(tr.Triangulate(), MeshTopology.Triangles, 0); m_mesh.SetColors(m_meshColors); }