2015-04-26 35 views
1

我正在研究一个问题,需要随机生成并将凸多面体放入随机选取的点而不重叠的立方体/圆柱体容器中。我正在使用来获取图形输出。如何检查Three.js中的两个凸多面体是否相互交叉?

A demo.

,而把一个多面体,如何检查是否有其他的多面体相交?

涉及的凸多面体是简单的四面体或六面体,并使用THREE.ConvexGeometry构造。由于我需要一个精确的检查,边界框是不够的,我只是用它来确保两个多面体不相交。

我做了很多研究,发现了许多复杂的理论和方法,我需要的是获得一个布尔结果,告诉两个凸多面体之间是否存在相交。 SAT (Separating Axis Theorem) in 3D已经足够好了,但Three.js似乎不能做到这一点。任何人都可以告诉我如何以简单的方式进行这种检查,或只是解释如何在3D中使用SAT?

+0

呦要准确,你可以把两个对象为对象,比较这两个顶点,法线多边形位置上everyframe?你需要重复遍历每个顶点,也许只需要添加一点点空间,这样就不需要精确的了。 – Careen

+0

没有必要在每一帧都精确地对待,现在我只需要检查多边形是什么创建。当找到交点时,我需要确定它。我确信[SAT](http://www.dyn4j.org/2010/01/sat/)可以在2d和3d中执行此操作,因此您可以查看它。 @Careen –

+0

但是我怎样才能确保新的网格不与现有的网格相交?即使要创建的多边形的新随机位置和所有顶点不在其中一个现有多边形中,多边形的边仍有机会与其他对象相交。 @Careen –

回答

0

你可以看看http://www.realtimerendering.com/intersections.html。尽管该网站是从2011年开始的,但交集算法在过去几年并未发生变化。从演示中看,一旦多面体被放置在立方体中,它们就不会移动。所以SAT算法不会是最好的解决方案,因为它用于移动多面体。

0

Gilbert-Johnson-Keerthi是一种功能强大的算法,可以测量距离并检查凸多面体之间的交点。不过我相信最好在简单多面体上使用,否则支持函数中的计算可能需要一些时间。一个可能的缺点是,你需要有函数来测量一个点和另一个点/段/三角形之间的距离,我不知道是否有一些在three.js中可用。

http://en.wikipedia.org/wiki/Gilbert%E2%80%93Johnson%E2%80%93Keerthi_distance_algorithm