#松散八叉树设计方案
##1.松散八叉树
八叉树就是用在3D空间中的场景管理,可以很快地知道物体在3D场景中的位置,或侦测与其它物体是否有碰撞以及是否在可视范围内。
松散八叉树不会出现物体跨界的情况,也不会出现很小的物体需要放到很大的节点之中的问题。
缺点:由于节点与节点之间相互重叠在一起,相对于经典八叉树来说,做视锥裁剪时,程序逻辑可能需要检查更多的节点。
##2.[写时复制](http://hackerboss.com/copy-on-write-101-part-1-what-is-it/)
写入时复制(Copy-on-write)是一个被使用在程式设计领域的最佳化策略。其基础的观念是,如果有多个呼叫者(callers)同时要求相同资源,他们会共同取得相同的指标指向相同的资源,直到某个呼叫者(caller)尝试修改资源时,系统才会真正复制一个副本(private copy)给该呼叫者,以避免被修改的资源被直接察觉到,这过程对其他的呼叫只都是通透的(transparently)。此作法主要的优点是如果呼叫者并没有修改该资源,就不会有副本(private copy)被建立。
## 3.设计方案
八叉树主要管理两种数据:八叉树据本身节点;物件数据。
###3.1.数据结构
pub struct S3dOctree{
pub root : AtomicPtr<*mut _S3dOTNode>, // 八叉树根节点,支持原子操作。
}
pub struct _S3dOTNode{
pub aabb: PiAABBBox, // 本节点的世界坐标系下空间范围
pub children : [*mut _S3dOTNode;octree::_CHD_NUM], //子节点