Javascript 根据当前摄影机确定网格是否在视口中可见

Javascript 根据当前摄影机确定网格是否在视口中可见,javascript,canvas,three.js,Javascript,Canvas,Three.js,我一直在用three.js开发一个应用程序,但我遇到了这个问题,似乎找不到任何解决方案。 我想根据相机当前瞄准的位置确定哪些网格现在可见,这样我就可以刷新对象(数据来自服务)或不刷新对象,这取决于它们是否显示在视口中 我在画布模式下使用了THREE.js(我发现了一个使用WebGL的解决方案,该解决方案说明了对象是否被渲染,但我需要画布来完成这个项目) 我一直在试图找到three.js是否以某种方式设置了一个属性来指示对象是否可见(当前在屏幕上,而不是在整个3D世界上),但我找不到它。网格有一个

我一直在用
three.js
开发一个应用程序,但我遇到了这个问题,似乎找不到任何解决方案。 我想根据相机当前瞄准的位置确定哪些网格现在可见,这样我就可以刷新对象(数据来自服务)或不刷新对象,这取决于它们是否显示在视口中

我在画布模式下使用了
THREE.js
(我发现了一个使用WebGL的解决方案,该解决方案说明了对象是否被渲染,但我需要画布来完成这个项目)


我一直在试图找到
three.js
是否以某种方式设置了一个属性来指示对象是否可见(当前在屏幕上,而不是在整个3D世界上),但我找不到它。网格有一个visible:属性,但即使相机没有对准该对象,该属性也始终为true。

这是您要查找的代码:

var frustum = new THREE.Frustum();
var cameraViewProjectionMatrix = new THREE.Matrix4();

// every time the camera or objects change position (or every frame)

camera.updateMatrixWorld(); // make sure the camera matrix is updated
camera.matrixWorldInverse.getInverse( camera.matrixWorld );
cameraViewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
frustum.setFromMatrix( cameraViewProjectionMatrix );

// frustum is now ready to check all the objects you need

console.log( frustum.intersectsObject( object ) );

研究frustrum Culling我正在尝试代码,但我得到了cameraViewProjectionMatrix.multilyMatrices的“未定义方法”,你知道为什么吗?你打算用乘法(a,b)吗?谢谢。哦,不,我的错。使用旧版本的three.js(版本54)。我会更新。这对特定的三角形/面有效吗?怎么能被引用?对我来说很有用谢谢!现在,我如何将对象从截锥体外部的任何向量移动到截锥体的另一侧(目标:在对象移出视图后,在那里使其重生)。这里创建的问题:当使用这个时,我得到一个“未捕获的TypeError:无法读取未定义的属性'elements'”?这是过时的还是什么(r71)?