2013年3月27日 星期三

自訂八分樹

在計算機繪圖學中,八分樹是一個常用來加速查詢場景中物件的一種資料結構。UE本身就擁有數個用途不同的八分樹,除了PrimitiveComponent用的八分樹,其他大都利用TOctree類別模板來定義:
template<typename ElementType, typename OctreeSemantics>
class TOctree;
ElementType可以視為跟STL容器的value type是一樣的東西,至於OctreeSemantics則是用來設定八分樹的參數,或是提供八分樹類別操作ElementType物件的方法。其實就是所謂的traits。

OctreeSemantics需要提供的成員如下:
  • MaxElementsPerLeaf:每個葉節點的最大能容納的元素。當新增元素會超過此上限時,會分割葉節點。
  • MaxNodeDepth:最大樹深。
  • GetBoundingBox:傳回元素的邊界盒。
  • SetElementId:TOctree會給予元素一個ID。移除元素時會用到這個ID。