2010-09-27 7 views
5

Sono nuovo di OpenGL. Lo sto usando con JOGL.Confuso su Frustum Culling

sto leggendo di tronco di abbattimento:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html

io non sono sicuro di quello che si suppone di fare. La OpenGL non seleziona automaticamente gli oggetti fuori dallo schermo? (Questo abbattimento è significativamente più lento del semplice non invio degli oggetti in primo luogo?)

Da quello che sto leggendo, non sembra che questo gestirà evitando oggetti di disegno che sono nascosti dietro un altro ma sono all'interno del visualizzazione del tronco. Ciò significa che l'unico vantaggio è evitare di inviare oggetti fuori schermo a OpenGL?

+0

Secondo link salva la mia giornata, grazie! :-) –

risposta

1

Quando si esegue il controllo del codice, lo si fa utilizzando una geometria semplice che racchiude l'oggetto che si sta disegnando. Questo può essere fatto molto più velocemente rispetto alla carta che tenta di abbattere ogni triangolo.

4

Sì, hai praticamente ragione. L'abbattimento di Frustum taglia oggetti fuori dalla piramide della telecamera. OpenGL, quando si esegue il rendering di una scena, ovviamente lo fa anche su base per vertice. Le opere di macinatura di Frustum per oggetto e il suo potenziale di incremento delle prestazioni sono quindi molto più elevate.
Uno dei colli di bottiglia è il trasferimento dei dati tra CPU e GPU. Se devi trasferire ad esempio solo 1/4 di tutti gli oggetti/vertici in una scena all'aperto, l'abbattimento del tronco può dare una bella spinta alle prestazioni.

3

L'oggetto più veloce è quello che non è necessario disegnare.

In generale, per gli oggetti che non sono già semplici, fornirai un volume di delimitazione semplificato e conservativo. In questo modo, puoi eseguire il frustum senza considerare ogni triangolo in un oggetto complesso.

Evitare di disegnare oggetti che si nascondono uno dietro l'altro è chiamato abbattimento di occlusione. L'abbattimento dell'occlusione è in genere più complesso rispetto all'abbattimento del frustum; tuttavia, si noti che può ancora utilizzare lo stesso volume di delimitazione semplificato.

3

Sì - frustum smacchiatura solo rimuove gli oggetti che si trovano interamente al di fuori del frustum di visualizzazione. Niente di più o di meno. Sì, puoi potenzialmente migliorare le prestazioni su OpenGL stesso, specialmente se riesci a selezionare un numero maggiore di elementi contemporaneamente (ad esempio, una libreria viewgraph potrebbe essere in grado di tagliare interi rami del grafico abbastanza rapidamente).

è affronta anche l'eliminazione di triangoli (o qualsiasi altra cosa) che sono rivolti lontano dall'osservatore, ma questo è separato dall'estrazione del tronco.

Ci sono un paio di modi per gestire oggetti che sono oscurati da altri oggetti. L'eliminazione dell'occlusione è la più semplice, ma OpenGL non fa nulla per supportarlo direttamente (sebbene alcuni hardware facciano un'estensione). L'altro è il buffer di profondità, che OpenGL supporta direttamente. La differenza è che l'abbattimento dell'occlusione guarda un intero oggetto e non lo rende affatto se è completamente oscurato. Il buffer di profondità lavora su una base frammento per frammento, quindi avviene solo dopo aver reso (quasi) completamente un oggetto. A seconda del numero di oggetti con cui si ha a che fare (e così facendo), l'abbattimento di occlusione può, di conseguenza, essere una grande vittoria (dato che può evitare di eseguire molto rendering prima che il buffer di profondità possa fare il suo effetto).