今天要講的是3d場景中的滑鼠響應事件的處理,首先button的響應是大家熟知的,只要加上乙個click事件,然後寫乙個響應的處理時間就行了。對於二維平面上的一些控制項也很好處理,比如在跳棋那篇文章中,就是用了ellipse的滑鼠左右鍵按下的事件響應函式。可是對於wpf中的三維空間怎麼辦呢?一般的網格沒有提供滑鼠事件啊?
現在來介紹一下wpf的3d中響應滑鼠事件的處理。
1. viewport3d是提供了滑鼠響應事件(大家可以在響應的幫助文件中找到)。
2. 那問題來了,使用什麼可以知道我的滑鼠點了或在那個網格上呢?需要通過對viewport3d 控制項(容器)的hit測試,將二維命中測試點擠壓成三維射線,將二維命中測試擴充套件到三維場景。其中是呼叫 hittest方法來返回有關命中可視物件、模型、網格和交點的詳細命中結果資訊。具體的就要使用visualtreehelper.hittest 方法,這個方法可以返回命中測試的最頂層 visual物件。這樣你就可以對你測試過程得到的物件做出一些操作。
3. hittest有三個重構的方法,我們要使用的是
public static void hittest(visual3d reference,
hittestfiltercallback filtercallback,
hittestresultcallback resultcallback,
hittestparameters3d hittestparameters
關於這個函式的使用請看:
最後有個例子,可以參考:
這是乙個不完整的程式,但是你可以看到如實使用滑鼠和hittest的方法來對選中的頂層visual物件進行處理。
如果需要完整的程式,可以到:
3D場景優化
一 有效的效能評測 對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於...
3D 架設場景
指定視口 glviewport 指定投影變換 glmatrixmode gl projection glloadidentity gluperspective 30,1,0.1,50 指定檢視變換 glmatrixmode gl modelview glloadidentity glulookat ...
3D場景優化
一 有效的效能評測 對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於...