八叉樹octree原理
載自:一、對octree的描述
octree的定義是:若不為空樹的話,樹中任一節點的子節點恰好只會有八個,或零個,也就是子節點不會有0與8以外的數目。那麼,這要用來做什麼?想象乙個立方體,我們最少可以切成多少個相同等分的小立方體?答案就是8個。再想象我們有乙個房間,房間裡某個角落藏著一枚金幣,我們想很快的把金幣找出來,聰明的你會怎麼做?我們可以把房間當成乙個立方體,先切成八個小立方體,然後排除掉沒有放任何東西的小立方體,再把有可能藏金幣的小立方體繼續切八等份….如此下去,平均在log8(房間內的所有物品數)的時間內就可找到金幣。因此,octree就是用在3d空間中的場景管理,可以很快地知道物體在3d場景中的位置,或偵測與其它物體是否有碰撞以及是否在可視範圍內。
二、實現octree的原理
(1). 設定最大遞迴深度
(2). 找出場景的最大尺寸,並以此尺寸建立第乙個立方體
(3). 依序將單位元元素丟入能被包含且沒有子節點的立方體
(4). 若沒有達到最大遞迴深度,就進行細分八等份,再將該立方體所裝的單位元元素全部分擔給八個子立方體
(5). 若發現子立方體所分配到的單位元元素數量不為零且跟父立方體是一樣的,則該子立方體停止細分,因為跟據空間分割理論,細分的空間所得到的分配必定較少,若是一樣數目,則再怎麼切數目還是一樣,會造成無窮切割的情形。
(6). 重複3,直到達到最大遞迴深度。
三、octree的存貯結構
本例中octree的存貯結構用乙個有(若干+八)個字段的記錄來表示樹中的每個結點。其中若干字段用來描述該結點的特性(本例中的特性為:節點的值和節點座標),其餘的八個字段用來作為存放指向其八個子結點的指標。此外,還有線性儲存和1託8式儲存。
四、bsp tree和octree對比
a) bsp tree將場景分割為1個面,而octree分割為3個面。
b) bsp tree每個節點最多有2個子結點,而octree最多有8個子結點 因此bsp tree可以用在不論幾唯的場景中,而octree則常用於三維場景
四叉樹與八叉樹
前序 四叉樹或四元樹也被稱為q樹 q tree 四叉樹廣泛應用於影象處理 空間資料索引 2d中的快速碰撞檢測 儲存稀疏資料等,而八叉樹 octree 主要應用於3d圖形處理。對遊戲程式設計,這會很有用。本文著重於對四叉樹與八叉樹的原理與結構的介紹,幫助您在腦海中建立四叉樹與八叉樹的基本思想。本文並不...
四叉樹與八叉樹
前序 四叉樹或四元樹也被稱為q樹 q tree 四叉樹廣泛應用於影象處理 空間資料索引 2d中的快速碰撞檢測 儲存稀疏資料等,而八叉樹 octree 主要應用於3d圖形處理。對遊戲程式設計,這會很有用。本文著重於對四叉樹與八叉樹的原理與結構的介紹,幫助您在腦海中建立四叉樹與八叉樹的基本思想。本文並不...
四叉樹與八叉樹
前序 四叉樹或四元樹也被稱為q樹 q tree 四叉樹廣泛應用於影象處理 空間資料索引 2d中的快速碰撞檢測 儲存稀疏資料等,而八叉樹 octree 主要應用於3d圖形處理。對遊戲程式設計,這會很有用。本文著重於對四叉樹與八叉樹的原理與結構的介紹,幫助您在腦海中建立四叉樹與八叉樹的基本思想。本文並不...