Jak mogę uzyskać normalny wektor dla płaszczyzny z zestawu wierzchołków?

9

Pracuję nad małym projektem HLSL / C ++ do omówienia mojej pracy graficznej i nie jestem pewien, jak mam uzyskać wektor skierowany z wielokąta wierzchołka. Nie mogę znaleźć wzoru.

Pozycje to P1, P2, P3

Nazwijmy je klasą VertexPoint na przykład z P1.x, P1.y, P1.z?

RNewell122
źródło
ściśle powiązane pytanie: gamedev.stackexchange.com/questions/11520/…
jhocking
Tylko dla poprawności etykieta na zdjęciu i tytuł pytania powinna być „ normalnym wektorem ” zamiast „znormalizowanym wektorem”. Sam normalny wektor można oczywiście znormalizować (jego długość jest jednością), ale nie musi, a iloczyn krzyżowy domyślnie nie wytworzy znormalizowanego wektora.
jjmontes
1
Google „normalny trójkąt wektorowy”, co jest oczywistą rzeczą dla Google, daje zyliony hitów. 1 , 2 , 3 , 4 , 5 , 6 , ...
imallett
... 7 , 8 , 9 , 10 , 11 , 12 , 13 , ...
imallett
2
... 14 , 15 , 16 , 17 ... Każdy z nich (i bez wątpienia niezliczona liczba innych) odpowiada na pytanie - a niektórzy nawet mają pożądany kod C ++ / HLSL. Poważnie. To pytanie zostało tak mocno pobite na śmierć, że nazywanie go „duplikatem” jest nieodpowiednie. „Nie mogę znaleźć wzoru”, mój tyłek - nie próbowałeś .
imallett

Odpowiedzi:

28

Możesz łatwo znaleźć normalną, obliczając dwa wektory, V1 = P2-P1 i V2 = P3-P1, a następnie znajdź iloczyn krzyżowy N = V1 x V2. Następnie normalizujesz N. W zależności od kolejności wierzchołków (zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara) otrzymasz normalną stronę do przodu lub do tyłu.

Musisz także upewnić się, że trzy trzy punkty nie są wyrównane, jeśli tak, musisz wybrać inny punkt.

Hermetix
źródło