เวกเตอร์ปกติ, แทนเจนต์และทวินามคืออะไรและใช้อย่างไร


47

ฉันต้องการค้นหาข้อมูลต่อไปนี้:

  • พวกเขาคืออะไร
  • ตัวอย่างการใช้งานในการพัฒนาเกม (พื้นที่ที่ใช้)

เกี่ยวกับประเภทเวกเตอร์ต่อไปนี้:

  • Normal
  • Tangent
  • Binormal

คำอธิบายการพัฒนาเกมอย่างง่ายเป็นศูนย์กลางจะพอเพียง


1
คุณกำลังถามคำถามมากเกินไป เป็นการดีที่สุดที่คุณเพิ่งอ่านว่าเวกเตอร์ทำงานอย่างไร ตั้งแต่เริ่มต้น ตรีโกณมิติของคุณไปพร้อมกัน
Sidar

3
ฉันคิดว่านี่อาจจะถามมากมาย แต่ในทางกลับกันมันก็ดีที่มีข้อมูลนี้มารวมกันภายใต้คำถามเดียว นั่นคือเหตุผลที่ฉันขอคำอธิบายง่ายๆ
Jaanus Varus

คำตอบ:


43

โดยทั่วไปแล้วเวกเตอร์ปกติจะแสดงทิศทางที่ชี้ไปยัง "ออก" โดยตรงจากพื้นผิวซึ่งหมายความว่ามันเป็นมุมฉาก (ที่มุม 90 องศาถึง) เวกเตอร์ใด ๆ ที่เป็น coplanar ด้วย (ในกรณีของพื้นผิวเรียบ) หรือสัมผัสกับ (ใน กรณีของพื้นผิวที่ไม่แบน) พื้นผิว ณ จุดที่กำหนด

โดยทั่วไปแล้วเวกเตอร์แทนเจนต์จะถูกมองว่าเป็นเวกเตอร์เดียวที่มีอยู่ในระนาบของพื้นผิว (สำหรับพื้นผิวเรียบ) หรือซึ่งสัมผัสกับจุดอ้างอิงบนพื้นผิวโค้ง (เช่นถ้าระนาบราบถูกสร้างขึ้นด้วยปกติเหมือนกันจากจุดอ้างอิง เวกเตอร์แทนเจนต์จะเป็น coplanar กับระนาบนั้น)

แนวคิดของเวกเตอร์ Binormal นั้นซับซ้อนกว่าเล็กน้อย ในคอมพิวเตอร์กราฟิกส์โดยทั่วไปมันหมายถึง Bitangent vector (อ้างอิงที่นี่ ) ซึ่งเป็น "เวกเตอร์แทนเจนต์" อื่น ๆ ที่มีประสิทธิภาพสำหรับพื้นผิวซึ่งเป็น orthogonal ทั้งเวกเตอร์ปกติและเวกเตอร์แทนเจนต์ที่เลือกปกติสัมผัสแทนเจนต์

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

ในแง่ของการที่พวกเขาเกิดขึ้นคำตอบคือทุกที่ เวกเตอร์ปกติถูกใช้เพื่อจัดตำแหน่งกล้องและวัตถุในพื้นที่ 3 มิติเพื่อกำหนดวิถีการเคลื่อนที่การสะท้อนและมุมในการคำนวณทางฟิสิกส์การแมปสกินและพื้นผิวของแบบจำลอง 3 มิติเพื่อกำหนดจุดมุ่งหมายการเคลื่อนที่แบบออฟเซ็ตในการเขียนโปรแกรม AI ไปที่แสงสีและจุดสีบนพื้นผิวที่สัมพันธ์กับแสงกล้องและวัตถุอื่น ๆ และอื่น ๆ พวกเขาอาจเป็นหนึ่งในข้อมูลที่มีประโยชน์ที่สุดที่จะมีในสภาพแวดล้อมแบบ 3 มิติและพวกเขายังมีประโยชน์อย่างมากในแบบ 2D เช่นกัน


2
ประณามฉันควรจะเพิ่มรูปภาพ: p
RobCurr

ขอบคุณสำหรับคำอธิบายอย่างละเอียด! ทำเครื่องหมายว่าเป็นคำตอบ
Jaanus Varus

2
มันอาจช่วยในการอ่านบทความนี้เกี่ยวกับสาเหตุที่สมมติฐานสแควร์แพทช์ไม่ถูกต้องและทำไมทุกอย่างที่ทุกคนพูดเกี่ยวกับtangentsและbitangentsนั้นค่อนข้างหลอกลวง มันสรุปโครงร่างคณิตศาสตร์ที่เหมาะสมที่ควรใช้ แต่น่าเศร้าที่ฉันไม่มีความสามารถพอที่จะเขียนคำตอบที่ถูกต้องได้
Lars Viklund

เวกเตอร์ที่มีทั้ง bitangent และ binormal นั้นเทียบเท่ากัน ชื่อเหล่านี้มีสาเหตุมาจากสิ่งเดียวกันและขึ้นอยู่กับ "มุมมองทางจิต" ของคุณตามชื่อที่จะใช้
Nikos

15

เวกเตอร์ปกติโดยทั่วไปจะใช้สำหรับการคำนวณแสง มันเป็นเวกเตอร์ที่ควรตั้งฉากกับพื้นผิวที่ประมาณโดยจุดยอดของตาข่าย เกณฑ์ปกติถูกกำหนดในแต่ละตำแหน่งของจุดยอด แต่สามารถคำนวณได้แตกต่างกันไปขึ้นอยู่กับว่าคุณต้องการแสงเพื่อสะท้อนที่จุดยอดนั้นหรือสิ่งที่คุณต้องการจะทำอย่างไรกับการคำนวณแสงของคุณใน shader

เวกเตอร์แทนเจนต์และเวกเตอร์แทนเจนต์เป็นเวกเตอร์ที่ตั้งฉากกับกันและกันและเวกเตอร์ปกติที่อธิบายทิศทางของ u, v texture texture ด้วยความเคารพต่อพื้นผิวที่คุณพยายามแสดงผล โดยทั่วไปแล้วพวกเขาสามารถใช้ร่วมกับแผนที่ปกติซึ่งช่วยให้คุณสร้างรายละเอียดแสงพื้นผิวย่อยให้กับแบบจำลองของคุณ (bumpiness)

เห็นได้ชัดว่ามีวิธีอื่น ๆ ในการใช้เวกเตอร์เหล่านี้และฉันเพิ่งอธิบายการใช้งานเฉลี่ยของพวกมัน สำหรับข้อมูลทางเทคนิคเพิ่มเติมฉันขอแนะนำให้คุณรับหนังสือเกี่ยวกับคอมพิวเตอร์กราฟิกหรือสำรวจบางบทความบนอินเทอร์เน็ต มีข้อมูลมากมายเกี่ยวกับเรื่องนี้


4
+1 - ครั้งต่อไปแม้ว่า; เพิ่มรูปภาพ
Pieter Geerkens

9

ความแตกต่างระหว่างแทนเจนต์และทวินามมีความชัดเจนน้อยลงบนพื้นผิวทันที แต่ไม่ควรแปลกใจเกินไป - เดิมทีไบนารีมีการกำหนดไว้ไม่ใช่สำหรับพื้นผิว แต่สำหรับเส้นโค้งที่แนวคิดมีความหมายมากขึ้น เป็น 'ปกติ' ในการที่มันเป็นมุมฉากกับทิศทางของการเคลื่อนไหวจึงชื่อ) จะเจาะจงมากขึ้นกำหนดให้มีเส้นโค้งของรูปแบบ p = V (t) = (V x (t), V y (t), V z (t)) จากนั้นแทนเจนต์ - ซึ่งเป็นเวกเตอร์ที่ชี้ไปที่ ทิศทางของการเคลื่อนไหว - กำหนดโดย T u = dp / dt = (dV x / dt, dV z / dt, dV z/ dt) (ฉันใช้ตัวห้อยที่นี่เพื่อแยกความแตกต่าง 'ผิดปกติ' เนื่องจากฉันไม่มี MathJax ของฉันที่นี่) จากนั้นความเร็ว (ทันที) ตามแนวโค้งคือ s = | T u | ความยาวของเวกเตอร์แทนเจนต์และ เวกเตอร์แทนเจนต์ 'normalized' เป็นเพียง T = T u / s

จากนั้นเวกเตอร์ปกติถึงส่วนโค้งคืออนุพันธ์ของเวกเตอร์แทนเจนต์ที่ปรับตามช่วงเวลา, N u = dT / dt; เหตุผลที่แทนเจนต์ปกติถูกใช้ที่นี่เพื่อรักษาความเร็วตามโค้งจากการบิดเวกเตอร์ปกติ - คุณสามารถแสดงให้เห็นว่าด้วยคำจำกัดความนี้เรามักมี TN u = 0 โปรดทราบว่า N uไม่จำเป็นต้องเป็นเวกเตอร์หน่วย มากกว่า T uคืออะไร อันที่จริงแล้วขนาดของมันคือ k = | N u | คือความโค้ง (ทันที) ของเส้นโค้งที่จุดที่กำหนดและจุด p + N uคือศูนย์กลางของวงกลมที่เรียกว่าosculating (ณ จุดที่กำหนด) Normalized Normalized จะเท่ากับ N = N u/ k และ bitangent B คือ cross product B = TxN; เนื่องจาก T และ N เป็นทั้งเวกเตอร์หน่วยและพวกมันตั้งฉากกันดังนั้น B จึงเป็นเวกเตอร์หน่วยและ (T, N, B) เป็นกรอบรูปมุมฉาก

โปรดสังเกตว่าด้วยคำจำกัดความนี้ 'binormal' ไปยังเส้นโค้งนั้นใกล้เคียงกับสิ่งที่เราคิดว่าเป็นพื้นผิวธรรมดา (มันเป็นระนาบปกติของระนาบของ 'ท้องถิ่น' ของเส้นโค้ง) และเส้นโค้งปกติถึงใกล้กับอะไร เราคิดว่าเป็นสิ่งที่ทำให้ผิวหน้าสัมผัส

(ภาพนี้น่าเศร้าที่ไม่ได้ทำแนวคิดเรื่องความยุติธรรม แต่มันเป็นสิ่งที่ดีที่สุดที่ฉันเจอบนเว็บและฉันไม่สามารถสร้างเองได้อย่างง่ายดาย ... )

ป้อนคำอธิบายรูปภาพที่นี่

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