Example #1
0
        /// <summary>
        /// /// This is static to make this a non-virtual call
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="child"></param>
        /// <param name="frustum"></param>
        /// <param name="parentBB"></param>
        /// <param name="skipFrustumCheck"></param>
        private static void updateVisibility(CompactQuadTree <bool> .Node parent, CompactQuadTreeChild child, ref CullingInfo frustum, ref BoundingBox parentBB, bool skipFrustumCheck)
        {
            BoundingBox bb;

            switch (child)
            {
            case CompactQuadTreeChild.UpperLeft:
                bb = new BoundingBox(
                    new Vector3(
                        parentBB.Minimum.X,
                        parentBB.Minimum.Y,
                        parentBB.Minimum.Z),
                    new Vector3(
                        (parentBB.Maximum.X + parentBB.Minimum.X) * 0.5f,
                        parentBB.Maximum.Y,
                        (parentBB.Maximum.Z + parentBB.Minimum.Z) * 0.5f));
                break;

            case CompactQuadTreeChild.UpperRight:
                bb = new BoundingBox(
                    new Vector3((parentBB.Minimum.X + parentBB.Maximum.X) * 0.5f, parentBB.Minimum.Y, parentBB.Minimum.Z),
                    new Vector3(parentBB.Maximum.X, parentBB.Maximum.Y, (parentBB.Maximum.Z + parentBB.Minimum.Z) * 0.5f));
                break;

            case CompactQuadTreeChild.LowerLeft:
                bb = new BoundingBox(
                    new Vector3(parentBB.Minimum.X, parentBB.Minimum.Y, (parentBB.Maximum.Z + parentBB.Minimum.Z) * 0.5f),
                    new Vector3((parentBB.Maximum.X + parentBB.Minimum.X) * 0.5f, parentBB.Maximum.Y, parentBB.Maximum.Z));
                break;

            case CompactQuadTreeChild.LowerRight:
                bb = new BoundingBox(
                    new Vector3((parentBB.Maximum.X + parentBB.Minimum.X) * 0.5f, parentBB.Minimum.Y, (parentBB.Maximum.Z + parentBB.Minimum.Z) * 0.5f),
                    new Vector3(parentBB.Maximum.X, parentBB.Maximum.Y, parentBB.Maximum.Z));
                break;

            default:
                throw new ArgumentOutOfRangeException("child");
            }

            updateVisibility(parent.GetChild(child), ref frustum, ref bb, skipFrustumCheck);
        }
 public Node GetChild(CompactQuadTreeChild c)
 {
     return(new Node(Index * 4 + (int)c)); // parent * 4 + childindex
 }