วัตถุประสงค์ของ Model View Projection Matrix


102

เราใช้ Model View Projection Matrix เพื่อวัตถุประสงค์อะไร? เหตุใดเฉดสีจึงต้องใช้ Model View Projection Matrix


12
ลองดูลิงค์นี้songho.ca/opengl/gl_transform.html
iKushal

3
ผมแนะนำเปิดเว็บไซต์ Stack แลกเปลี่ยนทุ่มเทให้กับคอมพิวเตอร์กราฟฟิคและเลือกคำถามนี้เป็นคำถามเช่น ติดตามcomputergraphics.stackexchange.comหากคุณสนใจที่จะเห็นไซต์ที่กำลังเปิดตัว!
WIP

คำตอบ:


196

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

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

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

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


3
ดังนั้นสำหรับหลาย ๆ วัตถุ (ตาข่าย) เราจำเป็นต้องมีเมทริกซ์ modelView หลายตัวใช่ไหม
Yuriy Vikulov

5
สมมติว่าอาจเคลื่อนที่อย่างอิสระหรืออยู่ในตำแหน่งแยกกันใช่ นั่นเป็นวิธีที่ใช้กันทั่วไปในการดำเนินการผ่าน modelView หรือ projectionModelView เป็นเครื่องแบบเดียวกันกับโปรแกรม shader โดยตั้งค่าสำหรับโมเดลปัจจุบันบน CPU
Tommy

สวัสดีทอมมี่คุณสามารถแนะนำโค้ดตัวอย่างสำหรับฟังก์ชันการแพนใน Opengl Es2.0 ใน Android โดยใช้ Model View Projection Matrix ได้หากเป็นไปได้ ฉันอ้างอิงลิงก์เพิ่มเติมฉันไม่สามารถรับความคิดที่ชัดเจนได้ถ้ารหัสตัวอย่างหมายถึงมันง่ายต่อการเข้าใจสำหรับฉัน ..
harikrishnan

1
ฉันมีคำถาม. หาก openGL ใช้เมทริกซ์ MV เป็นหนึ่งเดียวและถ้าเราไปจากอวกาศกล้องไปยังอวกาศโลกเราจะต้องผกผัน (เมทริกซ์การฉาย * ดูเมทริกซ์) * (ตำแหน่งเคอร์เซอร์) แต่ถ้ามุมมองแบบจำลองเป็นเมทริกซ์ที่ประกอบขึ้น เราจะแยกโมเดลและดูเมทริกซ์ได้อย่างไรเพื่อให้ฉันสามารถใช้เมทริกซ์มุมมองสำหรับการคำนวณนั้นได้ ฉันต้องแยกมันออกจากกัน?
Evren Bingøl

@ EvrenBingølคุณได้รับคำตอบแล้วหรือยัง? ฉันแยกโมเดลและเมทริกซ์มุมมองของฉันไว้ต่างหาก แต่ฉันต้องการทราบคำตอบที่แท้จริงสำหรับคำถามของคุณว่าฉันควรแยกจากกันต่อไปหรือไม่
tom_mai78101

9

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

นี่คือตัวอย่างจากหนังสือที่ระบุโดย @ legends2k ในความคิดเห็น

ผู้อยู่อาศัยใน Cartesia ใช้แผนที่ของเมืองของตนโดยมีจุดเริ่มต้นอยู่กึ่งกลางอย่างสมเหตุสมผลที่ใจกลางเมืองและแกนนำไปตามจุดสำคัญของเข็มทิศ ผู้อยู่อาศัยใน Dyslexia ใช้แผนที่เมืองของตนโดยมีพิกัดอยู่ที่จุดใดจุดหนึ่งโดยพลการและแกนวิ่งไปในทิศทางตามอำเภอใจซึ่งอาจเป็นความคิดที่ดีในเวลานั้น พลเมืองของทั้งสองเมืองค่อนข้างพอใจกับแผนที่ของตน แต่วิศวกรการขนส่งของรัฐได้มอบหมายงานในการจัดทำงบประมาณสำหรับทางหลวงสายแรกระหว่างคาร์ทีเซียและดิสเล็กเซียต้องการแผนที่ที่แสดงรายละเอียดของทั้งสองเมืองซึ่งจึงแนะนำพิกัดที่สาม ระบบที่เหนือกว่าเขาแม้ว่าจะไม่จำเป็นต้องมีใครอื่น

นี่คืออีกตัวอย่างหนึ่ง

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

ดูวิดีโอนี้เพื่อทำความเข้าใจแนวคิดของโมเดลมุมมองและการฉายภาพ (แนะนำเป็นอย่างยิ่ง)

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


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

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

1
พวกเขาไม่ได้แสดงจุดยอดทั้งหมดในช่องว่างเดียวเนื่องจากสะดวกในการทำงานในพื้นที่สัมพัทธ์มากกว่าในพื้นที่ที่ใหญ่กว่าเช่นโลก สมมติว่าหุ่นยนต์เมื่อได้รับคำสั่งให้เคลื่อนที่ไปข้างหน้า 2 เมตรการบิดตาของมันจะเหมาะสมกว่าการหาจุดศูนย์กลางของโลกจากนั้นคำนวณพิกัดผลลัพธ์ที่ถูกต้อง
legends2k

ฉันคิดว่าคุณพูดถูก .. ยังไงก็ตามจะมีการเรียก Fragment Shader สำหรับทุกๆพิกเซลและเราจะทำการคูณเมทริกซ์สำหรับทุกพิกเซลในกรณีของตาข่ายที่ซับซ้อน : |
cegprakash

2
ในแฟรกเมนต์เชดเดอร์จะทำการคำนวณแสง / สีเท่านั้นเมื่อข้อมูลถึงแฟรกเมนต์เชดเดอร์การคำนวณตำแหน่งทั้งหมดจะเสร็จสมบูรณ์ (เช่นในจุดยอด Shader); คำอธิบายที่ดีขึ้นในหลายเหตุผลที่ใช้ระบบการประสานงานอยู่ที่นี่ หนังสือเล่มนี้เป็นแหล่งข้อมูลคณิตศาสตร์เกม 3 มิติที่ยอดเยี่ยม บทเช่นเดียวกับรูปแบบไฟล์ PDF ตัวอย่างจากเว็บไซต์ของหนังสือเล่มนี้
legends2k
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.