Algorithm 查找光线是否与体素相交而不移动

Algorithm 查找光线是否与体素相交而不移动,algorithm,geometry,voxel,Algorithm,Geometry,Voxel,我非常了解marching/DDA算法,但我希望能够在恒定时间内执行逐体素光线对检查,而不必“行进”通过体素空间。我该怎么办 要明确的是,我并不是试图找到光线相交的第一个体素,而是在给定光线和体素的情况下,确定该体素的单元是否位于光线路径内。您可以使用任何光线盒(AABB)相交算法 如果需要交点坐标,则选择三维线裁剪算法,射线为p=O+td,其中p,O,D为矢量,t为正实数。如果以下系统具有解决方案,则与体素存在交点[x,y,z]x[x+1,y+1,z+1]: x < Ox + t Dx

我非常了解marching/DDA算法,但我希望能够在恒定时间内执行逐体素光线对检查,而不必“行进”通过体素空间。我该怎么办

要明确的是,我并不是试图找到光线相交的第一个体素,而是在给定光线和体素的情况下,确定该体素的单元是否位于光线路径内。

您可以使用任何光线盒(AABB)相交算法


如果需要交点坐标,则选择三维线裁剪算法,射线为
p=O+td
,其中
p
O
D
为矢量,
t
为正实数。如果以下系统具有解决方案,则与体素存在交点
[x,y,z]x[x+1,y+1,z+1]

x < Ox + t Dx < x + 1
y < Oy + t Dy < y + 1
z < Oz + t Dz < z + 1
0 < t
如果
Dx<0
,则必须扭转不平等。如果
Dx==0
,不等式在
x
中退化,可以直接判定

对所有三个轴重复相同的讨论,并检查所有支架是否兼容

例如,对于
Dx,Dy,Dz>0
,您必须

max(0, x', y', z') < min(x", y", z").

我当然可以,尽管这些都可以推广到任何AABB。在我的例子中,我有一个带有整数索引的统一网格的额外约束,我想相信有一个比用每个网格单元构造一个AABB并将其输入AABB算法更有效的选择。我不相信整数会带来一些收益。更重要的是,对给定的光线和网格进行可能的预计算(如链接文件中的优化算法部分),恐怕这是不可能的。体素是独立的,没有捷径。如果可以预测你在没有行进的情况下降落在哪个体素上,那就意味着体素表示是不合适的。我很清楚,不行进就不可能找到第一个相交的体素,这不是我想要做的。我只是想找出一个体素是否与无限长的光线相交,假设没有任何东西可以阻挡光线。我意识到我的原始语言不清楚,所以我编辑了这个问题,以便更好地传达这种区别。
max(0, x', y', z') < min(x", y", z").
(OC x D)² < R²