ฉันเห็นด้วยเกี่ยวกับหนังสือข้างต้นโดยมีหมายเหตุเล็กน้อย:
คู่มือการเขียนโปรแกรม OpenGL ฉบับที่ 8 ได้เปิดตัวแล้วและได้รับการปรับปรุงใหม่สำหรับ OpenGL 4.3 ที่ทันสมัย
SuperBible 5th ed จะให้ห้องสมุด crutch แก่คุณเพื่อเริ่มต้น แต่เมื่อคุณอ่านหนังสือคุณจะต้องปรับปรุงการทำงานของไลบรารีนั้นอีกครั้งดังนั้นในตอนท้ายคุณควรได้รับประสบการณ์ทั้งหมด ฉันขอแนะนำให้ห่อสิ่ง OpenGL ในบางสิ่งถ้าคุณใช้ภาษาที่เน้นวัตถุ ฉันทำงานในห้องสมุดของตัวเองเพื่อความสนุกซึ่งดูเหมือนจะเป็นวิธีที่จะนำไปใช้กับตัวเองฉันเข้าใจทุกอย่างเกี่ยวกับสิ่งที่ต้องทำและฉันต้องใส่สิ่งที่ฉันใช้จริง ๆ นอกจากนี้คุณยังสามารถสรุปข้อมูลบางอย่างเช่นการส่งข้อมูลไปยัง shaders (ไม่ใช่ ShinyMaterial.setColor (สีแดง) ที่ดีกว่ามาก) ซึ่งช่วยให้คุณสามารถสำรองบางสิ่งบางอย่างได้โดยการให้ทางเลือกแบบดั้งเดิม นอกจากนี้ยังมีoglplus
ปัญหาหลักของการเรียนรู้ 'คอร์' ที่ทันสมัยของ OpenGL คือการทำให้ขั้นตอนการทำงานพื้นฐานนั้นทำงานได้แม้ว่าจะเป็นเพียงการวาดรูปลูกบาศก์คุณต้องเข้าใจสิ่งต่อไปนี้:
- การทำงานของเมทริกซ์ (ใช้GLMหากคุณใช้ C ++ คุณจะต้องใช้ MatrixStack OpenGL เวอร์ชั่น SDK อย่างไม่เป็นทางการของที่นี่หรือแบบง่าย ๆของฉันที่นี่ )
- การเขียนโปรแกรม GLSL shader
- ข้อมูลที่มีผลผูกพันกับ shaders และ Vertex Buffer Objects หากคุณต้องการที่จะเรียนรู้เพียงแค่โปรไฟล์หลักที่บริสุทธิ์จริง ๆ พวกเขาทั้งหมดจะต้องถูกนำไปใช้พร้อมกันและหากมีสิ่งใดที่เสียหายคุณก็จะไม่เห็นอะไรเลยและแทบจะไม่มีเงื่อนงำใด ๆ ที่มันผิดพลาด ซึ่งยังไม่ครอบคลุมสิ่งต่าง ๆ เช่นแสงพื้นฐาน (ที่คุณต้องเรียนรู้อัลกอริทึมการแรเงานอกเหนือจากภาษาการเขียนโปรแกรม)
แต่คุณไม่จำเป็นต้องเริ่มต้นในส่วนลึกด้วยโปรไฟล์หลัก ใช้ฟังก์ชั่นบางอย่างที่เลิกใช้แล้วในตอนต้นทุกอย่างจะยังคงรองรับอยู่จากนั้นก็ทำให้มันทันสมัยขึ้น
อีกประเด็นคือ OpenGL ที่ 'ทันสมัย' จริง ๆ สามารถอ้างถึง 3 สิ่ง:
อันแรกคือไปป์ไลน์ shader ที่ตั้งโปรแกรมได้ซึ่งต่างจากฟังก์ชั่นฟังก์ชั่นคงที่ เทคนิค 'หลัก' หลักเป็นไปได้ตั้งแต่ OpenGL 2.0 เปิดตัวในปี 2004 เมื่อผู้แนะนำที่ไม่ได้รับการปรับปรุง (บทเรียนไม่ได้รับการอัพเดท) และ 1.5 มี Vertex Buffer Objects ซึ่งเป็นรากฐานสำคัญของ OpenGL สมัยใหม่ ปัญหาคือแม้กระทั่งทุกวันนี้นักพัฒนา OpenGL อาจไม่สามารถใช้ประโยชน์จากทุกสิ่งได้ แต่ก็มีเน็ตบุ๊กกี้จำนวนมากออกมาพร้อมกับชิปเซ็ต Intel เหล่านั้นที่รองรับเฉพาะ OpenGL 1.5 และโทรศัพท์เช่น iPhones / Android รุ่นเก่าที่รองรับเท่านั้น OpenGL ES 1.1 ข้อแตกต่างที่แท้จริงระหว่างสิ่งนี้ใน OpenGL 2.0 และ OpenGL 3.x / 4.x คือตอนนี้จำเป็นสำหรับโปรไฟล์หลัก
Modern OpenGL ยังสามารถอ้างถึงสิ่งใหม่ที่อยู่ใน 3.x, 4.x สิ่งต่าง ๆ เช่นVertex Array Objects , Framebuffer Objects , Uniform Buffer Objects / std140 , โครงร่างโครงร่าง , รูทีนย่อย GLSLและอื่น ๆ หลายคนที่ฉันค้นพบสามารถทำสิ่งต่าง ๆ ได้ดีกว่าในการเขียนโปรแกรมด้วย พวกเขายังสามารถเปลี่ยนท่อเครื่องยนต์โดยรวมของคุณได้อย่างละเอียด พวกเขายังเป็นสิ่งที่มีความพยายามเพียงเล็กน้อยที่คุณสามารถ backport ได้ด้วยการทำหน้าที่ผู้ช่วยและอื่น ๆ (ตัวอย่างเช่นเขียนวัตถุตัวจัดการ shader ทั่วไปที่คุณสามารถใช้ในการตั้งค่าชุดเครื่องแบบหากรองรับ UBOs อาจจะใส่สิ่งที่เขียนใหม่ shader เล็กน้อยเพื่อให้มันเป็นไปโดยอัตโนมัติ) สิ่งนี้ทำงานบนการ์ดวิดีโอใหม่เท่านั้นคุณจะไม่เห็นเน็ตบุ๊กที่รองรับหรือคอนโซลวิดีโอเกมรุ่นปัจจุบันใด ๆ OSX ล่าสุดมีเพียง 3
OpenGL รุ่นใหม่ที่ทันสมัยที่สุด OpenGL 4.3 เพิ่งเปิดตัว มันมาพร้อมกับการคำนวณเฉดสี, glMultiDrawElementsIndirect และบัฟเฟอร์การจัดเก็บ shader วิธีนี้ช่วยให้สามารถส่งไปป์ไลน์ที่แตกต่างกันโดยพื้นฐานซึ่งคุณอัปโหลดข้อมูลจุดสูงสุดทั้งหมดไปยัง GPU จากนั้นใช้ตัวประมวลผลเพื่อคำนวณสิ่งที่ควรวาดแทนที่จะทำในโปรแกรมของคุณ น่าเสียดายที่นี่เป็นเรื่องใหม่มากดังนั้นฉันจึงไม่รู้บทเรียนที่ดีเลย ลองดูที่ที่OpenGL 4.3 การตรวจสอบซึ่งจะช่วยให้ร่างของวิธีการทำงานนี้ (ยังเป็นผู้เขียนกล่าวว่ามีบทความ GPU Pro ได้รับการปล่อยตัวอธิบาย) การเป็นแบรนด์ใหม่จะไม่ได้รับการสนับสนุนทุกที่ในขั้นตอนนี้ (เว้นแต่ว่าคุณกำลังใช้การ์ด NVIDIA รุ่นใหม่ที่มีไดรเวอร์รุ่นเบต้า) แม้ว่าคุณจะสามารถใช้ OpenCL / CUDA เพื่อนำไปใช้บางส่วน
ฉันจะข้าม glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix และอื่น ๆ เริ่มต้นด้วยการเรียนรู้ Vertex Buffer Objects ที่ปราศจาก shaders อย่าลองใช้ 3D ในจุดนี้เพียงแค่สามเหลี่ยมสีขาวแบน ๆ ดังนั้นคุณไม่ต้องทำงานกับการปฏิบัติการ 3d โดยใช้เมทริกซ์ (เนื่องจากคุณจะต้องเรียนรู้ที่จะผูกมันไว้กับ shaders ในไม่ช้า) ไม่มีความรู้สึกในการเรียนรู้แบบเก่า) ถัดไปเพิ่มใน shaders คุณจะต้องเปลี่ยนวิธีการที่วัตถุบัฟเฟอร์จุดสุดยอดของคุณถูกผูกไว้เพราะตอนนี้คุณจะต้องการใช้คุณลักษณะจุดสุดยอด เรียนรู้วิธีการสื่อสารคุณสมบัติกับพวกเขาผ่านชุดเครื่องแบบ จากนั้นเรียนรู้การดำเนินการของเมทริกซ์ด้วย GLM ผูกเมทริกซ์เข้ากับตัวแบ่งและรับการ 3D เมื่อคุณทำเสร็จแล้วมันเป็นเพียงแค่การเรียนรู้สิ่งที่ก้าวหน้ามากขึ้นเช่นการทำพื้นผิว
บทช่วยสอนทั่วไปเกี่ยวกับ OpenGL ทั่วไปทางออนไลน์ที่ครอบคลุมการเขียนโปรแกรม shader ซึ่งส่วนใหญ่ทำงานร่วมกับ OpenGL 2.0+:
สำหรับแหล่งการเรียนรู้ทั่วไปอื่น ๆ OpenGL ES อาจเป็นจุดเริ่มต้นที่ดี OpenGL ES ได้แยกสิ่งที่คัดค้านออกทั้งหมด OpenGL 4.1 มีความเข้ากันได้อย่างสมบูรณ์กับ OpenGL ES ดังนั้นจึงเป็นไปได้ที่จะใช้โปรแกรม OpenGL ES และเรียกใช้ใน OpenGL 4.1 และหลักการพื้นฐานเหมือนกันสำหรับทั้งสอง
บางสิ่งที่ควรทราบคือOpenGL ES 3.0 เพิ่งเปิดตัวแต่เป็นของใหม่เพราะยังไม่มีบทช่วยสอนหรือการสนับสนุนฮาร์ดแวร์ ดูเหมือนว่าจะไม่มีการเปลี่ยนแปลงพื้นฐานที่สำคัญใด ๆ (เช่นความแตกต่างระหว่างไปป์ไลน์แบบคงที่และโมเดล Shader ที่เราเห็นด้วย OpenGL ES 1.0-> 2.0) ดังนั้นคุณอาจจะไม่ได้เรียนรู้สิ่งที่ล้าสมัย
นอกจากนี้ OpenGL ES มักจะใช้EGLดังนั้นคุณจะต้องเรียนรู้วิธีอื่นในการเปิดหน้าต่าง แต่ไม่ควรจะยากเกินไป มิฉะนั้นจะมีตัวห่อหุ้ม / อีมูเลชัน OpenGL ES อยู่สองสามตัวหรือคุณสามารถเรียนรู้บน Android / iPhone หากคุณมีหนึ่งตัว (หรือดูที่การใช้อีมูเลเตอร์)
มีคู่มือการเขียนโปรแกรม Addison Wesley OpenGL ES 2.0ซึ่งเทียบเท่ากับหนังสือปกแดง
นอกจากนี้คุณยังสามารถดูสิ่งที่เน้น GLSL shader ได้เนื่องจากเป็นส่วนหนึ่งของ OpenGL สมัยใหม่ส่วนใหญ่ คุณเพียงแค่ต้องแน่ใจว่าสิ่งที่คุณเรียนรู้ครอบคลุมด้านกาว 'ของ OpenGL
ลองชมรุ่นที่ 2 ของ OpenGL Shading Language (Orange Book)
ตำราทำอาหาร OpenGL 4.0 Shading Language ครอบคลุมเนื้อหาที่มีเลือดออกมากกว่าสิ่งอื่น ๆ แต่ไม่ใช่ตัวช่วยสอนที่ครอบคลุม มันคุ้มค่าที่จะดูเพื่อทำความเข้าใจเกี่ยวกับแนวทางปฏิบัติ OpenGL ในโลกแห่งความเป็นจริงล่าสุดเช่นวัตถุบัฟเฟอร์เครื่องแบบและรูทีนย่อย GLSL
ในที่สุดคุณสามารถดู WebGL ได้แม้ว่าจะอยู่ใน JavaScript ที่จะค่อนข้างแตกต่างและยากกว่าในการดีบัก