用于确定点是否位于 3D 网格内部的快速算法是什么?为简单起见,您可以假设网格都是三角形并且没有孔。
到目前为止我所知道的是,确定光线是否穿过网格的一种流行方法是计算光线/三角形相交的数量。它必须很快,因为我正在使用它进行触觉医学模拟。所以我无法测试所有三角形的射线相交。我需要某种哈希或树数据结构来存储三角形,以帮助确定哪个三角形是相关的。
另外,我知道如果我有任意顶点的二维投影,则需要一个简单的点/三角形相交测试。但是,我仍然需要知道哪些三角形是相关的,此外,哪些三角形位于点前面,并且只测试这些三角形。
我解决了我自己的问题。基本上,我采用任意 2D 投影(扔掉其中一个坐标),并将三角形的 AABB(轴对齐边界框)散列到 2D 数组。 (titus 提到的一组 3D 立方体是多余的,因为它只能给你一个常数因子加速。)使用 2D 数组和你正在测试的点的 2D 投影来获得一小组三角形,你可以这样做3D 射线/三角形相交测试(参见3D 中射线、线段、平面和三角形的交点 http://softsurfer.com/Archive/algorithm_0105/algorithm_0105.htm)并计算 z 坐标(抛出的坐标)大于该点的 z 坐标的射线交点的三角形数量。偶数个交点意味着它在网格之外。奇数个交叉点意味着它在网格内部。这种方法不仅速度快,而且非常容易实现(这正是我所寻找的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)