2009-11-18 7 views
6

sto cercando di caricare i file MD2 in OpenGL, ma ho notato che la maggior parte dei programmi di esempio basta usare unil formato di file md2 Quake 2 (teoria)

lista precompilata dei normali. qualcosa di simile .....

//table of precalculated normals
{ -0.525731f, 0.000000f, 0.850651f },
{ -0.442863f, 0.238856f, 0.864188f },
{ -0.295242f, 0.000000f, 0.955423f },
{ -0.309017f, 0.500000f, 0.809017f },
...
...

Ok questo può sembrare un po 'nervosa muto, ma ho pensato che ogni modello è realizzato in diversi triangoli, come allora è possibile che è possibile utilizzare un set di normali precompilati per rendere tutti i modelli? Sembra strano e tutte le idee saranno apprezzate.

risposta

9

È possibile utilizzare una tabella precompilata di normali e utilizzare una tabella di ricerca per selezionare quella che è "abbastanza buona" per un caso particolare. Ogni triangolo è su un piano distinto, ed è quel piano che ha un normale, non il triangolo stesso.

Ad esempio, immaginiamo di avere un punto. Espandi quel punto in una sfera per gli scopi di questa discussione, lo rende un po 'più facile da afferrare concettualmente. Se disegna un cerchio perfetto attorno a quella sfera sull'asse , quindi ruota tale cerchio nell'asse x ogni volta, finirai con 360 cerchi. Se prendi un normale a intervalli di 1 grado lungo ciascuno di questi cerchi, ti ritroverai con i punti 360 ** 2. Da lì, il tuo normale è il vettore dal centro della sfera a quel punto sulla sfera, ed è normale che un piano costruito tangenzialmente punti sulla sfera. Ciò che si finisce se si calcola questi due per ogni punto su quella sfera è una tabella precalcolata di normali, che sarà quasi certamente abbastanza buona per la maggior parte delle situazioni. Ora hai solo bisogno di progettare uno schema di ricerca per quei dati (piano -> normale).

+0

Ti capita di avere qualche documentazione che posso leggere su questo? –

+0

No, scusate, questo è solo in cima alla mia testa e la mia comprensione della matematica coinvolta. –

+0

La maggior parte dei libri di matematica di livello più alto che riguardano la geometria 3D dovrebbero probabilmente coprirlo. –

1

Il MD2 file format specifica che ciascun vertice ha un "indice normale" e questa è una ricerca in un well-known table of normals. Suppongo che queste normali siano distribuite attorno a una sfera. Presumibilmente, lo strumento che ha costruito il modello ha scelto la più appropriata di queste normali per ogni vertice.

Per quanto riguarda la prima risposta: se si desidera un modello molto sfaccettato (come un cubo), allora ogni poligono ha effettivamente il suo normale, e ciascuno dei vertici che compone quel poligono deve utilizzare lo stesso vettore normale . Tuttavia, se si desidera ombreggiatura uniforme (come un torso), è comune che ogni vertice in un poligono abbia un vettore normale diverso. Ciò consente all'illuminazione di variare attraverso il poligono, che è utile sia in scenari di illuminazione per-vertice che per pixel.

+0

Se stai parlando delle normali dei vertici, allora non stai ancora parlando del poligono stesso che ha una normale. Stai ancora parlando di un piano con una normale, e quel piano viene solitamente considerato come un piano costruito perpendicolare alla curvatura desiderata della forma nel punto in cui si verifica il vertice. –

+0

Stavo solo cercando di chiarire il punto che penso stavi facendo nel tuo primo paragrafo. Quando si tratta di modelli MD2, penso che sia più utile considerare il piano tangente a ciascun vertice, piuttosto che il piano tangente per ogni triangolo (che è il modo in cui leggo la tua risposta all'inizio). Dal tuo commento sulla mia risposta, penso che siamo sulla stessa pagina. –

+0

Ho fatto abbastanza grafica per essere pericoloso, ma non abbastanza per sapere tutto questo. Mi capita di essere abbastanza forte in matematica per capire cosa sta succedendo. Il primo paragrafo è stato un tentativo di rispondere alla domanda come ho pensato che fosse stato chiesto. Per inciso, le normali del piano su cui si trova il poligono non sono inutili, non sono solo usate nell'illuminazione (potrebbero essere usate cioè, in un motore fisico, o il rilevamento di collisioni, o ...). –

5

Si è già risposto ma voglio far luce su di esso.

La tabella contiene vettori che coprono la superficie della sfera unitaria in modo uniforme. Sembra che l'insieme di 162 vettori sia l'angolo di uno subdividedicosahedron. Questo viene fatto per comprimere in modo impercettibile i vettori 3D di lunghezza unitaria in un indice (8 bit), vedere vector quantization. Per memorizzare un vettore normale arbitrario è possibile cercare nella tabella la corrispondenza più simile e memorizzare l'indice di questa corrispondenza. Con questa tabella di 162 vettori ben distribuiti, l'angolo tra il vettore originale e quello approssimato dovrebbe essere inferiore a 11 °, che sembra essere abbastanza buono per il motore Quake2.