Domanda

Una risposta mia domanda suggerisce che l'illuminazione DOT3 può aiutare con il rendering OpenGL ES, ma sto avendo problemi a trovare una definizione decente di quello di illuminazione DOT3 è.

Modifica 1

informazioni relative

iPhone è molto apprezzato.

È stato utile?

Soluzione

DOT3-illuminazione è spesso definito come l'illuminazione per pixel. Con illuminazione vertice l'illuminazione viene calcolato ad ogni vertice e l'illuminazione risultante viene interpolato sul triangolo. In illuminazione per pixel, come suggerisce il nome, l'oggetto è quello di calcolare l'illuminazione di ogni pixel.

Il modo in cui questo viene fatto su hardware funzione fissa come l'iPhone è con i cosiddetti combinatori registro. Il nome deriva DOT3 da questo stato di rendering:

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);

questo blog su Wolfgang Engels blog per più informazioni esattamente come impostare questa funzione.

Quando si esegue l'illuminazione per pixel è popolare di utilizzare anche una cosiddetta normale mappa . Ciò significa che il normale di ogni punto su un oggetto viene memorizzato in una mappa speciale texture, una mappa normale. Questo è stato reso popolare nel gioco DOOM 3 da ID Software dove i modelli poligonali abbastanza bassi dove usati ma con mappe normali ad alta risoluzione. La ragione per usare questa tecnica è che l'occhio è più sensibile alle variazioni di illuminazione di variazione di forma.

ho visto nella vostra altra domanda che la ragione per questo è venuto in su era che si voleva ridurre l'occupazione di memoria dei dati di vertice. Questo è vero, invece di memorizzare tre componenti per un normale in ogni vertice, avete solo bisogno di memorizzare due componenti per la texture coordinate alla mappa normale. L'attivazione di illuminazione per pixel sarà disponibile con un costo delle prestazioni anche se in modo non sono sicuro se questo sarà una vittoria netta, come al solito il consiglio è quello di provare e vedere.

Infine l'intensità luminosa diffusa in un punto è proporzionale al coseno dell'angolo tra la normale alla superficie e la direzione della luce. Per due vector i href="http://en.wikipedia.org/wiki/Dot_product" prodotto scalare è definito come:

a dot b = |a||b| cos(theta)

dove |a| e |b| è la lunghezza dei vettori a e b rispettivamente e theta è l'angolo tra loro. Se la lunghezza è uguale a uno, |a| e |b| sono indicati come versori e la formula semplifica a:

a dot b = cos(theta)

questo significa che l'intensità di luce diffusa è dato dal prodotto scalare tra la normale alla superficie e la direzione della luce. Ciò significa che tutti illuminazione diffusa è una forma di DOT3-illuminazione, anche se il nome è venuto a riferirsi al genere per-pixel.

Altri suggerimenti

qui :

  

bumpmapping sta mettendo una trama su un modello in cui la luminosità di ciascun texel definisce l'altezza di detto texel.

     

L'altezza di ogni texel viene poi utilizzato per perturbare l'illuminazione su tutta la superficie.

     

mappatura normale sta mettendo una texture su un modello in cui il colore di ogni texel racchiude tre valori che definiscono la direzione che posizione sui punti di superficie.

     

Un colore (255, 0, 0) per esempio, potrebbe significare che la superficie in tale posizione punta verso il basso rispetto all'asse X positivo.

     

In altre parole, ciascun texel è un normale.

     

Il nome deriva dal Dot3 che lei esprime con queste normali.

     

Diciamo che avere un vettore che punta nella direzione i punti sorgente di luce. E diciamo che avete il vettore che è la normale in un texel specifica del modello che ti dice in quale direzione che i punti di Texel.

     

Se fate una semplice equazione matematica chiamata "prodotto scalare" su questi due vettori normali, in questo modo:

     

Dot = N1x N2x + N1y N2y + N1z * N2z

     

Quindi il valore risultante è un numero che ti dice quanto quei due vettori puntano nella stessa direzione.

     

Se il valore è -1, allora puntano in direzioni opposte, il che significa in realtà che il texel è puntato verso la sorgente luminosa, e la sorgente di luce è puntato verso il texel, in modo che il texel deve essere acceso.

     

Se il valore è 1, allora puntano nella stessa direzione, il che significa che il texel sia rivolto verso la sorgente luminosa.

     

E se il valore è 0, allora uno dei punti vettori a 90 gradi rispetto all'altro. Vale a dire: se si sta in piedi sulla terra guardando in avanti, allora il vostro vettore vista è di 90 gradi rispetto alla normale della terra che punta verso l'alto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top