l'argomento è abbastanza vecchio, ma ti risponderò per qualsiasi principiante che potrebbe cercare qualsiasi aiuto qui:
1) & 2)
vostra mappa normale è come un normale texture di diffusione, si è necessario caricarlo dal disco, creare la trama2D come si farebbe con la trama diffusa e bloccarla con le altre trame per inviarla agli shader. Quindi, per riassumere, le mappe normali, le mappe di altezza, ecc. Non sono diverse quando le gestisci dal lato CPU ... le carica sempre, crea la trama e le blocca.
3)
mappe normali sono solo un modo per memorizzare normali di ogni frammento in una texture. È meglio usarli con la trama diffusa corrispondente, perché è così che si possono simulare i piccoli dettagli. Tuttavia, in alcuni casi non è sempre necessario ... ad esempio, l'ultima volta che stavo lavorando a un rendering dell'acqua ... Ho usato una mappa DUDV e una mappa normale, ma non la mappa diffusa corrispondente, come utilizzato per il rendering in trame per ottenere il riflesso.
4)
mappe normali vengono mappati con la stessa struttura coordinate della texture di diffusione ... significa che se si dispone di un quad coordinate wich sono 0; 0, 0, 1, 1, 0, 1; 1 queste sono le coordinate che si usano per mappare entrambe le trame.
5)
si potesse fare senza shader, immagino ... si può anche fare a meno di OpenGL se vuoi ... shader sono progettati per questo tipo di operazioni, e sarà più facile fallo con gli shader.
Quindi, le mappe normali sono trame che codificano i vettori normali in colori ... un vettore normale è un vettore 3D e anche i colori sono vettori 3D. Quando si usa l'illuminazione, di solito si inviano le normali dallo shader del vertice allo shader del frammento ... lo shader del frammento interpola il valore del vertice normale per trovare un'approssimazione del vettore normale del pixel stesso. viene eseguito per impostazione predefinita ...
Con le mappe normali, non si utilizza un vettore normale del vertice, ma il vettore normale codificato nella trama.
Prima di tutto, devi convertire il calcolo dell'illuminazione dallo spazio mondiale in uno spazio tangente. Questo è fatto nel vertex shader.
quindi, campionerai la tua mappa normale nello shader di frammenti come una solita trama. Avrai un colore RGB del tuo pixel. dovrai convertire quel valore in un vettore normale, cioè, moltiplicarlo per 2 e sottrarre 1, cioè, rgb * 2 - 1, quindi usarlo come vettore normale nel calcolo dell'illuminazione.
Grazie, la presentazione nVidia e quelle 3DKingdoms sono fantastiche. Ho visto paulsprojects uno, ma ero perso quando è iniziato su cubo mappe. – zyndor