开发者社区> 杰克.陈> 正文

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

下载。需要找一下。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
响应系统设置的事件
Configuration类是用来描述手机设备的配置信息的,比如屏幕方向,触摸屏的触摸方式等,相信定制过ROM的朋友都应该知道我们可以在:frameworks/base/core/java/android/content/res/Configuration.java找到这个类,然后改下相关设置,比如调整默认字体的大小!
29 0
Unity碰撞事件和触发事件
大家在刚开始接触Unity的时候,一定要理解碰撞与触发
260 0
Windows程序设计——窗口键盘消息滚动事件
Windows程序设计——窗口键盘消息滚动事件
140 0
鼠标滚轮消息的捕捉
鼠标滚轮消息的捕捉
626 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载