WPF 3D:以鼠标指针坐标为中心的缩放模型

时间:2010-04-01 10:05:59

标签: wpf c#-3.0 zoom center pan


Plattform:

  • .NET 3.5 with C#
  • WPF
  • 3DTools

我正在使用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,我计算了新的相机位置

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

1 个答案:

答案 0 :(得分:0)

3DTools项目在.NET 3.5上运行不正常,因为它可以在.NET 3.0版本的WPF上运行。

3D工具的任务(因此功能)是在.NET 3.0的WPF上更容易在3D上编码2D控件。如果你有.NET 3.5,你已经支持2D 3D编程和WPF XAML支持。

尽管.NET 3.5基本上是.NET 3.0 SP1 + LINQ,但与.NET 3.0版本的WPF相比,.NET 3.0 SP1上的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)。