javascript - Threejs Raycast 与 scene.children 空相交。我究竟做错了什么?

标签 javascript three.js

帖子 1) 我正在尝试检测相机可见的所有对象,以便在它们不在视野范围内时我可以将它们重新定位到起始位置。我的目标是重用现有对象的无限瀑布效果。我真的不明白为什么 intersects 是空的,如果我在循环 scene.children 时对单个对象进行光线转换,它会起作用,但这会导致非常糟糕的性能,因为它位于动画循环中。

感谢您的帮助

第 2 篇文章)我已改为截头体剔除,但 frustum.containsPoint(scene.children[index]) 始终返回 true,即使对象明显超出相机 View 也是如此。

再次感谢任何帮助

camera.updateMatrix();
  camera.updateMatrixWorld();

  var frustum = new THREE.Frustum();
  var projScreenMatrix = new THREE.Matrix4();
  projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);

  // frustum.setFromProjectionMatrix(camera.projectionMatrix);
  frustum.setFromProjectionMatrix(new THREE.Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse));

  for (let index = 0; index < scene.children.length; index++) {
    scene.children[index].updateMatrix(); // make sure plane's local matrix is updated
    scene.children[index].updateMatrixWorld();

    if (frustum.containsPoint(scene.children[index])) {
      //stuff happens...
      if (scene.children[index].name === "coin") {
        scene.children[index].rotation.x += 0.01;
        scene.children[index].position.y -= 0.1;
      }
      // console.log("mesh in view Frustrum");
    } else {
      console.log("mesh not in view Frustrum");
    }
  }

最佳答案

I am trying to detect all objects viewable by the camera

您不需要为此进行光线转换。相反,设置 Frustum 的实例通过 setFromProjectionMatrix() 基于相机的投影和 View 矩阵。在下一步中,使用 intersectsObject() 检测 3D 对象是否位于相机的视锥体(3D 场景的可视区域)内。

关于javascript - Threejs Raycast 与 scene.children 空相交。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71075948/

相关文章:

javascript - Angular2 当我刷新页面时,页面不会加载到路由器参数中

javascript - 有人可以向我解释一下为什么我会出现堆栈溢出吗?

javascript - 试图获得光线转换器的交点

javascript - 具有反射问题的片段着色器三.js

javascript - 如何使用三个js创建柔光

javascript - jquery float图表在接近点时突出显示点

Javascript、动态 css 和转换

javascript - 外部 Javascript、CSS 在 Eclipse 中不起作用

javascript - 在 Chrome 上使用 THREE.js 在本地镜像上拒绝跨源图像加载

three.js - webgl(三.js)中的物质画家导出gltf是全黑的