Condividi tramite


Vedere Vettori normali delle facce e dei vertici

Ogni faccia in una mesh ha un vettore normale di unità perpendicolare. La direzione del vettore è determinata dall'ordine in cui sono definiti i vertici e dal fatto che il sistema di coordinate sia destro o sinistrorso.

Vettore normale di unità perpendicolare per una faccia anteriore

Ogni faccia in una mesh ha un vettore normale di unità perpendicolare. La direzione del vettore è determinata dall'ordine in cui sono definiti i vertici e dal fatto che il sistema di coordinate sia destro o sinistrorso. La faccia normale punta lontano dal lato anteriore del viso. In Direct3D, solo la parte anteriore di un viso è visibile. Una faccia anteriore è quella in cui i vertici sono definiti in senso orario.

La figura seguente mostra un vettore normale per una faccia anteriore:

vettore normale per un viso anteriore

Eliminazione delle facce posteriori

Qualsiasi faccia che non sia anteriore è una faccia posteriore. Direct3D non esegue sempre il rendering delle facce posteriori; si dice che le facce posteriori siano state rimosse. Eliminare una faccia posteriore significa eliminarle dal processo di rendering. È possibile modificare la modalità di eliminazione per eseguire il rendering delle facce posteriori, se lo si desidera. Vedere Stato di eliminazione per ulteriori informazioni.

Normali dell'unità del vertice

Direct3D usa le normali dell'unità di vertice per gli effetti di ombreggiatura gouraud, illuminazione e testurizzazione.

La figura seguente mostra le normali dei vertici:

normalità dei vertici

Quando si applica l'ombreggiatura gouraud a un poligono, Direct3D usa le normali dei vertici per calcolare l'angolo tra la sorgente di luce e la superficie. Calcola i valori di colore e intensità per i vertici e li interpola per ogni punto in tutte le superfici della primitiva. Direct3D calcola il valore dell'intensità della luce usando l'angolo. Maggiore è l'angolo, meno luce splende sulla superficie.

Superfici piatte

Se si crea un oggetto piatto, impostare le normali dei vertici in modo che siano rivolte perpendicolarmente alla superficie.

La figura seguente mostra una superficie piatta composta da due triangoli con normali del vertice:

superficie piatta composta da due triangoli con normali vertice

Ombreggiatura liscia su un oggetto non piatto

Anziché un oggetto piatto, è più probabile che l'oggetto sia costituito da strisce di triangoli e che i triangoli non siano coplanari. Un modo semplice per ottenere un'ombreggiatura liscia su tutti i triangoli nella striscia consiste nel calcolare innanzitutto il vettore normale della superficie per ogni faccia poligonale a cui è associato il vertice. La normalità del vertice può essere impostata per realizzare un angolo uguale a ogni superficie normale. Tuttavia, questo metodo potrebbe non essere sufficientemente efficiente per le primitive complesse.

Questo metodo è illustrato dal diagramma seguente, che mostra due superfici, S1 e S2, viste dall'alto. I vettori normali per S1 e S2 sono visualizzati in blu. Il vettore normale del vertice viene visualizzato in rosso. L'angolo che il vettore normale dei vertici crea con la normale della superficie di S1 è uguale all'angolo tra la normale del vertice e la normale della superficie di S2. Quando queste due superfici sono accese e ombreggiate con ombreggiatura Gouraud, il risultato è un bordo uniformemente ombreggiato e arrotondato uniformemente tra loro.

La figura seguente mostra due superfici (S1 e S2) e i relativi vettori normali e vettore normale dei vertici:

due superfici (s1 e s2) e i relativi vettori normali e vettore normale dei vertici

Se la normalità del vertice si appoggia verso una delle facce con cui è associata, fa sì che l'intensità della luce aumenti o diminuisca per i punti su tale superficie, a seconda dell'angolo che crea con la sorgente di luce. Il diagramma seguente mostra un esempio. Queste superfici sono visibili sul bordo. La normale del vertice si appoggia verso S1, creando un angolo più piccolo con la sorgente di luce rispetto alla normale del vertice se avesse angoli uguali con le normali della superficie.

La figura seguente mostra due superfici (S1 e S2) con un vettore della normale del vertice che si appoggia verso una faccia:

due superfici (s1 e s2) con un vettore normale vertice che si appoggia verso un viso

Bordi appuntiti

È possibile usare l'ombreggiatura Gouraud per visualizzare alcuni oggetti in una scena 3D con bordi taglienti. A tale scopo, duplicare i vettori normali dei vertici in qualsiasi intersezione dei visi in cui è necessario un bordo acuto.

La figura seguente mostra i vettori delle normali dei vertici duplicati ai bordi taglienti:

vettori normali dei vertici duplicati a bordi taglienti

Se si usano i metodi DrawPrimitive per eseguire il rendering della scena, definire l'oggetto con bordi taglienti come elenco di triangoli, anziché una striscia di triangoli. Quando si definisce un oggetto come striscia di triangoli, Direct3D lo considera come un singolo poligono composto da più facce triangolari. L'ombreggiatura Gouraud viene applicata sia in ogni faccia del poligono che tra le facce adiacenti.

Il risultato è un oggetto ombreggiato senza problemi da faccia a faccia. Poiché un elenco di triangoli è un poligono composto da una serie di facce triangolari disgiunte, Direct3D applica l'ombreggiatura Gouraud in ogni faccia del poligono. Tuttavia, non viene applicato da faccia a faccia. Se due o più triangoli di un elenco di triangoli sono adiacenti, sembrano avere un bordo tagliente tra loro.

Un'altra alternativa consiste nel passare all'ombreggiatura piatta quando si esegue il rendering di oggetti con bordi taglienti. A livello di calcolo questo metodo è più efficiente, ma può comportare oggetti nella scena che non vengono visualizzati in modo realistico come gli oggetti con ombreggiatura Gouraud.

Sistemi di coordinate e geometria