private void Search(BinaryMeshTreeSearch search, ref TreeNode node) { var noTriangles = (node.m_triangles == null || node.m_triangles.Length == 0); if (node.m_childIndex < 0 && noTriangles) { return; } float scissorDistance; if (!search.IsInView(node.m_bounds, out scissorDistance)) { return; } if (scissorDistance < 0 && 0 <= node.m_childIndex) { Search(search, ref m_treeNodes[node.m_childIndex]); Search(search, ref m_treeNodes[node.m_childIndex + 1]); } else { if (noTriangles) { AddAllTrianglesInChildren(search, ref m_treeNodes[node.m_childIndex]); AddAllTrianglesInChildren(search, ref m_treeNodes[node.m_childIndex + 1]); } else { search.AddTriangles(node.m_triangles, node.m_bounds, scissorDistance < -search.m_scissorMargin); } } }
private void AddAllTrianglesInChildren(BinaryMeshTreeSearch search, ref TreeNode node) { if (node.m_triangles != null && 0 < node.m_triangles.Length) { search.AddTriangles(node.m_triangles, node.m_bounds, false); } else if (0 <= node.m_childIndex) { AddAllTrianglesInChildren(search, ref m_treeNodes[node.m_childIndex]); AddAllTrianglesInChildren(search, ref m_treeNodes[node.m_childIndex + 1]); } }