Come posso ottenere il vettore normale per un piano da una serie di vertici?


9

Sto lavorando a un piccolo progetto HLSL / C ++ per andare oltre il mio lavoro di grafica e non sono sicuro di come ottenere un vettore di fronte da un poligono di vertice. Non riesco a trovare la formula.

Le posizioni sono P1, P2, P3

Chiamiamole classe VertexPoint con P1.x, P1.y, P1.z per esempio?


domanda strettamente correlata: gamedev.stackexchange.com/questions/11520/…
jhocking

Solo per correttezza, l'etichetta nell'immagine e nel titolo della domanda dovrebbe essere " vettore normale " anziché "vettore normalizzato". Il vettore normale stesso può ovviamente essere normalizzato (la sua lunghezza è l'unità), ma non è necessario e il prodotto incrociato non produrrà un vettore normalizzato per impostazione predefinita.
jjmontes,

1
Google "triangolo normale vettoriale", che è la cosa ovvia per Google, dà miliardi di colpi. 1 , 2 , 3 , 4 , 5 , 6 , ...
imallett,

... 7 , 8 , 9 , 10 , 11 , 12 , 13 , ...
imallett,

2
... 14 , 15 , 16 , 17 ... Ognuno di questi (e senza dubbio innumerevoli altri) risponde alla domanda - e alcuni hanno addirittura il codice C ++ / HLSL desiderato. Sul serio. Questa domanda è stata così battuta a morte, definirla "duplicata" è inadeguata. "Non riesco a trovare la formula" il mio culo, non ci hai provato .
imallett,

Risposte:


28

È possibile trovare facilmente la normale calcolando due vettori, V1 = P2-P1 e V2 = P3-P1, quindi trovare il prodotto incrociato N = V1 x V2. Quindi si normalizza N. A seconda dell'ordine dei vertici (in senso orario o antiorario) si otterrà un normale fronte o retro.

Devi anche assicurarti che tre tre punti non siano allineati, se lo sono devi scegliere un altro punto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.