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

Jul*_*ian 9 javascript canvas three.js

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

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

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

mrd*_*oob 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 ) );
Run Code Online (Sandbox Code Playgroud)