ฉันจะได้เวกเตอร์ปกติสำหรับระนาบจากเซตของจุดยอดได้อย่างไร?


9

ฉันกำลังทำงานในโครงการเล็ก ๆ ของ HLSL / C ++ เพื่อทำงานกราฟิกของฉันและฉันไม่แน่ใจว่าจะได้รับเวกเตอร์หันหน้าจากรูปหลายเหลี่ยมยอด ฉันไม่สามารถหาสูตรได้

ตำแหน่งคือ P1, P2, P3

ลองเรียกพวกเขาว่าคลาส VertexPoint ด้วย P1.x, P1.y, P1.z เป็นตัวอย่าง?


คำถามที่เกี่ยวข้องอย่างใกล้ชิด: gamedev.stackexchange.com/questions/11520/…
jhocking

เพื่อความถูกต้องฉลากในรูปภาพและชื่อคำถามควรเป็น " เวกเตอร์ปกติ " แทนที่จะเป็น "เวกเตอร์ปกติ" แน่นอนว่าเวกเตอร์ปกตินั้นสามารถทำให้เป็นมาตรฐานได้ (ความยาวของมันคือความเป็นเอกภาพ) แต่มันไม่จำเป็นต้องและผลิตภัณฑ์ครอสจะไม่สร้างเวกเตอร์ที่ทำให้เป็นมาตรฐานตามค่าเริ่มต้น
jjmontes

1
Googling "สามเหลี่ยมเวกเตอร์ปกติ" ซึ่งเป็นสิ่งที่เห็นได้ชัดสำหรับ Google ให้ความนิยมมาก 1 , 2 , 3 , 4 , 5 , 6 , ...
imallett

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

2
... 14 , 15 , 16 , 17 ... ทุกคน (และคนอื่น ๆ นับไม่ถ้วนอย่างไม่ต้องสงสัย) ตอบคำถาม - และบางคนก็มีรหัส C ++ / HLSL ที่ต้องการ อย่างจริงจัง. คำถามนี้ถูกตีจนตายเรียกว่า "ซ้ำ" ไม่เพียงพอ "ฉันไม่สามารถดูเหมือนจะหาสูตร" ตูดคุณของฉันไม่ได้ลอง
imallett

คำตอบ:


28

คุณสามารถหาค่าปกติได้ง่ายๆโดยการคำนวณเวกเตอร์สองตัวคือ V1 = P2-P1 และ V2 = P3-P1 จากนั้นหาผลิตภัณฑ์ข้าม N = V1 x V2 จากนั้นให้คุณปรับมาตรฐาน N ขึ้นอยู่กับการสั่งของจุดยอด (ตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา) คุณจะได้ด้านหน้าหรือด้านหลังตามปกติ

คุณต้องตรวจสอบให้แน่ใจว่าสามจุดนั้นไม่อยู่ในแนวเดียวกันถ้าคุณต้องเลือกจุดอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.