示例#1
0
        protected void TagNodesWithObject(BspNode node, MovableObject obj, Vector3 pos)
        {
            if (node.IsLeaf)
            {
                // Add to movable->node map
                // Insert all the time, will get current if already there
                objectToNodeMap.Insert(obj, node);
                node.AddObject(obj);
            }
            else
            {
                // Find distance to dividing plane
                float dist = node.GetDistance(pos);

                //CHECK: treat obj as bounding box?
                if (MathUtil.Abs(dist) < obj.BoundingRadius)
                {
                    // Bounding sphere crosses the plane, do both.
                    TagNodesWithObject(node.BackNode, obj, pos);
                    TagNodesWithObject(node.FrontNode, obj, pos);
                }
                else if (dist < 0)
                {
                    // Do back.
                    TagNodesWithObject(node.BackNode, obj, pos);
                }
                else
                {
                    // Do front.
                    TagNodesWithObject(node.FrontNode, obj, pos);
                }
            }
        }
        protected void TagNodesWithObject(BspNode node, MovableObject obj, Vector3 pos)
        {
            if(node.IsLeaf)
            {
                // Add to movable->node map
                // Insert all the time, will get current if already there
                objectToNodeMap.Insert(obj, node);
                node.AddObject(obj);
            }
            else
            {
                // Find distance to dividing plane
                float dist = node.GetDistance(pos);

                //CHECK: treat obj as bounding box?
                if(MathUtil.Abs(dist) < obj.BoundingRadius)
                {
                    // Bounding sphere crosses the plane, do both.
                    TagNodesWithObject(node.BackNode, obj, pos);
                    TagNodesWithObject(node.FrontNode, obj, pos);
                }
                else if(dist < 0)
                {
                    // Do back.
                    TagNodesWithObject(node.BackNode, obj, pos);
                }
                else
                {
                    // Do front.
                    TagNodesWithObject(node.FrontNode, obj, pos);
                }
            }
        }