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

标签 three.js frustum

我一直在修改 Three.js,并且我有一个 Canvas ,我想将其用作 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()不断返回 false。我在这里做错了什么?

最佳答案

您的代码正在使用

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 中的回答

关于THREE.js 检查对象是否在截锥体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24877880/

相关文章:

剔除适用于从 View 投影矩阵中提取平面,但不适用于投影矩阵

javascript - 如何让月球绕地球平移并一起绕太阳转

Three.js - VRControls 集成 - 如何在场景中移动?

rotation - 三个J,改变旋转点

javascript - 每次刷新页面时,对象都会加载到不同的位置 - Three.js - OBJMTLloader

java - 对视锥体剔除感到困惑

3d - 在运行时将加载的模型转换为线框 |三.js

opengl - 如何检查对象是否位于 OpenGL 中的裁剪体积之外?

3d - 在 Three.Js 中使物体完全适合相机视锥

java - Frustum near plane OpenGL 使对象看起来更近,而不仅仅是剪裁