1

平台:

  • .NET 3.5 与 C#
  • WPF
  • 3D工具

我正在使用 Codeplex 站点 ( 3D Tools ) 中的 3DTools 来旋转和平移 3D 模型。这工作正常。Trackball 类还包含一个使用鼠标滚轮缩放模型的方法。但是,此方法始终以 Point(0,0,0) 作为缩放中心来缩放模型。但我想缩放到鼠标指针的坐标(比如谷歌地图,在这里你不是缩放到地图的中心,而是缩放到鼠标指针的坐标)。

我尝试了不同的方法来解决这个问题:

  • 将Trackball 类的 ScaleTransform3D 对象的CenterX/Y/Z设置为鼠标指针坐标 -> 它不起作用
  • 缩放后平移模型-> 也不起作用;因为鼠标指针的坐标没有改变,所以我无法计算平移距离,例如
    • MousePointer 缩放前的坐标 -> 334, 210
    • 从 Trackball 类调用 Zoom(-e.Delta)
    • MousePointer 缩放后的坐标 -> 334, 210
    • 如果 MousePointer 坐标发生变化,例如 330、205,我可以将模型向左平移 4 个点,向上平移 5 个点(我的程序也有 2D 模式,并且坐标会发生变化)
  • 移动相机位置-> 不起作用;基于当前相机位置和 MouseWheelEventArgs.Delta 我计算了新的相机位置

有人知道如何解决这个问题吗?

4

1 回答 1

0

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 库上的此页面:

http://msdn.microsoft.com/en-us/library/bb613588(v=VS.90).aspx

.NET 3.0 SP1 的 WPF 也不能很好地支持鼠标跟踪。建议你重写鼠标跟踪代码,在.NET 3.5环境下重新编译(项目目标为.NET 3.5)。

于 2010-04-01T10:57:31.937 回答