如何在WPF中的一个特定3d对象上执行命中测试?

时间:2012-06-03 21:53:11

标签: wpf 3d hittest visualtreehelper

我的WPF 3D场景中有一个SphereMesh(继承自MeshGeneratorBase,作为Petzold.Media3D.dll的一部分)。我在该球体上也有数千个ScreenSpaceLines3D对象。我想忽略除了SphereMesh之外的场景中的所有内容,并找出鼠标光线与球体相交的X-Y-Z坐标。即使球体和鼠标之间还有另一个物体X,我仍然想知道鼠标在哪里击中球体,就好像物体X不存在一样。

我使用HitTest尝试过以下代码,但是当我在场景/世界中添加数千/数百万个其他对象时,它变得非常慢。对象阻塞问题是我无法解决的另一个问题。

你推荐什么?

当前代码:

Point mousePos = new Point(x, y);
PointHitTestParameters hitParams = new PointHitTestParameters(mousePos);
VisualTreeHelper.HitTest(
    viewPort,null,
    delegate(HitTestResult hr)
    {
        RayMeshGeometry3DHitTestResult rayHit = hr as RayMeshGeometry3DHitTestResult;
    if(rayHit != null)
    {
        // Mouse hits something
        Console.WriteLine("Point: " + rayHit.PointHit);
    }
    return HitTestResultBehavior.Continue;
}, hitParams);

有任何帮助吗?

感谢。

0 个答案:

没有答案