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

2022-02-16 14:00:03 字數 854 閱讀 6251

今天要講的是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應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於...