Che cos'è esattamente il back face culling in OpenGL? Puoi dare a mi un esempio specifico con ad es. un triangolo?Domanda newbie OpenGL: cos'è il back face culling?
risposta
Se si guarda attentamente, è possibile vedere esempi di questo in molti videogiochi. Ogni volta che la fotocamera si sposta accidentalmente da a un oggetto, in genere un oggetto in movimento come un personaggio, nota come il mondo continua a eseguire il rendering correttamente. Questo perché i lati posteriori dei triangoli che formano la pelle del personaggio non sono resi; sono effettivamente trasparenti. Se così non fosse, ogni volta che la fotocamera si spostava accidentalmente all'interno di un oggetto o lo schermo diventava nero (perché l'interno dell'oggetto non è illuminato) o si ottiene una prospettiva bizzarra su come appare la pelle dell'oggetto dall'interno.
L'abbattimento faccia posteriore è il punto in cui i triangoli che puntano lontano dalla telecamera/dal punto di vista non sono considerati per il disegno.
Wikipedia definisce questo come:
Si tratta di un passo nella pipeline grafica che verifica se i punti del poligono appaiono in senso orario o antiorario ordine quando proiettato sullo schermo. Se l'utente ha specificato che i poligoni frontali hanno un avvolgimento in senso orario, se il poligono proiettato sullo schermo ha un avvolgimento in senso antiorario, è stato ruotato a faccia in giù dalla telecamera e non verrà disegnato.
Altri sistemi utilizzano la faccia normale e fanno il prodotto di punti con la direzione della vista.
È un modo relativamente rapido per decidere se disegnare un triangolo o meno. Considera un cubo. In qualsiasi momento 3 dei lati del cubo saranno rivolti verso l'utente e quindi non visibili. Anche se fossero disegnati, sarebbero oscurati dai tre lati rivolti in avanti. Eseguendo l'abbattimento del volto posteriore si riduce il numero di triangoli estratti da 12 a 6 (2 per lato).
L'abbattimento del volto posteriore funziona meglio con oggetti "solidi" chiusi come cubi, sfere, pareti.
Alcuni sistemi non hanno questo poiché considerano le facce doppie e quindi visibili da entrambe le direzioni.
I triangoli hanno le loro coordinate specificate in un ordine specifico, in senso orario IIRC.
Quando il motore grafico guarda un triangolo da una direzione specifica e le coordinate sono in senso antiorario, sa che sta guardando il retro del triangolo attraverso un oggetto. Poiché il lato anteriore dell'oggetto copre il triangolo, non è necessario disegnarlo.
In realtà è il contrario per impostazione predefinita: i punti CCW indicano un triangolo rivolto in avanti e i punti CW indicano il contrario. C'è un modo per cambiare questo, però. – cHao
Credo che Direct3D sia CCW per frontside di default mentre OpenGL è CW per frontside di default – Octopus
OpenGL default è CCW. Può essere cambiato con 'glFrontFace (GL_CW)'. DirectX è CW per impostazione predefinita. –
È solo una tecnica di ottimizzazione.
Quando si guarda un oggetto chiuso, ad esempio un cubo, si vede solo circa la metà dei volti: i volti che sono verso di voi (o, almeno, i volti che non sono verso di voi sono sempre occlusi da un'altra faccia che punti verso di voi)
Se si salta il disegno tutti questi all'indietro rivolti volti, avrà due conseguenze: - il tempo di rendering sarà due volte meglio (in media) - il rendering finale non cambierà (visto che un altro , faccia rivolta in avanti sarà disegnata in cima ad una "abbattuti" uno)
Così si ottiene fondamentalmente x2 perf gratuitamente.
Per sapere se il triangolo è fronte o retro, si prende v0-v1 e v0-v2, si crea un prodotto incrociato. Questo ti dà la faccia normale. Se questo vettore è verso di te (punto (normale, viewVector) < 0), disegna.
- 1. Una domanda newbie in Qt
- 2. Confuso su Frustum Culling
- 3. Domanda newbie su Lisp e Packages
- 4. In quale ordine dovrei inviare i miei vertici a OpenGL per Culling
- 5. C++ l'allocazione dinamica della memoria in una funzione - domanda newbie
- 6. Aiutare a costruire una richiesta POST con MultipartEntity (domanda newbie)
- 7. Processi di background delle applicazioni Web, domanda di design newbie
- 8. Prevenire consanguineità e la monocoltura in algoritmo genetico (domanda newbie)
- 9. OpenGL esegue il rendering di caselle all'interno
- 10. Domanda su COM Release() il metodo
- 11. In ruby come usare la variabile locale di livello di classe? (Domanda di un newbie ruby)
- 12. Risorse suggerite per il programmatore ARM newbie?
- 13. Newbie asm: dov'è il codice di chiamata?
- 14. OSGi vs Spring vs Struts vs EJB vs Hibernate - una domanda totalmente newbie
- 15. Domanda newbie sull'iniezione delle dipendenze quando un metodo deve creare nuovi oggetti
- 16. Rendering differito con problemi di culling basati su tile
- 17. newbie pagerjs - utilizzo senza node.js?
- 18. calcolare normale per vertice OpenGL
- 19. rspec testing carrierwave - newbie
- 20. testo corrispondente tra virgolette (newbie)
- 21. Font CSS Face "? #iefix"
- 22. Newbie Django modello di errore
- 23. Evita il caricamento ritardato di font-face
- 24. Domanda modello XSLT domanda
- 25. Marching Cube Domanda
- 26. newbie con azzimato e C#
- 27. Python newbie @patch problema decoratore
- 28. Apprendimento newbie Ajax (PHP JQuery)
- 29. Newbie che prova ad usare Moq per il metodo enumerabile
- 30. Rolling an evolution back
Ancora non lo capisco :) Se ho un triangolo rosso, dovrebbe essere disegnato in entrambi i casi (i vertici sono in ordine cw o ccw). Con il controllo del volto, il triangolo sarebbe scomparso se lo guardassi da dietro. – fhucho
@fhucho - in questo caso si sta considerando che il triangolo è in effetti a doppia faccia e si desidera tornare indietro a faccia a faccia. – ChrisF
Grazie, ho capito ora. – fhucho