Bagaimana saya bisa mendapatkan vektor normal untuk pesawat dari satu set simpul?

9

Saya sedang mengerjakan proyek kecil HLSL / C ++ untuk membahas pekerjaan grafis saya, dan saya tidak yakin bagaimana saya bisa mendapatkan vektor yang menghadap dari vertex poligon. Sepertinya saya tidak dapat menemukan formula.

Posisi adalah P1, P2, P3

Sebut saja mereka kelas VertexPoint dengan P1.x, P1.y, P1.z misalnya?

RNewell122
sumber
pertanyaan terkait erat: gamedev.stackexchange.com/questions/11520/…
jhocking
Hanya untuk kebenaran, label pada gambar dan judul pertanyaan harus " vektor normal ", bukan "vektor dinormalisasi". Vektor normal itu sendiri tentu saja dapat dinormalisasi (panjangnya menjadi satu), tetapi tidak perlu, dan produk silang tidak akan menghasilkan vektor dinormalisasi secara default.
jjmontes
1
Google "segitiga vektor normal", yang merupakan hal yang jelas bagi Google, memberikan zillions hit. 1 , 2 , 3 , 4 , 5 , 6 , ...
imallett
... 7 , 8 , 9 , 10 , 11 , 12 , 13 , ...
imallett
2
... 14 , 15 , 16 , 17 ... Semua ini (dan yang lain tak terhitung jumlahnya) menjawab pertanyaan — dan beberapa bahkan benar-benar memiliki kode C ++ / HLSL yang diinginkan. Serius. Pertanyaan ini telah dipukuli sampai mati, menyebutnya "duplikat" tidak memadai. "Sepertinya aku tidak bisa menemukan formula" pantatku — kamu tidak mencoba .
imallett

Jawaban:

28

Anda dapat dengan mudah menemukan normal dengan menghitung dua vektor, V1 = P2-P1, dan V2 = P3-P1, dan kemudian menemukan produk silang N = V1 x V2. Kemudian Anda menormalkan N. Tergantung pada urutan simpul (searah atau berlawanan arah jarum jam), Anda akan mendapatkan bagian depan atau belakang yang normal.

Anda juga perlu memastikan bahwa tiga tiga poin tidak selaras, jika mereka Anda harus memilih titik lain.

Hermetix
sumber