มีความสับสนบางอย่างที่นี่
OpenGL เป็นมือขวาในพื้นที่วัตถุและพื้นที่โลก
แต่ในพื้นที่หน้าต่าง (พื้นที่หน้าจอ aka) เรากำลังทันใดนั้นมือซ้าย
มันเกิดขึ้นได้อย่างไร?
วิธีที่เราได้รับจากมือขวาไปมือซ้ายคือรายการมาตราส่วน z เชิงลบในเมทริกซ์glOrtho
หรือการglFrustum
ฉายภาพ การสเกล z คูณ -1 (ในขณะที่ปล่อย x และ y เหมือนเดิม) มีผลในการเปลี่ยนความถนัดของระบบพิกัด
สำหรับ glFrustum
ห่างไกลและอยู่ใกล้กับที่ควรจะเป็นบวกกับไกล > ใกล้ พูดไกล = 1000 และใกล้ = 1 จากนั้น C = - (1001) / (999) = -1.002
ดูที่นี่สำหรับรายละเอียดเพิ่มเติมและไดอะแกรม
จากมุมมองของ orthographic glOrtho จะสร้างเมทริกซ์ดังนี้:
นี่ซ้าย , ขวา , ด้านล่างและด้านบนเป็นเพียงพิกัดสำหรับซ้ายแนวตั้ง , แนวตั้ง , แนวนอนด้านล่าง , ด้านบนแนวระนาบตัด (รับผิดชอบ)
ใกล้และไกลเครื่องบิน แต่มีการระบุไว้แตกต่างกัน ใกล้พารามิเตอร์ถูกกำหนดให้เป็น
- ใกล้: ระยะทางไปยังระนาบการตัดความลึกที่ใกล้กว่า ระยะนี้จะเป็นลบหากเครื่องบินอยู่ด้านหลังผู้ชม
และไกล:
- zFar ระยะทางไปยังระนาบการตัดความลึกที่ไกลขึ้น ระยะนี้จะเป็นลบหากเครื่องบินอยู่ด้านหลังผู้ชม
ที่นี่เรามีปริมาณการดูตามรูปแบบบัญญัติทั่วไป
เพราะ Z คูณคือ (-2 / (ไกลใกล้)) เครื่องหมายลบได้อย่างมีประสิทธิภาพเครื่องชั่ง Z โดย -1 ซึ่งหมายความว่า "z" หันไปทางซ้ายในระหว่างการเปลี่ยนแปลงการรับชมซึ่งไม่เป็นที่รู้จักสำหรับคนส่วนใหญ่เนื่องจากพวกเขาทำงานใน OpenGL เป็นระบบพิกัด "มือขวา"
ดังนั้นถ้าคุณโทร
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
แล้วใกล้ PLANE เป็น10 หน่วยข้างหน้าของคุณ คุณอยู่ที่ไหน? ทำไมที่จุดเริ่มต้นโดยให้แกน x อยู่ทางขวาแกน y อยู่ด้านบนของศีรษะและจมูกของคุณชี้ไปที่แกน z เชิงลบ (นั่นคือค่าเริ่มต้น"โดยค่าเริ่มต้นกล้องจะอยู่ที่จุดเริ่มต้น ชี้ลงแกน z เชิงลบและมีเวกเตอร์ขึ้นเป็น (0, 1, 0) " ) ระนาบใกล้จึงอยู่ที่ z = -10 เครื่องบินห่างไกลเป็น10 หน่วยที่อยู่เบื้องหลังคุณที่ Z