實現計算AABB是否在Frustum裡
前言
最近需要判斷物件的AABB(Axis aligned bounding box)是否在Frustum裡面的計算,在此把學習的過程做個紀錄。
內容
在
Tutorial 16: Frustum Culling裡找到實現的方法,方法是計算AABB的8個頂點是否在Frustum的6個平面裡,Frustum的6個平面看以參考下圖
|
Frustum的6個平面 |
平面在程式裡不是紀錄4個頂點,而是記錄成像
D3DXPLANE structure一樣的結構,一個法向量(Vector3)加上一個距離,具體的定義如下圖
|
Plane的定義 |
接著要計算出點到平面的最短距離,計算的過程比想像的簡單,如下圖
|
計算點到平面的最短距離 |
計算式:Nearest distance=Point ● Normal + distance,如果Nearest distance是正值代表點在面的外面,相反的,如果Nearest distance是負值代表點在面的裡面,利用這個原理,將Frustumt拆成6個面,對每個面計算AABB的8個點是否都在該面的裡面,如果有任何一點不符合就代表AABB沒有完整的在Frustum裡。
參考資料
Tutorial 16: Frustum Culling
D3DXPLANE structure
沒有留言:
張貼留言