我非常了解行进/ DDA算法,但我希望能够在恒定的时间内进行每体素射线对检查,而不必进行游行和#34;通过体素空间。我该怎么做呢?
要清楚,我并不是要找到光线相交的第一个体素,而是给定光线和体素,确定该体素的细胞是否位于雷的路径。
答案 0 :(得分:1)
光线为P = O + t D
,其中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
我们为了简洁而重写(使用x' = (x - Ox) / Dx
...)
x' < t < x"
y' < t < y"
z' < t < z"
0 < t
如果Dx < 0
,必须颠倒不平等。如果Dx == 0
,则x < Ox < x + 1
中的不等式退化,可以直接决定。
对所有三个轴重复相同的讨论,并检查所有支架是否兼容。
例如,对于Dx, Dy, Dz > 0
,您必须
max(0, x', y', z') < min(x", y", z").
有27个符号组合被考虑,在三个级联三向比较中分开。
作为微优化,您可以通过Dx Dy Dz
重新调整最后一个不等式,并简化,以交换(更快)乘法的除法。
如果许多光线错过了体素,您可以通过使用边界球来加快处理速度。假设体素中心为C
,体素半径R
和向量D
被归一化,则预测试为
(OC x D)² < R²
答案 1 :(得分:0)