根据当前相机确定视口上是否可见网格

时间:2013-07-12 21:07:28

标签: javascript canvas three.js

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

我在CANVAS模式下使用THREE.js(我找到了一个使用WebGL的解决方案,说明是否渲染了对象,但我需要CANVAS用于此项目)。

我一直试图找出three.js是否以某种方式设置属性以指示对象是否可见(当前在屏幕上,而不是在整个3D世界中),但我找不到它。网格物体具有可见的属性,但即使相机不是针对该物体,它也始终为真。

1 个答案:

答案 0 :(得分:18)

这是你要追求的代码:

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 ) );