เมทริกซ์เอกลักษณ์ในแง่ของเมทริกซ์การฉายภาพและโมเดลมุมมองโดยพื้นฐานแล้วจะรีเซ็ตเมทริกซ์กลับเป็นสถานะเริ่มต้น
อย่างที่คุณหวังว่าจะรู้glTranslate
และglRotate
สัมพันธ์กับสถานะปัจจุบันของเมทริกซ์เสมอ ตัวอย่างเช่นหากคุณเรียกglTranslate
คุณกำลังแปลจาก 'ตำแหน่ง' ปัจจุบันของเมทริกซ์ไม่ใช่จากจุดเริ่มต้น แต่ถ้าคุณต้องการเริ่มต้นใหม่ที่จุดเริ่มต้นนั่นคือเมื่อคุณโทรglLoadIdentity()
จากนั้นคุณสามารถทำได้glTranslate
จากเมทริกซ์ซึ่งตอนนี้ตั้งอยู่ที่จุดเริ่มต้นหรือglRotate
จากเมทริกซ์ซึ่งตอนนี้มุ่งไปที่ทิศทางเริ่มต้น
ฉันคิดว่าคำตอบของบุญที่ว่ามันเทียบเท่ากับ 1 นั้นไม่ถูกต้อง เมทริกซ์มีลักษณะดังนี้:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
นั่นคือเมทริกซ์เอกลักษณ์ บุญถูกต้องในทางคณิตศาสตร์ว่าเมทริกซ์ใด ๆ ที่คูณด้วยเมทริกซ์นั้น (หรือเมทริกซ์ที่มีลักษณะเช่นนั้นเส้นทแยงมุมอื่น ๆ ทั้งหมด 0s) จะส่งผลให้เมทริกซ์ดั้งเดิม แต่ฉันไม่เชื่อว่าเขาอธิบายว่าเหตุใดจึงสำคัญ
สาเหตุที่สิ่งนี้มีความสำคัญเนื่องจาก OpenGL คูณตำแหน่งและการหมุนเวียนทั้งหมดผ่านแต่ละเมทริกซ์ ดังนั้นเมื่อคุณวาดรูปหลายเหลี่ยม ( glBegin(GL_FACE)
บางจุดglEnd()
) มันจะแปลเป็น "อวกาศโลก" โดยการคูณด้วย MODELVIEW จากนั้นแปลจาก 3D เป็น 2D โดยการคูณด้วยเมทริกซ์ PROJECT และนั่นก็ทำให้ จุด 2 มิติบนหน้าจอพร้อมกับความลึก (จากหน้าจอ "กล้อง") ซึ่งใช้ในการวาดพิกเซล แต่เมื่อหนึ่งในเมทริกซ์เหล่านี้เป็นเมทริกซ์เอกลักษณ์คะแนนจะถูกคูณด้วยเมทริกซ์เอกลักษณ์ดังนั้นจึงไม่มีการเปลี่ยนแปลงดังนั้นเมทริกซ์จึงไม่มีผล มันไม่ได้แปลคะแนนมันไม่หมุนมันทิ้งไว้ตามที่เป็นอยู่
ฉันหวังว่านี่จะกระจ่างขึ้นอีกนิด!