【发布时间】:2015-04-26 07:05:15
【问题描述】:
我正在解决一个需要随机生成凸多面体并将其放入立方体/圆柱容器中随机选择的点而不重叠的问题。我正在使用three.js 来获取图形输出。
放置多面体时,如何检查它是否与其他多面体相交?
所涉及的凸多面体只是简单的四面体或六面体,并使用 THREE.ConvexGeometry 构造。由于我需要精确检查,边界框是不够的,我只是用它来确保两个多面体不相交。
我做了很多研究,发现了很多复杂的理论和方法,我需要的是得到一个布尔结果来判断两个凸多面体之间是否存在交集。 3D 中的 SAT (Separating Axis Theorem) 已经足够好了,但 Three.js 似乎无法做到这一点。谁能告诉我如何以简单的方式进行这种检查,或者只是解释如何在 3D 中使用 SAT 进行检查?
【问题讨论】:
-
您想要准确,您可以将两个对象放入一个对象中并比较每个帧上的两个顶点、法线多边形位置?您将需要一遍又一遍地遍历每个顶点,并且可能只增加一点空间,因此不必精确
-
不需要每帧都精确,我只需要在创建多边形的那一刻进行检查。当找到一个交叉点时,我需要它来确定。我确信SAT 可以在 2d 和 3d 中执行此操作,您可以查看一下。 @Careen
-
但是如何确保新网格不与现有网格相交?即使新的随机位置和要创建的多边形的所有顶点都不在现有的多边形之一中,多边形的边仍然有机会与其他对象相交。 @Careen
-
threejs.org/docs/#Reference/Core/Geometry- 在创建遍历所有顶点面等的循环时,您有所有属性要检查是否有任何拦截,并首先检查甚至使用边界框...如果返回 true 而不是计算确定拦截是否为真,然后循环遍历 3d 空间中的所有内容
-
请给你的场景图片....
标签: three.js javascript 3d three.js intersection