例如:

一种有效计算视线与一组三个对象之间的第一个交点的方法:一个球体、一个圆锥体和一个圆柱体(其他 3D 基元)。

最佳答案

您正在寻找的是空间分区方案。处理这个问题有很多选择,并且在这方面也进行了大量研究。 Christer Ericsson 的 Real-Time Collision Detection 是一本很好的读物。

该书中介绍的一种简单方法是定义一个网格,将所有对象分配给它相交的所有单元格,然后沿着与线相交的网格单元格从前到后与与该网格单元格关联的每个对象相交。请记住,一个对象可能与更多的网格单元相关联,因此计算的交点实际上可能不在当前单元格中,而实际上在以后。

下一个问题是如何定义该网格。不幸的是,没有一个好的答案,您需要考虑哪种方法最适合您的场景。

其他感兴趣的分区方案是不同的树结构,例如 kd-Oct-BSP-trees 。您甚至可以考虑将树与网格结合使用。

编辑
正如所指出的,如果您的集合实际上是这三个对象,那么您肯定最好只是将每个对象相交,然后选择最早的一个。如果您正在寻找射线球体、射线柱体等相交测试,这些并不难,快速的 google 应该提供您可能需要的所有数学知识。 :)

关于graphics - 有效计算视线和一组对象之间的第一个交点的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/498601/

10-11 23:15
查看更多