public KDTree(Vector3[] points, Vector3 t, string TreeName)
        {
            if (points.Length == 0)
            {
                points = new Vector3[] { t };
            }

            root = new KDTreeNode(points[0]);
            for (int i = 1; i < points.Length; i++)
            {
                AddPoint(points[i]);
            }

            //root = BuildFromPointsRec(points, 0, 0, points.Length);
        }
Exemple #2
0
        public KDTree(Vector3[] points, Vector3 t, string TreeName)
        {
            if (points.Length == 0)
            {
                Debug.LogWarning("<b><color=green>" + TreeName + "</Color></b>" + " => <color=red>AO bakening not correct!</color> The Tree Settings are too extreme! <i>Try to tweak the Tree!</i>");
                points = new Vector3[] { t };
            }

            root = new KDTreeNode(points[0]);
            for (int i = 1; i < points.Length; i++)
            {
                AddPoint(points[i]);
            }

            //root = BuildFromPointsRec(points, 0, 0, points.Length);
        }
Exemple #3
0
        private KDTreeNode BuildFromPointsRec(Vector3[] points, int axis, int start, int end)
        {
            Debug.Log(start + " " + end);

            if (start == end - 1)
            {
                Debug.Log(start);
                return(new KDTreeNode(points[start]));
            }

            //int medianIndex = SelectMedian(points, axis, start, end);
            int medianIndex = Random.Range(start, end - 1);

            KDTreeNode node = new KDTreeNode(points[medianIndex]);

            axis       = (axis + 1) % 3;
            node.left  = BuildFromPointsRec(points, axis, start, medianIndex);
            node.right = BuildFromPointsRec(points, axis, medianIndex, end);

            return(node);
        }
Exemple #4
0
        public void AddPoint(Vector3 point, int axis)
        {
            bool       isLeft = position[axis] > point[axis];
            KDTreeNode child  = isLeft ? left : right;

            axis = (axis + 1) % 3;
            if (child == null)
            {
                child = new KDTreeNode(point);
                if (isLeft)
                {
                    left = child;
                }
                else
                {
                    right = child;
                }
            }
            else
            {
                child.AddPoint(point, axis);
            }
        }
Exemple #5
0
 public KDTree()
 {
     root = new KDTreeNode(Vector3.zero);
 }