我把一个点放在一个立方体上我也有方向。我的目标是得到与方向向量相交的立方体侧面的位置。
我在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

在立方体上,我有一个入口。上面是点。我也有方向现在我需要找出光线离开立方体的点,这正是发生的地方请看问号,我需要找出这个出口点。
当然这是二维的,但我需要三维的。

最佳答案

给定一个光线R = {u*t + v|t}和一个平面P = {p|<n, p> = d},很容易确定tR如果存在时交叉的值P。也就是说,很容易确定t > 0如果<n, u*t + v> = d如果存在的话。
立方体有六个平面边:P[i], i = 1..6。对于每一侧,确定光线是否与某个值相交。如果任何一侧不相交,则将该一侧从考虑中移除。
对于每个相交的平面iR是相交位置。如果任何这样的交集位置在立方体之外,请将其从考虑中移除。
立方体中的第一个交集位置P[i]就是您要查找的位置。

09-30 14:00
查看更多