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
下载。需要找一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述