1

我的 WPF 3D 场景中有一个 SphereMesh(从 MeshGeneratorBase 继承,作为 Petzold.Media3D.dll 的一部分)。我在那个球体上也有数千个 ScreenSpaceLines3D 对象。我想忽略场景中除 SphereMesh 之外的所有内容,并仅找出鼠标光线与球体相交的 XYZ 坐标。即使球体和鼠标之间还有另一个物体 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);

有什么帮助吗?

谢谢。

4

0 回答 0