我正在嘗試檢查一個物件當前是否在 directx 的螢屏上。我有物件和相機的視圖矩陣和投影矩陣以及 xyz。
這似乎是人們遇到的一個常見問題,但我試過在谷歌上到處尋找,但找不到任何人在 directx 中談論這個只關于 javascript 的東西。
我不確定從哪里開始處理這個問題。我猜它使用了某種復雜的數學,涉及視圖矩陣和立方體的位置(物件被轉換到 gpu 上的世界空間,沒有縮放或旋轉)。(我也在使用 C )有人可以幫忙嗎?謝謝
uj5u.com熱心網友回復:
對于透視投影,這是一個“平截頭體”與“盒子”邊界體積相交測驗。
對于正交投影,這是一個“盒子”與“盒子”邊界體積相交測驗。
DirectXMath庫(它也在Windows SDK 中)包括在標頭中執行這些測驗的函式DirectXCollision.h。BoundingFrustum使用相機中的投影矩陣創建物件實體:
BoundingFrustum fr(proj);
// use fr(proj, true) if using right-handed instead of left-handed view setup
為您的物件的位置創建一個BoundingBox或:BoundingOrientedBox
BoundingBox box(position, extents);
然后用fr.Contains(box)看它是否回傳DISJOINT。
此類計算的參考資料包括:
Akenine-M?ller、Haines 和 Hoffman,“實時渲染”,AK Peters/CRC Press(2018 年)
Ericson,“實時碰撞檢測”,Morgan Kaufmann (2005)
Glassner,“光線追蹤簡介”,Morgan Kaufmann (1989)
Schneider 和 Eberly,“計算機圖形學的幾何工具”,Morgan Kaufmann (2003)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/412180.html
標籤:
