ฉันควรกังวลอะไรเมื่อเปลี่ยนแหล่งกำเนิด OpenGL ไปที่ด้านซ้ายบนของหน้าจอ


11

เพื่อการศึกษาด้วยตนเองฉันเขียนเครื่องมือ platformer 2D ใน C ++ โดยใช้ SDL / OpenGL ตอนแรกฉันเริ่มต้นด้วย SDL บริสุทธิ์โดยใช้บทเรียนบน sdltutorials.com และ lazyfoo.net แต่ตอนนี้ฉันใช้ SDL เพื่อสร้างบริบทการแสดงผล OpenGL แล้วแสดงผลด้วยฟังก์ชั่น OpenGL (โหมดเฉพาะทันที แต่ฉันเรียนรู้เกี่ยวกับ VAOs / VBOs ) ฉันใช้ SDL สำหรับอินเตอร์เฟสเสียง ฯลฯ เท่านั้น

SDL ใช้ระบบพิกัดที่มีจุดกำเนิดที่ด้านซ้ายบนของหน้าจอและแกน y บวกที่ชี้ลง ง่ายต่อการตั้งค่าการฉายภาพของฉันใน OpenGL เพื่อสะท้อนสิ่งนี้

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

ฉันควรจะกังวลอะไรในแง่ของการแสดงผลเมื่อฉันทำสิ่งนี้?

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


1
คุณใช้ SDL เพื่อสร้างการแสดงผล (เหมือนกับในฟังก์ชัน blitting ของ SDL) หรือคุณใช้ SDL เพื่อสร้างบริบทการเรนเดอร์ OpenGL จากนั้นใช้ฟังก์ชัน OpenGL เพื่อเรนเดอร์?
Nicol Bolas

1
ฉันใช้ SDL เพื่อสร้างบริบทการแสดงผล OpenGL และใช้ฟังก์ชัน OpenGL เพื่อแสดงผล ฉันจะอธิบายสิ่งนี้ในคำถาม
อนุพันธ์

1
บางทีถ้าคุณจะใช้ระบบฟิสิกส์ลองดูว่าระบบพิกัดใดที่ใช้ (ถนัดขวาหรือถนัดมือซ้าย, Y-UP หรือ Y-DOWN) และใช้ต่อไปเหมือนเดิม แน่นอนคุณสามารถทำสิ่งต่าง ๆ เช่น inverting Gravity แต่ฉันจะพยายามใช้สิ่งเดียวกันเพื่อทำให้ง่ายขึ้น
Gustavo Maciel

คำตอบ:


8

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


ที่ดี! ฉันมีความมั่นคงของตนเองลางสังหรณ์เป็นสิ่งเดียวที่ฉันต้องกังวล แต่นี่เป็นดินแดนใหม่สำหรับฉัน
อนุพันธ์

1
ฉันควรเพิ่ม Quake เก่าที่รักทำสิ่งนี้ในปี 1996 และมันก็ใช้ได้ดี
Maximus Minimus

5

เมื่อทำงานใน 2D กับ OpenGL ฉันมักจะใช้มุมซ้ายบนเป็นจุดเริ่มต้น สามารถทำได้ด้วย:

glOrtho(0,      // left
        width,  // right
        height, // bottom
        0,      // top
        0,      // zNear
        1       // zFar
        );

อย่างไรก็ตามมีข้อผิดพลาดบางอย่างเมื่อเปลี่ยนแหล่งกำเนิดเป็นด้านซ้ายบน

หลุมพรางหนึ่งที่ฉันพบเจอมากกว่าหนึ่งครั้ง: glScissor()ซึ่งใช้สำหรับการคลิปมักใช้พิกัดล่างซ้ายเสมอ

ลายเซ็นของมันคือ:

void glScissor( GLint x, GLint y, GLsizei width, GLsizei height )

โดยx, yระบุมุมซ้ายล่างของกล่องกรรไกร

โดยทั่วไปฟังก์ชั่นใด ๆ ที่ทำงานในพิกัดหน้าต่างทั้งหมดใช้ด้านล่างซ้ายเป็นจุดกำเนิด ซึ่งรวมถึงฟังก์ชั่นเช่นgluProject, gluUnProject, glCopyPixelsฯลฯ

แต่ฟังก์ชั่นบางอย่างเช่นglDrawPixelsการใช้งานglRasterPosสำหรับการวางตำแหน่งและglRasterPosการใช้วัตถุ (เปลี่ยน IE) พิกัด

หากคุณใช้งานบน Linux และรู้วิธีการใช้งานmanคุณอาจต้องการหยิบสำเนาของ OpenGL manpages ที่นี่: ftp://ftp.sgi.com/sgi/opengl/doc/ ฉันพบพวกเขาแบบเรียลไทม์ - ประหยัด

นอกจากนี้ฉันสังเกตเห็นว่าคุณพูดว่า "พลิกไฟล์ก่อนที่จะโหลด" พื้นผิว สิ่งนี้ไม่จำเป็น แทนที่จะพลิกภาพเมื่อโหลดเพียงแค่พลิกพิกัดพื้นผิวเพื่อไปจาก 1.0 ถึง 0.0 เมื่อแสดงผล

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