場景樹和空間圖
阿新 • • 發佈:2019-01-28
場景樹
這是整個場景的一個層次結構的表示,通過一棵簡單的樹來實現:一個“節點”有一個父親和任意數量的孩子。這個資料結構用來管理層次結構的物體變換(位置和方向),以及他們的動畫。在FlExtEngine中,CSceneNode類擁有一個update方法,用於對node的變換進行更新;它還有一個accept方法,這樣就可以使用訪問者模式以實現更好的擴充套件性。
空間圖
這是整個場景的一個空間關係的表示,是通過有向無環圖的形式來表示的:將世界分成不同的區域,以實現高效的可視性揀選,這些區域中存放著繪製的物體。類CSpatialNode中有一個cull函式來進行可視性判斷,它也有一個accept函式,同樣可以使用訪問者模式來達到可擴充套件。
為了讓訪問者(Visitor)能夠在空間分割節點和其中存放物體的節點之間區別開來,從CSpatialNode類構造了一個類CSpatialBranch,CSpatialBranch是所有節點的基類;同時構造了一個CSpatialLeaf類,該類是儲存在空間圖中的物體的基類。
有很多空間劃分的演算法可供使用,我會快速介紹幾個通用的:
八叉樹(The Octree)
八叉樹在魔域幻境之浴血戰場中用於存放遊戲角色。
四叉樹(The quadtree)
四叉樹的3D版本便是八叉樹,一棵四叉樹從一個包圍整個世界的節點開始,然後沿著X,Y軸分割。四叉樹一般用於將地形分割成塊,它也可以像八叉樹那樣使用(適合在2D場景中)。四叉樹在虛幻2引擎中用於儲存地形。
BSP樹
BSP樹,全稱叫做二分空間樹,從任意一個平面開始,該平面將世界一分為二,然後遞迴的用平面進行分割,直到一個節點擁有了給定數量的三角形。和八叉樹以及四叉樹不同的是,在BSP樹中,只有葉子節點中才儲存三角形。
BSP樹在ID software的許多作品中使用了,例如雷神之錘(Quake),雷神之錘II,雷神之錘III 競技場中,用於存放世界的集合資訊。
KD樹
KD-樹中,K是樹的子節點的最大個數,表示樹種有多少個軸可以用來產生切割平面。在BSP樹中可以有任意的平面來分割世界,而在KD樹中,只能沿著某個K軸來產生切割平面。Sectors and portals
Sector/Portal: that scheme divides the world into convex Sectors, which are connected (one or two way) with Portals. The Sectors are to be convex for the system to work best, as then, there's the guarantee that from any point inside the Sector, any other point might be visible.The Sector and Portal scheme has been used along with a BSP in Doom III and Quake IV.
The adaptive binary tree
ABT樹使用在vTales Grahpics公司。