6

我一直在修改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()不断返回错误。我在这里做错了什么?

4

2 回答 2

8

您的代码正在使用

frustum.setFromMatrix( camera.projectionMatrix );

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

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

正如如何确定飞机是否在 Three.js 相机 Frustum 中所回答的那样

于 2014-07-22T09:16:33.930 回答
0

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

于 2021-03-23T17:03:35.150 回答