Пример #1
0
    public OctreeNode BuildOctreeUpwards(Dictionary <Vector3, OctreeNode> seamNodes, Vector3 chunkMin)
    {
        Dictionary <Vector3, OctreeNode> parentNodes = new Dictionary <Vector3, OctreeNode> ();

        foreach (KeyValuePair <Vector3, OctreeNode> n in seamNodes)
        {
            if (n.Value.size == Chunk.size * 2)
            {
                return(n.Value);
            }

            int     parentSize = 2 * n.Value.size;
            Vector3 deltaPos   = n.Value.min - chunkMin;
            Vector3 offset     = new Vector3(deltaPos.x % parentSize, deltaPos.y % parentSize, deltaPos.z % parentSize);
            Vector3 minoffs    = offset / n.Value.size;
            Vector3 parentPos  = n.Value.min - offset;

            OctreeNode parentNode;
            if (!parentNodes.TryGetValue(parentPos, out parentNode))
            {
                parentNode = new OctreeNode(NodeType.INTERNAL, parentPos, parentSize);
                parentNode.AddChild(n.Value, minoffs);
                parentNodes.Add(parentPos, parentNode);
            }
            else
            {
                parentNode.AddChild(n.Value, minoffs);
            }
        }
        return(BuildOctreeUpwards(parentNodes, chunkMin));
    }
Пример #2
0
        public void TestReaddingOfChildNodeAfterRemovalByReference()
        {
            Node node      = new OctreeNode(this.sceneManager);
            Node childNode = node.CreateChild(Name);

            node.RemoveChild(childNode);
            node.AddChild(childNode);
        }