我需要执行一条线和一个三角形网格的交集。
如果我可以使用方法,该操作将非常方便地执行VistualTreeHelper.HitTest
,该方法将返回一个RayMeshGeometry3DHitTestResult
结构。
问题是:VisualTreeHelper.HitTest
需要 aVisual
和 a Point
,而我只有 aVisual3D
的Geometry
属性是 aMeshGeometry3D
和一个Ray
由 a Point3D
(它的起源)和 a Vector3D
(它的方向)组成的自定义类。
所以我想要的是:
Point3D intersection = GetIntersection(MeshGeometry3D mesh, Point3D rayOrigin, Vector3D rayD
指示);
但是该框架为我提供了:
HitTestResult result = VisualTreeHelper.HitTest(model, point);
if (result is RayMeshGeometry3DHitTestResult hitTestResult)]
{
Point3D intersection = result.PointHit;
}
从我读过的内容来看,通常所需的内容Visual3D
会放在 aViewPort3DVisual
中,并且Point
会通过视口变换或类似的东西以某种方式转换为射线。
由于我没有任何 Window 以便我可以将 ViewPort3D 放入其中等,所以我不知道如何使用这些帮助程序来获得我需要的东西。
或者,如果有一个库可以做到这一点,我可以很乐意使用它来代替 WPF 的 3D 方法。