我的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);
有任何帮助吗?
感谢。