Como posso obter o vetor normal de um avião a partir de um conjunto de vértices?

9

Estou trabalhando em um pequeno projeto HLSL / C ++ para revisar meu trabalho gráfico e não tenho certeza de como obter um vetor de face de um polígono de vértice. Não consigo encontrar a fórmula.

As posições são P1, P2, P3

Vamos chamá-los de classe VertexPoint com P1.x, P1.y, P1.z, por exemplo?

RNewell122
fonte
questão intimamente relacionados: gamedev.stackexchange.com/questions/11520/...
jhocking
Apenas para correção, o rótulo na imagem e o título da pergunta devem ser " vetor normal " em vez de "vetor normalizado". É claro que o próprio vetor normal pode ser normalizado (seu comprimento é a unidade), mas não precisa, e o produto cruzado não produzirá um vetor normalizado por padrão.
Jjmontes 26/06
11
A pesquisa no "triângulo vetorial normal", que é a coisa mais óbvia para o Google, fornece zilhões de acessos. 1 , 2 , 3 , 4 , 5 , 6 , ... #
imallett
... 7 , 8 , 9 , 10 , 11 , 12 , 13 , ...
imallett
2
... 14 , 15 , 16 , 17 ... Todos (e sem dúvida outros) respondem à pergunta - e alguns até têm o código C ++ / HLSL desejado. A sério. Esta questão foi tão espancada até a morte, chamando-a de "duplicada" é inadequada. "Não consigo encontrar a fórmula" minha bunda - você não tentou .
imallett

Respostas:

28

Você pode encontrar facilmente o normal calculando dois vetores, V1 = P2-P1 e V2 = P3-P1, e depois encontre o produto cruzado N = V1 x V2. Em seguida, você normaliza N. Dependendo da ordem dos vértices (no sentido horário ou anti-horário), você obterá uma face normal para a frente ou para trás.

Você também precisa se certificar de que três três pontos não estejam alinhados; se forem, você precisará escolher outro ponto.

Hermetix
fonte