Correggetemi se ho torto, ma perché calcolare la seconda volta?
Sto lavorando a un progetto complesso e la risposta accettata non è la soluzione migliore per me. Non vedo il punto di ricalcolare ciò che è stato calcolato. Per il mio scopo ho modificato la mia copia di three.js alzando una bandiera se qualcosa è stato rilevato in trance o meno. In seguito basta controllare sul vostro oggetto, se object.inFrustum === vero
Sotto seguente riga
if (webglObjects && (object.frustumCulled === false || _frustum.intersectsObject(object) === true)) {
aggiungere
object.inFrustum = true;
anche il luogo dove il caso finisce block Aggiungi una bandiera oposite
else {
object.inFrustum = false;
}
Il mio risultato finale in r70 che funziona perfettamente:
if (webglObjects && (object.frustumCulled === false || _frustum.intersectsObject(object) === true)) {
object.inFrustum = true; // The line to add
for (var i = 0, l = webglObjects.length; i < l; i ++) {
var webglObject = webglObjects[i];
unrollBufferMaterial(webglObject);
webglObject.render = true;
if (_this.sortObjects === true) {
_vector3.setFromMatrixPosition(object.matrixWorld);
_vector3.applyProjection(_projScreenMatrix);
webglObject.z = _vector3.z;
}
}
} else { // Create second condition like that
object.inFrustum = false;
}
Voglio sapere se il tronco contiene un intero cubo, ma non funziona con questo metodo ... quale metodo posso usare? (Non vedo nessuno elencato nella [documentazione] (http://threejs.org/docs/#Reference/Math/Frustum)) – CodyBugstein
Si potrebbe fare uno snapshot della tela dell'oggetto in quel momento per ottenere un prospettiva planare dell'oggetto. Trova le linee che costituiscono quell'istantanea poligonale. Conoscete già le coordinate della matrice frutum delle telecamere. Ora hai un poligono all'interno o all'esterno/sovrapposizione di un altro poligono. Utilizza un algoritmo di rilevamento "Poligono in poligono" o algoritmo della linea di scorrimento per ottenere ciò che ti serve! –