OpenGL มีแนวคิด 'วัตถุ' อยู่แล้ว
ตัวอย่างเช่นสิ่งใดก็ตามที่มี ID สามารถผ่านเป็นวัตถุ (นอกจากนี้ยังมีสิ่งที่ชื่อ 'วัตถุ' โดยเฉพาะ) บัฟเฟอร์, พื้นผิว, วัตถุบัฟเฟอร์เท็กซ์, วัตถุอาเรย์เท็กซ์, วัตถุเฟรมบัฟเฟอร์และอื่น ๆ ด้วยการทำงานเล็ก ๆ น้อย ๆ คุณสามารถห่อคลาสเรียนรอบ ๆ พวกเขาได้ นอกจากนี้ยังช่วยให้คุณสามารถถอยกลับไปใช้ฟังก์ชั่น OpenGL เก่าที่เลิกใช้แล้วหากบริบทของคุณไม่สนับสนุนส่วนขยาย ตัวอย่างเช่น VertexBufferObject อาจถอยกลับไปใช้ glBegin (), glVertex3f () และอื่น ๆ
มีสองสามวิธีที่คุณอาจต้องย้ายออกจากแนวคิด OpenGL ดั้งเดิมตัวอย่างเช่นคุณอาจต้องการเก็บข้อมูลเมตาเกี่ยวกับบัฟเฟอร์ในวัตถุบัฟเฟอร์ ตัวอย่างเช่นถ้าบัฟเฟอร์เก็บจุดยอด รูปแบบของจุดยอดคืออะไร (เช่นตำแหน่ง, ปกติ, texcoords และอื่น ๆ ) สิ่งที่ดั้งเดิมใช้ (GL_TRIANGLES, GL_TRIANGLESTRIP, ฯลฯ ... ) ข้อมูลขนาด (จำนวนลอยถูกเก็บไว้จำนวนรูปสามเหลี่ยมที่พวกเขาเป็นตัวแทน ฯลฯ ... ) เพียงเพื่อทำให้ง่ายต่อการเสียบลงในคำสั่งวาดอาร์เรย์
ผมขอแนะนำให้คุณมองไปที่OGLplus มันคือการเชื่อม C ++ สำหรับ OpenGL
อีกทั้งglxxนั่นเป็นเพียงการโหลดส่วนขยายเท่านั้น
นอกเหนือจากการห่อ OpenGL API คุณควรดูที่การสร้างระดับหนึ่งที่สูงขึ้นเล็กน้อยจากด้านบน
ตัวอย่างเช่นคลาสตัวจัดการวัสดุที่รับผิดชอบการให้เฉดสีทั้งหมดของคุณโหลดและใช้งาน นอกจากนี้ยังจะต้องรับผิดชอบในการถ่ายโอนทรัพย์สินให้กับพวกเขา ด้วยวิธีนี้คุณสามารถโทรหา: materials.usePhong (); material.setTexture (sometexture); material.setColor () สิ่งนี้จะช่วยให้มีความยืดหยุ่นมากขึ้นเนื่องจากคุณสามารถใช้สิ่งใหม่กว่าเช่นวัตถุชุดบัฟเฟอร์ที่ใช้ร่วมกันเพื่อให้มีเพียง 1 บัฟเฟอร์ขนาดใหญ่ที่มีคุณสมบัติทั้งหมดที่ร่มเงาของคุณใช้ใน 1 บล็อก แต่ถ้ามันไม่สนับสนุนคุณ คุณสามารถมี shader เสาหินขนาดใหญ่ 1 อันและสลับระหว่างโมเดล shader ที่แตกต่างกันโดยใช้รูทีนที่สม่ำเสมอถ้ามันรองรับหรือคุณสามารถถอยกลับไปใช้ shader ขนาดเล็กหลาย ๆ อันได้
นอกจากนี้คุณยังสามารถดูรายละเอียดของ GLSL สำหรับการเขียนโค้ด shader ของคุณ ตัวอย่างเช่น #include จะมีประโยชน์อย่างเหลือเชื่อและใช้งานง่ายมากในโค้ดการโหลด shader ของคุณ (นอกจากนี้ยังมีส่วนขยาย ARBสำหรับมัน) นอกจากนี้คุณยังสามารถสร้างรหัสของคุณได้ทันทีตามส่วนขยายที่ได้รับการสนับสนุนตัวอย่างเช่นใช้วัตถุชุดที่ใช้ร่วมกันหรือถอยกลับไปใช้เครื่องแบบปกติ
ในที่สุดคุณจะต้องการ API การเรนเดอร์ระดับสูงที่ทำสิ่งต่าง ๆ เช่นกราฟฉาก, เอฟเฟกต์พิเศษ (เบลอ, เรืองแสง), สิ่งที่ต้องใช้การเรนเดอร์หลายครั้งเช่นเงาแสงและอื่น ๆ และนอกเหนือจากนั้น API เกมที่ไม่มีส่วนเกี่ยวข้องกับ API กราฟิก แต่เพียงเกี่ยวข้องกับวัตถุในโลก