public UpdateOctreeNode ( |
||
node | ||
return | void |
public void UpdateOctreeNode( OctreeNode node )
{
AxisAlignedBox box = node.WorldAABB;
if ( box.IsNull )
{
return;
}
if ( node.Octant == null )
{
//if outside the octree, force into the root node.
if ( !node.IsInBox( octree.Box ) )
{
octree.AddNode( node );
}
else
{
AddOctreeNode( node, octree );
}
return;
}
if ( !node.IsInBox( node.Octant.Box ) )
{
RemoveOctreeNode( node );
//if outside the octree, force into the root node.
if ( !node.IsInBox( octree.Box ) )
{
octree.AddNode( node );
}
else
{
AddOctreeNode( node, octree );
}
}
}
/// <summary> /// Same as SceneNode, only it doesn't care about children... /// </summary> protected override void UpdateBounds() { //update bounds from attached objects foreach (MovableObject obj in objectList.Values) { localAABB.Merge(obj.BoundingBox); worldAABB = obj.GetWorldBoundingBox(true); } if (!worldAABB.IsNull) { OctreeSceneManager oManager = (OctreeSceneManager)this.creator; oManager.UpdateOctreeNode(this); } }