我正在尝试解决如何为我正在研究的一些交叉点逻辑扩展相机平截体。
简而言之,我需要找出哪些对象不仅落在相机截体内,而且还落在相机截体周围的某个缓冲区内。我能想到的实现这一点的最好方法是在运行交叉口检查之前以某种方式扩展相机锥体。
然而,我想不出如何才能最好地做到这一点。我也不确定是否有更好的替代方案来实现同样的结果。我想,如果我能找到一个物体到最近的锥体平面的距离,那么它也可以工作。
感谢大家的帮助。
发布于 2019-02-22 20:22:57
在重新阅读我的问题后,我意识到我的第一个停靠点应该是看看Frustum.intersectsBox()是如何工作的。事实证明,它拥有我需要的一切,通过引入buffer参数,我可以通过提供以世界为单位的缓冲值来有效地扩展平截体。
const frustumIntersect = (() => {
  const p = new THREE.Vector3()
  return (frustum, box, buffer = 0) => {
    const planes = frustum.planes
    for (let i = 0; i < 6; i ++) {
      const plane = planes[i]
      p.x = plane.normal.x > 0 ? box.max.x : box.min.x
      p.y = plane.normal.y > 0 ? box.max.y : box.min.y
      p.z = plane.normal.z > 0 ? box.max.z : box.min.z
      if (plane.distanceToPoint(p) < 0 - buffer) {
        return false
      }
    }
    return true
  }
})()其将被这样称为,以包括在锥体周围的200个单位缓冲器内的对象:
frustumIntersect(frustum, yourBox3, 200)https://stackoverflow.com/questions/54826600
复制相似问题