2010-08-29 7 views

risposta

15

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.

11

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.

+0

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

+0

@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

+0

Grazie, ho capito ora. – fhucho

1

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.

+1

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

+0

Credo che Direct3D sia CCW per frontside di default mentre OpenGL è CW per frontside di default – Octopus

+0

OpenGL default è CCW. Può essere cambiato con 'glFrontFace (GL_CW)'. DirectX è CW per impostazione predefinita. –

2

È 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.

Problemi correlati