WPF 3D:以鼠标指针坐标为中心缩放模型
平台:
- .NET 3.5 与 C#
- WPF
- 3DTools
我正在使用 Codeplex 网站上的 3DTools (3D 工具)用于旋转和平移 3D 模型。这很好用。 Trackball 类还包含使用鼠标滚轮缩放模型的方法。然而,该方法总是以Point(0,0,0)为缩放中心来缩放模型。但我想缩放到鼠标指针的坐标(就像谷歌地图一样,这里你不缩放到地图的中心,而是缩放到鼠标指针的坐标)。
我尝试了不同的方法来解决这个问题:
- 将 Trackball 类的 ScaleTransform3D 对象的 CenterX/Y/Z 设置为鼠标指针坐标 ->它无法
- 缩放后平移模型 ->也没用;因为鼠标指针的坐标没有改变,因此我无法计算平移距离,例如
- 缩放前的鼠标指针坐标 -> 334、210
- 从 Trackball 类调用 Zoom(-e.Delta)
- 缩放后的鼠标指针坐标 -> 334、210
- 如果鼠标指针坐标发生变化,例如 330、205,我可以将模型向左平移 4 点,向上平移 5 点(我的程序也有 2D 模式,坐标会发生变化)
- 移动相机位置->没用;根据当前相机位置和 MouseWheelEventArgs.Delta 我计算了新的相机位置
有人知道如何解决这个问题吗?
Plattform:
- .NET 3.5 with C#
- WPF
- 3DTools
I'm using 3DTools from the Codeplex site (3D Tools) for rotating and panning of 3D Models. This works fine. The Trackball class also contains a method for zooming models with the mouse wheel. However, this method always scales the model with Point(0,0,0) as the center of the zooming. But I'd like to zoom to the coordinates of the mouse pointer (like Google Maps, here you do not zoom to the center of the map but to the mouse pointer coordinates).
I tried different things solving this issue:
- set CenterX/Y/Z of the ScaleTransform3D object of the Trackball class to the mouse pointer coordinates -> it didn't work
- pan the model after zooming -> didn't work too; because the coordinates of the mouse pointer do not change, thus I can not calculate the panning distance, e.g.
- MousePointer Coordinates before zooming -> 334, 210
- call Zoom(-e.Delta) from the Trackball class
- MousePointer Coordinates after zooming -> 334, 210
- if the MousePointer Coordinates would change, e.g. 330, 205, I could pan the model 4 points left and 5 points up (my program has also a 2D mode and there the coordinates change)
- move the camera position -> didn't work; based on the current camera position and the MouseWheelEventArgs.Delta I calculated the new camera position
Has somebody a clue how this problem can be solved?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
3DTools 项目在 .NET 3.5 上运行不佳,因为它旨在在 .NET 3.0 版本的 WPF 上运行。
3D 工具的使命(因此功能)是使在 .NET 3.0 的 WPF 上更轻松地在 3D 上编码 2D 控件。如果您有 .NET 3.5,则已经支持 2D on 3D 编程以及 WPF XAML 支持。
虽然.NET 3.5基本上是.NET 3.0 SP1 + LINQ,但.NET 3.0 SP1上的WPF子系统与.NET 3.0版本的WPF相比有相当大的差异,例如上面的差异。
访问 MSDN Library 上的此页面:
http:// msdn.microsoft.com/en-us/library/bb613588(v=VS.90).aspx
此外,.NET 3.0 SP1 的 WPF 也不能很好地支持鼠标跟踪。我建议您重写鼠标跟踪代码并在.NET 3.5环境下重新编译(将项目定位到.NET 3.5)。
The 3DTools project doesn't work well on .NET 3.5, because it's meant to run on WPF of .NET 3.0 release.
The mission (hence functionality) of the 3D Tools is to make coding 2D controls on 3D easier on WPF of .NET 3.0. If you have .NET 3.5, you already have support for 2D on 3D programming and also WPF XAML support.
Although .NET 3.5 is basically .NET 3.0 SP1 + LINQ, the WPF subsystem on .NET 3.0 SP1 has quite large differences such as above, compared to WPF of .NET 3.0 release.
Visit this page on MSDN Library:
http://msdn.microsoft.com/en-us/library/bb613588(v=VS.90).aspx
Also the mouse tracking isn't not well supported on the WPF of .NET 3.0 SP1. I suggest you to rewrite the mouse tracking code and recompile it under .NET 3.5 environment (target the project to .NET 3.5).