【问题标题】:THREE.js check if object is in frustumTHREE.js 检查对象是否在截锥体中
【发布时间】:2021-08-31 15:08:59
【问题描述】:

我一直在修改three.js,并且我有一个我想用作GUI 的画布。为此,我必须检查一个物体是否在相机截锥体中。

我当前的代码:

camera.updateMatrix(); 
camera.updateMatrixWorld(); 
        
var frustum = new THREE.Frustum();
var projScreenMatrix = new THREE.Matrix4();
projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
        
frustum.setFromProjectionMatrix( camera.projectionMatrix );
        
if(frustum.containsPoint( mesh.position )){
    //stuff happens...
};

frustum.containsPoint()不断返回假。我在这里做错了什么?

【问题讨论】:

  • A Frustum 需要 6 个 Planes 作为参数,你没有提供任何东西。这可能就是它不起作用的原因。
  • 那么我将如何克隆相机截锥体?
  • 这个答案的一个例子是:stackoverflow.com/questions/10858599/…
  • 啊,有帮助,非常感谢!

标签: three.js frustum


【解决方案1】:

您的代码正在使用

frustum.setFromMatrix( camera.projectionMatrix );

但这不是您想要的矩阵。而是使用:

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

How to determine if plane is in Three.js camera Frustum 中的回答

【讨论】:

    【解决方案2】:

    Three.js 在内部进行视锥体剔除,并且仅在相机视锥体中进行渲染。假设您的 Boundig Volumes 计算正确,您可以在当前帧中调用 Object3D.onBeforeRender 回调时跟踪可渲染 Object3D 位于相机视图视锥体内的天气

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2013-07-09
      相关资源
      最近更新 更多