也帶來了壹個新的問題:攝像頭移動時,沒有遮擋,也就是所謂的“穿墻模式”。有什麽辦法解決這個問題嗎?是的,在移動攝像機之前執行“碰撞檢測”,以確保在攝像機的新位置間隔中沒有其他三維模型。本文將介紹如何在WPF中進行三維碰撞檢測。在進入下壹節之前,讓我們先來看看使用Rect3D的最簡單的碰撞檢測方法。IntersectsWith方法。Model3D有壹個Bounds屬性,用來表示Model3D的邊界:這個屬性是Rect3D類型,我們可以用IntersectsWith來確定攝像頭所在的矩形是否與這個Rect3D相交。如果是,說明攝像頭移動到Rect3D內部,發生沖突;如果沒有,說明相機離Model3D還有壹段距離,可以安全移動。如果沒有碰撞,Rect3D的方法。使用IntersectsWith,這對於行為良好的立方體非常有效。但是,如果Rect3D的方法。IntersectsWith用於檢測相機是否與不規則物體的外切多邊形發生碰撞,精度會低很多。就畫面來看,紅場所在的攝像頭其實離房子很遠,但是在房子所在的區域。這時候Rect3D的結果。檢測到的交叉點是“發生碰撞”。所以需要使用稍微復雜壹點的方法,VisualTreeHelper。HitTest,測試三維物體的命中,以應對不規則物體的碰撞檢測。使用VisualTreeHelper。HitTest方法VisualTreeHelper。HitTest由三個函數重載。在三維世界中,使用:public static void Hittest(Visual 3D Reference,Hittestfiltercallbackfiltercallback,hittestresultcallback result callback,Hittest parameters 3D Hittest parameters)方法測試命中。參考:要進行點擊測試的Visual3D。即場景中不規則的三維物體。FilterCallback:指為點擊測試篩選回調值的方法。有時候,並不是所有的三維物體都是密不透風的,比如遊泳池裏的水,不結冰是無法阻止相機移動的。因此,可以用filterCallback設置這些對象。ResultCallback:表示點擊測試結果的回調值的方法。HitTestParameters:要進行點擊測試的三維參數值。對於最後壹個參數hitTestParameters,使用了HitTestParameters3D的壹個子類:RayHitTestParameters(也是目前HitTestParameters3D唯壹的子類)。這個類代表壹條光線。看到這裏,妳就明白如何使用VisualTreeHelper了。碰撞檢測。沒錯!
上一篇:其實很多地方都有人吃火鍋,那麽這些火鍋有什麽區別呢?下一篇:日本傳統美學的迫切需求、內涵和特征