3D场景中的鼠标响应事件

简介: 原文:3D场景中的鼠标响应事件今天要讲的是3D场景中的鼠标响应事件的处理,首先Button的响应是大家熟知的,只要加上一个click事件,然后写一个响应的处理时间就行了。对于二维平面上的一些控件也很好处理,比如在跳棋那篇文章中,就是用了ellipse的鼠标左右键按下的事件响应函数。
原文: 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

下载。需要找一下。

目录
相关文章
|
6月前
|
小程序 UED 开发者
小程序如何监听页面的滚动事件
小程序如何监听页面的滚动事件
227 0
|
5月前
|
API
(22):事件总结
(22):事件总结
|
6月前
|
计算机视觉 Python
响应鼠标事件
【5月更文挑战第11天】响应鼠标事件。
35 0
|
6月前
页面监听键盘事件
页面监听键盘事件
|
6月前
[Qt5] 鼠标响应事件和计时器事件
[Qt5] 鼠标响应事件和计时器事件
60 0
|
监控 Java Android开发
响应系统设置的事件
Configuration类是用来描述手机设备的配置信息的,比如屏幕方向,触摸屏的触摸方式等,相信定制过ROM的朋友都应该知道我们可以在:frameworks/base/core/java/android/content/res/Configuration.java找到这个类,然后改下相关设置,比如调整默认字体的大小!
|
图形学
Unity碰撞事件和触发事件
大家在刚开始接触Unity的时候,一定要理解碰撞与触发
517 0
Unity碰撞事件和触发事件
|
.NET C# 开发框架
WPF的路由事件、冒泡事件、隧道事件(预览事件)
原文:WPF的路由事件、冒泡事件、隧道事件(预览事件) 本文摘要: 1:什么是路由事件; 2:中断事件路由; 3:自定义路由事件; 4:为什么需要自定义路由事件; 5:什么是冒泡事件和预览事件(隧道事件); 1:什么是路由事件     WPF中的事件为路由事件,所谓路由事件,MSDN定义如下:     功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件。
1771 0