我上了一门关于射线平面交点的课:https://www.khanacademy.org/computing/pixar/rendering/rendering-2/v/rendering-5
假设我们在现场拍摄了一条射线,这个场景包含了数百万个三角形。我们怎么知道射线是否与其中一个三角形相交?如果它与射线相交,我们会对这个数百万的三角形进行检查吗?那就太低效了!!
发布于 2020-11-04 08:58:57
如果你想知道所有被射线击中的三角形,你必须检查所有的三角形。然而,这并不意味着您必须检查每一个单独。通常,您在场景中应用某种空间分割,并将包围体积层次中的相关对象分组。然后它变得更有效率,因为你可以用一次检查掉多个三角形。
例如,考虑一个矩形区域的场景。您可以将此区域细分为10x10网格。现在检查网格的哪些部分被光线击中。位于网格单元格中的所有未被光线击中的对象都可以被丢弃,您只需要检查其余的对象。现在假设其中一个被击中的物体是人类。在测试单个三角形之前,通过检查受影响区域的包围体积层次,在多个子步骤中缩小受影响区域。层次结构的遍历可能如下所示:上半身击->、左臂击、->手击、->拇指命中。因此,通过4次检查,您可以丢弃不属于拇指的人类网格中的所有三角形。
如果您只想找到第一个被光线击中的三角形,那么在执行详细的测试之前,您还可以按距离对所有命中单元格和对象进行排序。然后在最近的对象开始检查,然后继续,直到第一次命中为止。
https://computergraphics.stackexchange.com/questions/10367
复制相似问题