THREE.js检查对象是否在平截头体中

时间:2014-07-22 02:21:08

标签: three.js frustum

我一直在修补three.js,我有一个画布,我想用作一种GUI。因为我必须检查一个物体是否在相机平截头体中。

我目前的代码:

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

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

frustum.setFromMatrix( camera.projectionMatrix );

if(frustum.containsPoint( mesh.position )){
    //stuff happens...
};

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

2 个答案:

答案 0 :(得分:5)

您的代码正在使用

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

中的回答

答案 1 :(得分:0)

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