เมทริกซ์หมายถึงอะไร


19

ฉันเริ่มเรียนรู้ OpenGL เมื่อเร็ว ๆ นี้และฉันมีปัญหาในการมองเห็นว่าเมทริกซ์คืออะไรและบทบาทของพวกเขาในคอมพิวเตอร์กราฟิก รับแม่แบบของเมทริกซ์ 4x4 แบบนี้

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

ฉันคิดว่าแต่ละเมทริกซ์เช่นนี้เป็นพิกัดของจุดยอดในอวกาศโลก และหลายคนรวมตัวกันและให้ร่มเงาให้วัตถุ?

แต่ทำไมจึงมีความXxเป็นXyและXz? ฉันอ่านว่าแกนที่แตกต่าง (ขึ้น, ซ้าย, ไปข้างหน้า) แต่ก็ยังไม่สามารถทำให้หัวหรือก้อยของความสำคัญ

คำตอบ:


19

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

การสร้างการเปลี่ยนแปลงนั้นมาจากการแปลงหนึ่งในสามประเภท: แปลหมุนและปรับมาตราส่วน

เมทริกซ์การแปลเป็นสิ่งที่ชอบ:

เมทริกซ์การแปล

และเมทริกซ์สเกล: สเกลเมทริกซ์

เมทริกซ์การหมุนมีลักษณะดังนี้:

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

เมื่อต้องการรวมเมทริกซ์ใด ๆ เหล่านี้คุณก็แค่คูณมันเข้าด้วยกัน หากต้องการใช้การแปลงกับจุดยอดเพียงแค่คูณจุดยอด (ดังที่เห็นในแผนภาพการแปล)


4
O ดังนั้นเมทริกซ์ไม่ได้แทนคะแนน ฉันประทับใจในตอนนี้
Sad CRUD นักพัฒนา

หลายครั้งที่มีการนำไปใช้กับวัตถุหรือวิวพอร์ตโดยรวม (นั่นเป็นวิธีที่คุณได้รับมุมมองมุมมองเปอร์โตริโกกับมุมมองของคุณ)
Alex Shepard

3
@BDillan: ไม่ แต่พวกเขาสามารถมีคะแนนได้อย่างแน่นอน ยกตัวอย่างเช่นคอลัมน์สุดท้ายในเมทริกซ์ ModelView (GL / คอลัมน์หลัก) กำหนดวิธีแปลต้นฉบับ หรือจะกล่าวอีกนัยหนึ่งคือมันกำหนดตำแหน่งของดวงตาในอวกาศและสามารถใช้เป็นจุด ๆ ได้
Andon M. Coleman

พิกัดของคุณ 3-tuple ทำไมเมทริกซ์จึงไม่ใช่ 3 คูณ 3? สมมติว่าสามารถรวมการแปลงสามประเภทเข้ากับเมทริกซ์เดี่ยวและยังมีพื้นที่เพียงพอแล้วมุมล่างขวาทำอะไรมันดูเหมือนว่าเป็น 1 เสมอหรือไม่
n611x007

แถว / คอลัมน์ที่สี่มีไว้สำหรับแปลโดยเฉพาะ หนึ่งในคุณสมบัติที่ดีที่สุดของเมทริกซ์คณิตศาสตร์คือฉันสามารถรวมการแปลและการหมุนทั้งหมดที่ฉันต้องการให้เป็นเมทริกซ์เดียวเข้าด้วยกัน นี่หมายถึงชุดการแปลงที่ซับซ้อนมาก (ไม่มีที่สิ้นสุดในทางทฤษฎี) สามารถบีบอัดได้ถึง 1 เมทริกซ์ ใช่เซลล์สุดท้ายนั้นยังคงอยู่ 1 แต่มันทำให้เราสามารถคำนวณส่วนที่เหลือได้
Alex Shepard

10

ในคอมพิวเตอร์กราฟิกเราใช้การฝึกอบรมในการเข้ารหัสแปลง

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

มีความคล้ายคลึงกันความสัมพันธ์ระหว่างค่าของเมทริกซ์และเฟรมพิกัดที่สอดคล้องกันแสดงถึงเมทริกซ์ (ซึ่งไม่ได้เป็น "พื้นที่โลก" เสมอไปฉันควรทราบ) คอลัมน์ 3x3 ซ้ายบน (หรือแถว) แสดงถึงแกน X, Y และ Z ของเฟรมพิกัด

หรือไม่แถวแทนแกนหรือทำคอลัมน์ขึ้นอยู่กับว่าคุณกำลังใช้การประชุมของคูณเป็นหรือrow vector * matrix matrix * column vectorเมื่อทำการคูณเมทริกซ์มิติภายในของเมทริกซ์ทั้งสองต้องยอมรับและไม่ว่าคุณจะเป็นตัวแทนเวกเตอร์เป็นเมทริกซ์แถวหรือเมทริกซ์คอลัมน์ส่งผลกระทบต่อตัวเลือกนั้น (OpenGL และคณิตศาสตร์ดั้งเดิมมักจะชอบคอลัมน์เวกเตอร์)

ผมขอแนะนำให้ได้รับหนังสือที่ดีในพีชคณิตเชิงเส้นหรืออย่างน้อยการดูที่เป็นเมทริกซ์และ Quaternion คำถามที่พบบ่อยและการโพสต์นี้ในรูปแบบเมทริกซ์ใน DirectX และ OpenGL


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

9

เมทริกซ์คืออะไร?

เมทริกซ์ที่มีmคอลัมน์และnแถวหมายถึงฟังก์ชันที่ใช้เวกเตอร์*พร้อมmองค์ประกอบ (หรือพิกัด) และสร้างเวกเตอร์ที่มีnองค์ประกอบ

จากสิ่งนี้คุณสามารถสังเกตได้ว่าถ้าหากเมทริกซ์นั้นเป็นสี่เหลี่ยมจตุรัสของเวกเตอร์จะไม่เปลี่ยนแปลง เช่น. คุณได้รับเวกเตอร์ 3 มิติจากการแปลงเวกเตอร์ 3 มิติ, 2D จาก 2D และอื่น ๆ

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

การคูณเมทริกซ์หมายความว่าอย่างไร

ถ้าเมทริกซ์เป็นฟังก์ชันฟังก์ชันชนิดใด ? ฟังก์ชั่นทำอะไร? สูตรสำหรับมันถูกกำหนดโดยองค์ประกอบของเมทริกซ์ ลองเรียกอินพุตu, เอาท์พุทv, เมทริกซ์M(การคูณM*u=vนั้นเหมือนกันf(u)=v) และu(i)ให้iองค์ประกอบที่ของu(องค์ประกอบที่ 2 คือพิกัด y เป็นต้น) สำหรับเมทริกซ์, M(i,j)หมายความว่าแถวคอลัมน์ij

การสร้างองค์ประกอบv(1)ซึ่งเป็นผลลัพธ์แรกจะอธิบายโดยแถวแรกของเมทริกซ์ u(1)ครั้งM(1,1)บวกu(2)ครั้งM(1,2)... บวกครั้งu(i) M(1,i)เมทริกซ์นั้นดูคล้ายกับภาษาการเขียนโปรแกรมที่ง่ายมากซึ่งเหมาะสำหรับฟังก์ชั่นการเขียนโปรแกรมที่ทำงานโดยการสับอินพุตอินพุตเพิ่มเข้ากับตัวเอง ฯลฯ**

การจินตนาการว่าคุณกำลังทำงานกับองค์ประกอบหนึ่งของเอาต์พุตในแต่ละครั้งดังนั้นคุณจึงใช้เมทริกซ์ทีละแถวเท่านั้น คุณเขียนในuแนวนอน คุณเขียนแถว ith ของMด้านล่าง คุณคูณทุกคู่ด้านบน / ด้านล่างและเขียนผลิตภัณฑ์ด้านล่างจากนั้นเพิ่มผลิตภัณฑ์ vทำซ้ำสำหรับทุกแถวที่จะได้รับองค์ประกอบของทุก (ตอนนี้คุณจะเห็นว่าทำไมmโดยnเมทริกซ์ต้องดำเนินการบนmเวกเตอร์และผลิตnเวกเตอร์.)

อีกวิธีที่จะคิดเกี่ยวกับเรื่องนี้ - สมมติว่าเรากำลังทำการแปลง 3D เป็น 3D ดังนั้นเมทริกซ์ 3x3 (หรือการแปลง 3Dที่มักถูกเรียกเพราะคุณสามารถทำเป็น "ฟังก์ชั่น" นี้คือ "เคลื่อน" จุด 3D แม้ว่าจริงๆแล้วมัน เพียงแค่เปลี่ยนตัวเลข) [1 2 0]สมมติว่าแถวแรกคือ ซึ่งหมายความว่าหากต้องการผลลัพธ์ x ผลลัพธ์ได้รับ 1 ของอินพุต x, 2 ของอินพุต y และ 0 ของอินพุต z ดังนั้นมันจึงเป็นสูตร

** : หากเมทริกซ์เป็นภาษาการเขียนโปรแกรมแสดงว่าทัวริงยังไม่สมบูรณ์

การคูณเมทริกซ์สองค่าหมายความว่าอย่างไร

ถ้าทั้งคู่มีขนาดที่เหมาะสมA*Bแปลว่า "ฟังก์ชั่นที่ใช้ก่อนBแล้วA" คุณสามารถดูได้ว่าทำไมข้อ จำกัด เรื่องขนาดของการคูณจึงมีอยู่เพราะขนาดเป็นตัวกำหนดขนาดอินพุตและเอาต์พุตและเมทริกซ์ตัวหนึ่งใช้เอาต์พุตของอีกตัว ทำไมการคูณหมายถึงรวมฟังก์ชั่น มันง่ายกว่าที่จะสังเกตเห็นว่ามันจะต้องเป็น หากA*uเป็นเช่นเดียวกับf(u)และB*uเป็นเช่นเดียวg(u)แล้วf(g(u))เป็นเช่นเดียวกับที่เป็นเช่นเดียวกับf(B*u)A*(B*u)

ในทำนองเดียวกันการใช้งานซ้ำ ๆ ของฟังก์ชั่นเดียวกันสามารถแสดงเป็นพลังเนื่องจากA*A*Aหมายถึงการใช้ฟังก์ชั่นที่Aแสดงถึงสามครั้ง

เมทริกซ์มีประโยชน์อย่างไร?

การเปลี่ยนแปลงที่ดีเช่นไรnew_x = 1*x+2*y+0*z(ถ้าแถวแรกคือ [1 2 0]) ไม่ชัดเจนมากนัก แต่ลองดูเมทริกซ์ 2D อีกตัวเพื่ออธิบาย เมทริกซ์คือ:

[ 0 1
  1 0 ]

หรือ[0 1; 1 0]ใช้สัญลักษณ์ Matlab ที่สะดวก เมทริกซ์นี้ทำอะไร มันแปลงเวกเตอร์ 2 มิติแบบนี้: สำหรับ x ของผลลัพธ์ใช้ 1 ใน y ของอินพุต สำหรับ y ของผลลัพธ์ให้ใช้ 1 ของ x ของอินพุต เราได้สลับพิกัด x และ y ของอินพุต - เมทริกซ์นี้สะท้อนถึงจุดที่เกี่ยวกับเส้น x = y นั่นเป็นประโยชน์! โดยการขยายคุณจะเห็นว่าการฝึกอบรมทั้งหมดที่มี 1s ตามเส้นSW - NEนั้น คุณสามารถดูได้ว่าทำไมเมทริกซ์เอกลักษณ์ให้คุณป้อนกลับ (สำหรับ x ของเอาต์พุต, ใช้ x ของอินพุต, สำหรับ y ของเอาต์พุต, ใช้ y ของอินพุต ... )

ตอนนี้คุณจะเห็นว่าทำไมสัญลักษณ์จึงเป็นเช่น Xx, Yx- พวกเขาหมายถึงวิธีการมากของการป้อนข้อมูลX, Yฯลฯ xจะเข้าสู่การส่งออก

เมทริกซ์มีประโยชน์อย่างไร?

การเปลี่ยนแปลงอื่น ๆ ที่คุณสามารถทำได้? คุณสามารถปรับขนาดโดยใช้เมทริกซ์เอกลักษณ์ แต่ด้วยจำนวนที่แตกต่างกันมากกว่า 1 ในแนวทแยงมุม ตัวอย่างเช่น[2.5 0; 0 22.5]จะคูณทุกพิกัดของอินพุตเป็น 2.5 และถ้าคุณใช้เมทริกซ์นี้กับทุกจุดในรูปภาพรูปภาพจะมีขนาดใหญ่ 2.5 หากคุณใส่ 2.5 ในหนึ่งแถว ( [2.5 0; 0 1]) ดังนั้นพิกัด x เท่านั้นที่จะถูกคูณดังนั้นคุณจะขยายตาม x เท่านั้น

เมทริกซ์อื่น ๆ สามารถให้การแปลงรูปแบบอื่น ๆ เช่น "เอียง" ซึ่งมีองศาที่มีประโยชน์ต่างกัน โดยส่วนตัวแล้วความลาดเอียงเป็นสิ่งที่ฉันชอบน้อยที่สุดเพราะเมทริกซ์ดูเรียบง่าย แต่การเปลี่ยนแปลงตัวเองไม่ค่อยทำอะไรเลยยกเว้นภาพซ้อน สิ่งที่มีประโยชน์คือ "การหมุน" - คุณจะหมุนจุดได้อย่างไร? ลองหาตำแหน่งของจุด(x, y)หลังจากหมุนตามthetaองศาทวนเข็มนาฬิกาเกี่ยวกับจุดกำเนิด คุณจะพบว่าพิกัด x และ y ใหม่นั้นทั้งสองออกมาจากการคูณค่า x และ y เก่าด้วยไซน์และโคไซน์ของทีต้า คุณควรจะสามารถเขียนเมทริกซ์การหมุนได้อย่างง่ายดายโดยใช้ไซน์และโคไซน์ซึ่งสอดคล้องกับฟังก์ชันนี้

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

เนื่องจากเวกเตอร์สามารถเก็บสิ่งที่แตกต่างกันคุณสามารถอธิบายเมทริกซ์ที่เข้ารหัสสตริงอักขระ n ครั้งโดยการสับพวกเขาไปรอบ ๆ หรือ "คูณ" พวกเขา (คุณจะต้องมาพร้อมกับฟังก์ชั่นการคูณ / นอกจากนี้)

*** : เมื่อคุณฉายคุณใช้วัตถุ 3 มิติเช่นรูปปั้นส่องแสงบนมันและดูว่าเงา 2D แบบใดที่ตกลงบนผนัง

ข้อ จำกัด ของเมทริกซ์คืออะไร?

คุณสามารถทำทุกฟังก์ชั่นด้วยเมทริกซ์ได้หรือไม่? ไม่การคิดแบบกราฟิกเป็นการยากที่จะจินตนาการถึงสิ่งที่เมทริกซ์ไม่สามารถทำได้ (แต่มีอยู่แล้ว: เอฟเฟกต์ "หมุนวน" ไม่สามารถทำได้) แต่ที่นี่คือตัวอย่างง่าย: ฟังก์ชั่นการพูด Let 's fเป็นเช่นนั้นf(u)จะช่วยให้คุณกลับมาu ด้วยทุกองค์ประกอบ Squared คุณจะเห็นว่าคุณไม่สามารถเขียนเมทริกซ์สำหรับสิ่งนี้: ด้วยเมทริกซ์มีเพียงสิ่งอำนวยความสะดวกสำหรับการอธิบายสูตรอาหารที่คูณพิกัดด้วยจำนวนคงที่จึงไม่มีฟังก์ชั่นแฟนซีอื่น ๆ เช่นกำลังแสดง

**** : นี่คือสาเหตุที่เรียกว่าพีชคณิตเชิงเส้น - ฟังก์ชั่นพาวเวอร์ไม่ใช่แบบเส้นตรงมันไม่ได้สร้างเส้นตรงเมื่อพล็อต

ในแถวพิเศษแปลก ๆ ในเมทริกซ์ 4D

ทีนี้ทำไมเมทริกซ์ในตัวอย่าง 4 คูณ 4 ของคุณคืออะไร? สิ่งนี้หมายความว่าพื้นที่ 4 มิติหรือไม่ เราไม่มีคอมพิวเตอร์ 4D ดังนั้นทำไม? นี่เป็นกลอุบายที่น่าสนใจเกี่ยวกับเมทริกซ์ที่เกี่ยวข้องกับจุดก่อนหน้าเกี่ยวกับการดำเนินการเชิงเส้น

เกี่ยวกับฟังก์ชั่นที่ไม่สามารถทำได้ด้วยเมทริกซ์: เมทริกซ์สำหรับการย้ายจุด 2 มิติโดย 2 หน่วยไปทางขวาคืออะไร (ซึ่งก่อให้เกิดจุด(x+2, y)อีกครั้งเราติดอยู่มีวิธีการคูณอินพุต แต่ไม่มีวิธีเพิ่ม ค่าคงที่สำหรับการทำงานแบบ 2D เคล็ดลับคือการแกล้งคุณไม่ได้อยู่ในพื้นที่ 2 มิติ แต่ในพื้นที่ 3 มิติยกเว้นความสูง (พิกัด z หรือองค์ประกอบที่ 3) ของทุกสิ่งอยู่เสมอ 1 (มันค่อนข้างคล้ายกับว่าจักรวาล 2 มิติเป็นอย่างไร เพียงแค่ "จาน" นอนราบไปตามพื้นของจักรวาล 3 มิติ - ในกรณีนี้พิกัดที่สามจะเป็น 0 เสมอ) จากนั้นคุณสามารถใช้เวทมนตร์นี้เป็นพิกัดสุดท้ายเป็นค่าคงที่เพราะคุณรู้ว่ามันเป็น 1 เสมอสำหรับทุกอินพุต

เช่นเดียวกันสำหรับการย้ายจุด 3D คุณต้องมีพิกัด 4D นั่นเป็นเหตุผลที่ว่าทำไมเมทริกซ์การแปลง 3D ทั้งหมดที่คุณเห็นจะ[0 0 0 1]เป็นแถวสุดท้าย - คุณต้องไม่เปลี่ยนมิติที่ 4 มิฉะนั้นผลลัพธ์จะซับซ้อนเกินกว่าที่จะแสดงในรูปแบบ 3 มิติ!


แล้วคุณจะทำเมทริกซ์เพื่อเพิ่มได้อย่างไร บอกว่าแถวเป็นXx Yx Zx Tx... และแถวสุดท้ายที่เป็นจริงเป็นแทนจาก0t 0t 0t 1t Xt Yt Zt Ttที่จะทำ(x+2, y)จาก(x, y)คุณสามารถไป1x 0y 0z 2tที่จะให้คุณ1*x + 0*y + 0*z + 2*1ตั้งแต่t=1ใช่ไหม? ซึ่งค่อนข้างมากถึง x + 2 โอ้ตอนนี้คุณสามารถทำให้การเรนเดอร์ของคุณตลกด้วยค่า T ตลกใช่มั้ย -grin- (อ่านยาว ๆ ยังคงคุ้มค่าที่สุดขอบคุณ)
n611x007

2

นั่นคือเมทริกซ์หลักคอลัมน์ 4x4 และจากรูปลักษณ์ของเมทริกซ์มุมมอง

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

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

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


1

TL; DR เวอร์ชัน:

องค์ประกอบสามประการแรก[x y z]ในแต่ละแถวแสดงเวกเตอร์พื้นฐานเดียวของระบบความสัมพันธ์แบบเปลี่ยนสภาพ องค์ประกอบสุดท้ายwคือองค์ประกอบการแปล

รุ่นยาว

หากคุณต้องการเมทริกซ์ที่เมื่อนำไปใช้กับจุดยอดจะหมุนจุดยอดเกี่ยวกับจุดกำเนิดโดยบอกว่า 45 องศาคุณจะต้องเติมเมทริกซ์ด้วยเวกเตอร์สามตัวที่แทนแกนเปลี่ยนรูป:

  • จุดiบนxแกน[1 0 0]แต่หมุน 45 องศา นี้เป็นเพียง[i_x i_y i_z]ที่i_xและi_yขาของรูปสามเหลี่ยมที่มี 45 องศาภายในมุมเทียบกับแกน X [cos(45) sin(45) 0]ที่:
  • จุดjบนแกน y [0 1 0]แต่หมุน 45 องศาจากแกนนั้น วาดบนแผ่นกระดาษและคุณจะเห็นว่าเมื่อหมุนทวนเข็มนาฬิกา, [-sin(45) cos(45) 0]ส่วนประกอบกลายเป็น
  • จุดkบนzแกน ในตัวอย่างzนี้ไม่ได้รับผลกระทบเนื่องจากเราหมุนในระนาบ xy ที่ปรับแนวหน้าจอ

ดังนั้นเรามีเวกเตอร์ใหม่สามตัวคือ i, j, k วิธีง่าย ๆ ในการมองเห็นสิ่งนี้คือการใช้แกน X และ Y และหมุนการจัดเรียงกากบาททั้งหมด

เราจะใส่สิ่งเหล่านี้ลงในเมทริกซ์ได้อย่างไร?

i_x i_y i_z
j_x j_y j_z
k_x k_y k_z

หรือ

 cos(45)  sin(45)    0
-sin(45)  cos(45)    0
    0        0       1

ถ้าคุณคูณจุดยอดด้วยเมทริกซ์นั้นคุณจะได้

v1_x = v_x cos(Θ)     - v_y sin(Θ) + v_z * 0
V1_y = v_x*sin(Θ)    + v_y cos(Θ) + v_Z * 0
V1_z = v_x * 0        + v_y * 0    + v_z * 1

สำหรับv = [1 0 0]และΘ = 90°สิ่งนี้กลายเป็นv1 = [0 1 0]

สำหรับการแปลเราเพิ่มแถวและคอลัมน์ที่สี่และใส่ส่วนประกอบการแปลในคอลัมน์สุดท้าย เราได้เพิ่มองค์ประกอบที่สี่จุดสุดยอดซึ่งมักจะw 1นี่คือเมื่อเราคูณจุดยอดด้วยเมทริกซ์องค์ประกอบ w ทำให้คอลัมน์สุดท้ายถูกเพิ่มเข้ากับจุดสุดยอดอินพุตดังนั้นจุดสุดยอดจะถูกย้ายหรือแปล เราเรียกสิ่งเหล่านี้ว่า "พิกัดที่เป็นเนื้อเดียวกัน" (สำหรับจุดประสงค์ของเรา "homogeneous" ก็หมายความว่ามีองค์ประกอบที่ 4 wในแต่ละเวกเตอร์และเราใช้ 4x4 เมทริกซ์แทน 3x3 บ่อยครั้งที่คุณจะเห็นเงาที่ใช้เมทริกซ์ 4x3 เพื่อหลีกเลี่ยงการส่งแถวที่ 4 ที่ไร้ประโยชน์เป็นส่วนใหญ่ ใช้กับ GPU ซึ่งใช้หน่วยความจำและแบนด์วิดท์ที่มีค่าแถวที่ 4 เป็นสิ่งจำเป็นสำหรับการฉายภาพมุมมอง

หวังว่านี่จะช่วยได้


2
ขณะนั้นเมื่อคุณรู้ว่าคุณเพิ่งตอบคำถามที่ตอบแล้วเมื่อสามปีที่แล้ว ...
3 ต.ค.

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