Bir düzlemin normal vektörünü bir dizi köşeden nasıl alabilirim?


9

Grafik işlerime devam etmek için HLSL / C ++ küçük bir proje üzerinde çalışıyorum ve bir tepe poligonundan karşılıklı bir vektör almak için nasıl emin değilim. Formülü bulamıyorum.

Konumlar P1, P2, P3'tür.

Onlara örneğin P1.x, P1.y, P1.z ile VertexPoint sınıfı diyelim mi?



Sadece doğruluk için, resim ve soru başlığındaki etiket "normalleştirilmiş vektör" yerine " normal vektör " olmalıdır . Normal vektörün kendisi elbette normalleştirilebilir (uzunluğu birliktir), ancak buna gerek yoktur ve çapraz ürün varsayılan olarak normalleştirilmiş bir vektör üretmez.
jjmontes

1
Google için en belirgin şey olan googling "normal vektör üçgeni", milyonlarca isabet verir. 1 , 2 , 3 , 4 , 5 , 6 , ...
imallett

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

2
... 14 , 15 , 16 , 17 ... Bunların her biri (ve şüphesiz sayısız diğerleri) soruyu cevaplıyor ve hatta bazıları istenen C ++ / HLSL koduna bile sahip. Ciddi anlamda. Bu soru öylesine dövüldü ki, "yinelenen" demek yetersizdir. "Formülü bulamıyorum" kıçımı - sen denemedin .
imallett

Yanıtlar:


28

İki vektörü (V1 = P2-P1 ve V2 = P3-P1) hesaplayarak normali kolayca bulabilir ve ardından N = V1 x V2 çapraz ürününü bulabilirsiniz. Daha sonra N'yi normalleştirirsiniz. Köşelerin sırasına (saat yönünde veya saat yönünün tersine) bağlı olarak normal bir ön veya arkaya bakacaksınız.

Ayrıca üç üç noktanın hizalı olmadığından emin olmalısınız, eğer onlar başka bir nokta seçmeniz gerekiyorsa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.