我试图获得相机可以看到的所有物体,因为我想更新它看不到的对象的位置。
frustum.containsPoint总是返回true,这是最大的问题
任何帮助都非常感谢。
camera.updateMatrix();
camera.updateMatrixWorld();
var frustum = new THREE.Frustum();
var projScreenMatrix = new THREE.Matrix4();
projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
// frustum.setFromProjectionMatrix(camera.projectionMatrix);
frustum.setFromProjectionMatrix(new THREE.Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse));
for (let index = 0; index < scene.children.length; index++) {
scene.children[index].updateMatrix(); // make sure plane's local matrix is updated
scene.children[index].updateMatrixWorld();
if (frustum.containsPoint(scene.children[index])) {
//stuff happens...
if (scene.children[index].name === "coin") {
scene.children[index].rotation.x += 0.01;
scene.children[index].position.y -= 0.1;
}
// console.log("mesh in view Frustrum");
} else {
console.log("mesh not in view Frustrum");
}
}
发布于 2022-02-11 19:17:03
您正在使用:
frustum.containsPoint(scene.children[index])它应该是:
frustum.intersectsObject(scene.children[index])Scene.children不保存点,而是保存3D对象。
https://stackoverflow.com/questions/71084928
复制相似问题