gpt4 book ai didi

algorithm - 求立方体中射线的长度

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:43 24 4
gpt4 key购买 nike

我有一条光线,从相机向外射出,我需要找到光线在立方体内部的长度。请注意,相机可能位于立方体内部,在这种情况下,它应该返回到立方体边缘的距离。

它用于着色器,因此它应该相对较小并且包含最少的分支。

有什么想法吗?

最佳答案

要使射线与凸多面体相交,请将射线与包含每个面的平面相交。

假设射线从q 开始,方向为r。然后射线上的任何点都可以表示为 q + t r 对于标量参数 t。现在假设我们想要将这条射线与方程 p · n = k 给出的平面相交(其中 n 是垂直于面部的向外指向的单位)。射线与平面相交时

(q + t r) · n = k

也就是当

q · n + t r · n = k

等等

t = (kq · n) / r · n

光线在r·n为负时入面,在r·n为正时出射.当r·n为零时,光线平行于面。您需要检查这种情况以避免被零除;在这种情况下,如果 q · n> k,则光线会完全错过多面体。

所以为你的多面体的所有面找到 t 并让 tin 是最大 t光线进入面的点,tout 是光线离开面的点的最小 t。则多面体内的射线长度为

max(max(tout, 0) − max(tin, 0), 0) / |r|

如果 r 是一个单位向量,你可以避免这里的除法。两个内部 max(t, 0) 是处理相机在立方体内部或立方体在相机后面的情况所必需的。外部 max(..., 0) 用于处理光线完全错过立方体的情况(在这种情况下 tin 将大于 tout).

恐怕我不知道如何用您的着色器语言表示此计算,更不用说如何无分支地进行了。

关于algorithm - 求立方体中射线的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com