我有一个点放在一个立方体上。我也有方向。我的目标是让立方体侧面的位置与方向向量相交。
我在GLSL中这样做(示例代码不需要是GLSL)。我认为这个案例可以通过光线盒交叉功能来解决,但我根本无法使用它。
float IntersectBox(vec3 orig, vec3 dir, vec3 box)
{
vec3 t1 = (- orig) / dir; // cube starts at 0,0,0
vec3 t2 = (box - orig) / dir; // cube ends at box vector coordinates
vec3 real_min = min(t1, t2);
vec3 real_max = max(t1, t2);
float minmax = min( min(real_max.x, real_max.y), real_max.z);
return minmax;
}
然后我将长度添加到原始位置:
pos += normalize(rayDir) * IntersectBox(pos, rayDir, vec3(grid));
添加其他说明。
我有一个立方体:
_____?___
| \ |
| \ | . is start point - this is known.
| \. / is direction (roughly -.3, .8 here) - this is known
|________| ? is the exit point - which I need to find out
在立方体上,我有一个入口点。在它上面是圆点。我也有方向。现在我需要找出光线离开立方体的位置,确切地说是发生这种情况的地方。看到问号,这个出口点我需要找出来。
当然这是一个二维的情况,但我需要三维。
答案 0 :(得分:0)
给定光线R = {u*t + v|t}
和平面P = {p|<n, p> = d}
,可以直接确定t
和R
相交的P
的值(如果存在) 。也就是说,可以直接确定t > 0
<n, u*t + v> = d
是否存在。
你的立方体有六个平面边:P[i], i = 1..6
。对于每一方i
,确定光线R
是否与某个值P[i]
相交t[i]
。如果任何一方P[i]
未与R
相交,请将该方面排除在考虑之外。
对于与P[i]
相交的每个平面R
,u*t[i] + v
是交叉点位置。如果任何此类交叉点位于多维数据集之外,请将其从考虑中删除。
多维数据集中的第一个交叉位置u*t[i] + v
是您要查找的位置。