Exemplo n.º 1
0
        public RTree(int minPerNode, int maxPerNode)
        {
            m_MinPerNode = minPerNode;
            m_MaxPerNode = maxPerNode;

            m_CornerSplitChildren = new List <ISpatialObject> [8];
            for (var i = 0; i < m_CornerSplitChildren.Length; ++i)
            {
                m_CornerSplitChildren[i] = new List <ISpatialObject>();
            }

            m_RootNode     = new SpatialNode();
            m_PriorityHeap = new PriorityHeap <ISpatialObject>(m_MaxPerNode, Comparer <ISpatialObject> .Create((a, b) => a.priority.CompareTo(b.priority)));

            // split node comparison is reversed compared to existing node
            // that way children closest to the split axis are always at the end of the list
            m_NodeComparerX = Comparer <ISpatialObject> .Create((a, b) => a.center.x.CompareTo(b.center.x));

            m_SplitNodeComparerX = Comparer <ISpatialObject> .Create((a, b) => b.center.x.CompareTo(a.center.x));

            m_NodeComparerY = Comparer <ISpatialObject> .Create((a, b) => a.center.y.CompareTo(b.center.y));

            m_SplitNodeComparerY = Comparer <ISpatialObject> .Create((a, b) => b.center.y.CompareTo(a.center.y));

            m_NodeComparerZ = Comparer <ISpatialObject> .Create((a, b) => a.center.z.CompareTo(b.center.z));

            m_SplitNodeComparerZ = Comparer <ISpatialObject> .Create((a, b) => b.center.z.CompareTo(a.center.z));
        }
        public SpatialFilter(Transform root, SpatialFilterSettings settings,
                             StreamAssetOutput streamOutput,
                             ISpatialCollection <ISpatialObject> spatialCollection = null,
                             Func <ISpatialObject, bool> visibilityPredicate       = null,
                             Func <ISpatialObject, float> visibilityPrioritizer    = null)
        {
            m_Root                 = root;
            this.settings          = settings;
            m_StreamOutput         = streamOutput;
            this.spatialCollection = spatialCollection ?? CreateDefaultSpatialCollection();

            m_VisibilityPredicate   = visibilityPredicate ?? DefaultVisibilityPredicate;
            m_VisibilityPrioritizer = visibilityPrioritizer ?? DefaultVisibilityPrioritizer;

            InitCamera();

            if (settings.displayUnloadedObjectBoundingBoxes)
            {
                InitBoundingBoxSceneObjects();
            }

            m_ObjectsToLoad = new PriorityHeap <SpatialObject>(settings.visibleObjectsMax, Comparer <SpatialObject> .Create((a, b) => a.priority.CompareTo(b.priority)));
        }