天天看點

3D場景中的滑鼠響應事件

原文: 3D場景中的滑鼠響應事件

今天要講的是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

        )

        關于這個函數的使用請看:

http://msdn.microsoft.com/zh-cn/library/ms608751.aspx

最後有個例子,可以參考:

http://msdn.microsoft.com/zh-cn/library/ms745195(v=VS.100).aspx

這是一個不完整的程式,但是你可以看到如實使用滑鼠和hittest的方法來對選中的頂層visual對象進行處理。

如果需要完整的程式,可以到:

http://code.msdn.microsoft.com/wpfsamples/Wiki/View.aspx?title=zh-Hans

下載下傳。需要找一下。