我需要执行直线和三角形网格的交集。
如果我可以使用VistualTreeHelper.HitTest
方法返回RayMeshGeometry3DHitTestResult
结构,那么该操作将非常方便地执行。
问题是:VisualTreeHelper.HitTest
需要Visual
和Point
,而我只有Visual3D
Geometry
属性为MeshGeometry3D
}和Ray
自定义类,由Point3D
(其来源)和Vector3D
(其方向)组成。
所以我想要的是:
Point3D intersection = GetIntersection(MeshGeometry3D mesh, Point3D rayOrigin, Vector3D rayD
irection);
但框架为我提供了:
HitTestResult result = VisualTreeHelper.HitTest(model, point);
if (result is RayMeshGeometry3DHitTestResult hitTestResult)]
{
Point3D intersection = result.PointHit;
}
根据我所阅读的内容,通常会将所需的Visual3D
放入ViewPort3DVisual
内,Point
会通过视口转换以某种方式转换为光线,或类似的东西。
由于我没有任何Window,所以我可以将ViewPort3D放入其中,等等,我对如何使用这些助手来获取我需要的东西一无所知。
或者,如果有一个库可以做到这一点,我很乐意使用它而不是WPF的3D方法。
答案 0 :(得分:1)
执行此操作的代码比回复中的内容要多
https://github.com/charlierix/AsteroidMiner/tree/master/Src/HelperClassesWPF
查看Math3D.cs
GetIntersection_Hull_Ray()
GetIntersection_Triangle_Ray()
请注意,在GetIntersection_Plane_Line()中,第三行是lineDir.Normalize()。这是我已注释掉的错误,但尚未推送到github
构建此功能的原始来源来自:
Author: DigiBen DigiBen@GameTutorials.com
Program: PolygonCollision
Date: 7/11/01