2019年6月3日 星期一

實現計算AABB是否在Frustum裡

實現計算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

沒有留言:

張貼留言