Beispiel #1
0
        OctreeNode <T>[] BuildNodes()
        {
            Vector3 dimensions = Bounds.Maximum - Bounds.Minimum;
            // Vector3 half = dimensions * 0.25f;
            Vector3 center   = Bounds.Center;
            var     m_region = Bounds;
            var     octant   = new AxisAlignedBox[NumChildNodes];

            octant[0] = new AxisAlignedBox(m_region.Minimum, center);
            octant[1] = new AxisAlignedBox(new Vector3(center.X, m_region.Minimum.Y, m_region.Minimum.Z), new Vector3(m_region.Maximum.X, center.Y, center.Z));
            octant[2] = new AxisAlignedBox(new Vector3(center.X, m_region.Minimum.Y, center.Z), new Vector3(m_region.Maximum.X, center.Y, m_region.Maximum.Z));
            octant[3] = new AxisAlignedBox(new Vector3(m_region.Minimum.X, m_region.Minimum.Y, center.Z), new Vector3(center.X, center.Y, m_region.Maximum.Z));
            octant[4] = new AxisAlignedBox(new Vector3(m_region.Minimum.X, center.Y, m_region.Minimum.Z), new Vector3(center.X, m_region.Maximum.Y, center.Z));
            octant[5] = new AxisAlignedBox(new Vector3(center.X, center.Y, m_region.Minimum.Z), new Vector3(m_region.Maximum.X, m_region.Maximum.Y, center.Z));
            octant[6] = new AxisAlignedBox(center, m_region.Maximum);
            octant[7] = new AxisAlignedBox(new Vector3(m_region.Minimum.X, center.Y, center.Z), new Vector3(center.X, m_region.Maximum.Y, m_region.Maximum.Z));
            return(octant.Select(x => new OctreeNode <T>(ref x, MaximumChildren, this)).ToArray());
        }