/// <summary> /// 检查周围4个格子的Lod级别是否符合:Lod级别不超过此格子的级别+1。否则,直接强制划分Lod级别,并递归划分 /// </summary> /// <param name="j"></param> /// <param name="i"></param> /// <param name="ps"></param> private void CheckSideLodLevel(int j, int i, LodPiece ps) { if (j > 0 && m_piecees[j - 1, i].LodLevel - ps.LodLevel > 1) { m_piecees[j - 1, i].LodLevel = ps.LodLevel + 1; CheckSideLodLevel(j - 1, i, m_piecees[j - 1, i]); } if (j < m_mesh_piece_num - 1 && m_piecees[j + 1, i].LodLevel - ps.LodLevel > 1) { m_piecees[j + 1, i].LodLevel = ps.LodLevel + 1; CheckSideLodLevel(j + 1, i, m_piecees[j + 1, i]); } if (i > 0 && m_piecees[j, i - 1].LodLevel - ps.LodLevel > 1) { m_piecees[j, i - 1].LodLevel = ps.LodLevel + 1; CheckSideLodLevel(j, i - 1, m_piecees[j, i - 1]); } if (i < m_mesh_piece_num - 1 && m_piecees[j, i + 1].LodLevel - ps.LodLevel > 1) { m_piecees[j, i + 1].LodLevel = ps.LodLevel + 1; CheckSideLodLevel(j, i + 1, m_piecees[j, i + 1]); } if (j == 0 && Left != null && Left.m_piecees[m_mesh_piece_num - 1, i].LodLevel - ps.LodLevel > 1) { Left.m_piecees[m_mesh_piece_num - 1, i].LodLevel = ps.LodLevel + 1; Left.CheckSideLodLevel(m_mesh_piece_num - 1, i, Left.m_piecees[m_mesh_piece_num - 1, i]); } if (j == m_mesh_piece_num - 1 && Right != null && Right.m_piecees[0, i].LodLevel - ps.LodLevel > 1) { Right.m_piecees[0, i].LodLevel = ps.LodLevel + 1; Right.CheckSideLodLevel(0, i, Right.m_piecees[0, i]); } if (i == 0 && Down != null && Down.m_piecees[j, m_mesh_piece_num - 1].LodLevel - ps.LodLevel > 1) { Down.m_piecees[j, m_mesh_piece_num - 1].LodLevel = ps.LodLevel + 1; Down.CheckSideLodLevel(j, m_mesh_piece_num - 1, Down.m_piecees[j, m_mesh_piece_num - 1]); } if (i == m_mesh_piece_num - 1 && Up != null && Up.m_piecees[j, 0].LodLevel - ps.LodLevel > 1) { Up.m_piecees[j, 0].LodLevel = ps.LodLevel + 1; Up.CheckSideLodLevel(j, 0, Up.m_piecees[j, 0]); } }