public void init(){
    	
    	//setup root
    	Root = new Node(null,new Point(0,0,TreeSize),new Point(TreeSize,0,TreeSize),new Point(0,0,0), new Point(TreeSize,0,0));
    	Root.Parent = null;
    	
    	//not doing this recursively, because it's not jumping out at me, I think I'm seeing problems with initialization that way,
    	//you'd have to keep track of depth and that could be messy
    	ArrayList<Node> NodesToProcess = new ArrayList<Node>();
    	ArrayList<Node> NextNodesToProcess = new ArrayList<Node>();
    	NodesToProcess.add(Root);
    	for(int i = 0; i < TreeDepth; i ++){
    		
    		//process dem nodes
    		for(Node CurrentNode : NodesToProcess){
    			
    			//get the points for the child nodes corners
    			Point Up = new Point(CurrentNode.UpperLeft.X + ((CurrentNode.UpperRight.X - CurrentNode.UpperLeft.X)/2), 0 , CurrentNode.UpperLeft.Z);
    			Point Down = new Point(CurrentNode.LowerLeft.X + ((CurrentNode.LowerRight.X - CurrentNode.LowerLeft.X)/2),0,CurrentNode.LowerLeft.Z);
    			Point Left = new Point(CurrentNode.LowerLeft.X,0,CurrentNode.LowerLeft.Z +((CurrentNode.UpperLeft.Z - CurrentNode.LowerLeft.Z)/2));
    			Point Right = new Point(CurrentNode.LowerRight.X,0,CurrentNode.LowerRight.Z +((CurrentNode.UpperRight.Z - CurrentNode.LowerRight.Z)/2));
    			Point Center = new Point(CurrentNode.LowerLeft.X + ((CurrentNode.LowerRight.X - CurrentNode.LowerLeft.X)/2),0,CurrentNode.LowerRight.Z +((CurrentNode.UpperRight.Z - CurrentNode.LowerRight.Z)/2));
    			
    			//create the Child Nodes
    			Node NorthWestChild = new Node(CurrentNode,CurrentNode.UpperLeft, Up, Left, Center);
    			Node NorthEastChild = new Node(CurrentNode, Up, CurrentNode.UpperRight, Center, Right);
    			Node SouthWestChild = new Node(CurrentNode, Left, Center, CurrentNode.LowerLeft, Down);
    			Node SouthEastChild = new Node(CurrentNode,Center,Right,Down, CurrentNode.LowerRight);
    			
    			//set the children of the current node
    			CurrentNode.NorthWest = NorthWestChild;
    			CurrentNode.NorthEast = NorthEastChild;
    			CurrentNode.SouthWest = SouthWestChild;
    			CurrentNode.SouthEast = SouthEastChild;
    			
    			//add those nodes to the next nodes to process
    			NextNodesToProcess.add(NorthWestChild);
    			NextNodesToProcess.add(NorthEastChild);
    			NextNodesToProcess.add(SouthWestChild);
    			NextNodesToProcess.add(SouthEastChild);
    			
    		}
    		
    		//copy over the next nodes to process into the current nodes to process
    		NodesToProcess.clear();
    		for(Node n : NextNodesToProcess){
    			NodesToProcess.add(n);
    		}
    		NextNodesToProcess.clear();
    	}
    	
    }