2013-07-12 13 views
6

Ho sviluppato un'applicazione con three.js ma ho riscontrato questo problema e non riesco a trovare alcuna soluzione. Voglio determinare quali mesh sono visibili in questo momento in base a dove sta puntando la fotocamera, così posso aggiornare i miei oggetti (i dati provengono da un servizio) o meno a seconda che vengano mostrati nella vista.Determina se una mesh è visibile nella vista in base alla telecamera corrente

Sto usando THREE.js in modalità CANVAS (Ho trovato una soluzione che utilizza WebGL che dice se gli oggetti sono resi o meno, ma ho bisogno di CANVAS per questo progetto).

Ho cercato di scoprire se three.js imposta in qualche modo una proprietà per indicare se l'oggetto è visibile o meno (attualmente sullo schermo, non sull'intero mondo 3D), ma non riesco a trovarlo. Le mesh hanno una proprietà visibile: ma è sempre attiva anche se la fotocamera non mira a quell'oggetto.

+0

a tronco di ricerca abbattimento –

risposta

14

Questo è il codice che stai dopo:

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

Grazie! Ci proverò e ti farò sapere se ha funzionato. – Julian

+0

sto provando il codice ma sto ottenendo "metodo indefinito" con cameraViewProjectionMatrix.multiplyMatrices, sai perché? era il tuo intento di usare .multiply (a, b)? Grazie. – Julian

+1

Oh nonono, mio ​​male. Utilizzo della vecchia versione di three.js (rev 54). Aggiornerò – Julian

Problemi correlati