2010-11-06 72 views
0

好吧,當我用gdi +繪製東西時,我曾經知道對象的座標,但現在當我在directx中使用網格時9我不知道如何獲得對象的座標,所以我可以查找是否將鼠標懸停在某個對象上。任何想法如何找到座標?directx 9 mouse over a object

回答

0

您需要將鼠標位置投射到世界中並將其轉換爲世界空間座標,然後根據各種對象對其進行測試。你可能能找到一個庫來爲你做這件事,我知道OpenGL支持選擇,大多數包裝提供了增強的功能,但其原理是:

在窗口中找到鼠標座標。使用這些座標,投射射線(無論您是在系統中實際使用射線還是簡單地進行類似的數學在這裏都不是什麼大問題)。您將使用當前視圖矩陣(「相機」角度和位置)來計算光線的方向和原點。使用該射線,測試您的物體,邊界框或幾何體(無論您選擇哪個)以找到該物體。使用交點座標,找到位於該位置的對象。

如果場景相對靜態,您也可以非常容易地使用深度緩衝區。只需將深度紋理設置爲Z緩衝區,然後使用深度,鼠標位置和視圖矩陣來查找交點。

也許可以這樣做,即將每個對象映射到適當的屏幕座標,但是您可能會遇到深度排序和重疊區域的問題。而且,將每個對象映射到每個窗口的窗口區域可能會造成不必要的緩慢。