我的 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);
有什么帮助吗?
谢谢。