Пример #1
0
        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);
                }
            }
        }
Пример #2
0
 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]);
     }
 }