มีหลายสิ่งที่คุณเรียนรู้ได้ นี่คือความคิดของฉันในแต่ละมุมมองจากคนที่เพิ่งรู้จักกับ OpenGL
ตัวอย่าง OpenGL
มีโค้ดตัวอย่างมากมายที่คุณสามารถอ่านได้ ตัวอย่างของ G-trucนั้นค่อนข้างกว้างขวางและครอบคลุมคุณสมบัติขั้นสูงมากมาย
อย่างไรก็ตามหากคุณเป็นผู้เริ่มต้นการเรียนรู้จากตัวอย่างเป็นวิธีที่ดีในการเรียนรู้ การอ่านโค้ดที่คุณไม่เข้าใจจริงๆจะไม่สอนให้คุณรู้ว่าทำไมมันถึงใช้ได้ อันที่จริงข้อความในหน้าลิงค์ด้านบนระบุอย่างเฉพาะเจาะจงและถูกต้องว่าตัวอย่างนั้นไม่ได้มีไว้สำหรับผู้เริ่มต้น
การเรียนรู้จากซอร์สโค้ดเปล่านอกเสียจากว่ามันจะถูกคอมเม้นต์อย่างหนัก (ณ จุดนี้มันเป็นการสอน) ไม่ใช่เรื่องง่าย ความพยายามที่จะทำเช่นนั้นสนับสนุนการเขียนโปรแกรมรูปแบบลัทธิสินค้าและการเข้ารหัสคัดลอกและวาง มันง่ายมากที่จะโน้มน้าวใจตัวเองว่าคุณเข้าใจว่าบางสิ่งบางอย่างทำงานได้ดีเมื่อสิ่งที่คุณทำจริงๆแค่คัดลอกโค้ดจากที่หนึ่งไปอีกที่หนึ่ง คุณอาจผสมและจับคู่สิ่งต่าง ๆ แต่ความเข้าใจที่แท้จริงนั้นยากที่จะบรรลุได้หากไม่มีสื่อการสอนที่เหมาะสม
หนังสือ OpenGL
มีหนังสือที่ซื้อได้จริงจำนวนพอสมควรสำหรับการพัฒนา OpenGL ฉันจะครอบคลุมความคิดของฉันเกี่ยวกับสองที่ใหญ่ที่สุดที่นี่
OpenGL Redbook
อันนี้ค่อนข้างมีปัญหาจากมุมมองการปฏิบัติอย่างหมดจด ดูรุ่นที่ 7 ครอบคลุม GL 3.0 และ 3.1 ซึ่งค่อนข้างเก่า มีอยู่เป็นจำนวนมากของคุณสมบัติที่มีประโยชน์เพิ่มให้กับ OpenGL ตั้งแต่นั้นคุณสมบัติที่เปลี่ยนวิธีที่คุณจะเขียนสิ่งที่ ไม่ใช่คุณสมบัติฮาร์ดแวร์ทั้งหมด
รุ่นที่ 8 กำลังจะมา "เร็ว ๆ นี้" และจะครอบคลุม 4.1 ไม่มีคำพูดใด ๆ ว่าครอบคลุมเนื้อหาที่มีฟังก์ชั่นเก่าหรือไม่
ฉันว่าหนังสือเล่มนี้ก็โอเค ปัญหาที่ใหญ่ที่สุดกับมันคือการจัดระเบียบของข้อมูล มันเหมือนคู่มืออ้างอิงที่ครอบคลุมมากกว่าหนังสือที่สร้างขึ้นเพื่อการเรียนรู้ นี่คือสิ่งที่ฉันหมายถึง
หนึ่งในสิ่งที่สำคัญที่สุดที่ควรทำเมื่อการสอนคือไม่ให้นักเรียนใช้ข้อมูลที่ไม่สำคัญเกินความจำเป็น แต่ Redbook ทำเช่นนั้นอย่างแน่นอน เมื่อแนะนำวัสดุมันแนะนำวัสดุจำนวนมาก ส่วนมากของมันไม่จำเป็นสำหรับงานในมือ
สิ่งที่คุณพูดถึงและเมื่อคุณพูดถึงสิ่งสำคัญคือการทำให้หนังสือของคุณเป็นแหล่งเรียนรู้ที่ดี Redbook จะไม่เก็บข้อมูลไว้จนกว่าจะถึงเวลาที่เหมาะสมกว่า เมื่อพูดถึงวิธีการวาดสามเหลี่ยมและดั้งเดิมมันพูดเกี่ยวกับทุกอย่างเกี่ยวกับการวาดพวกเขาทั้งหมดในครั้งเดียว ครอบคลุมทุกตัวเลือกทุกฟังก์ชั่นทุกพารามิเตอร์ ฯลฯ
นั่นไม่ใช่การจัดระเบียบข้อมูลที่ดี
OpenGL ที่ยอดเยี่ยม
หนังสือเล่มที่ห้าของหนังสือเล่มนี้ครอบคลุมเฉพาะแกนกลาง GL 3. เท่าดังนั้นจึงไม่มีฟังก์ชั่นคงที่
อย่างไรก็ตามองค์กรทั่วไปของหนังสือเล่มนี้มีลักษณะเหมือนกันกับองค์กรรุ่นที่สี่มากขึ้นหรือน้อยลง ดูเหมือนว่าจะเป็นไปไม่ได้ตั้งแต่รุ่นที่ 4 ใช้ฟังก์ชันคงที่และไม่แนะนำเฉดสีจนกว่าจะถึงเวลาต่อมา
วิธีที่ทำให้สำเร็จคือการร้องเรียนอันดับ 1 ของฉันเกี่ยวกับหนังสือเล่มนี้ ผู้เขียนสร้างห้องสมุดที่ใช้รูปแบบของฟังก์ชั่นคงที่ OpenGL มันล้อมรอบ VAOs วัตถุบัฟเฟอร์ shaders และสิ่งอื่น ๆ อีกมากมายเพื่อให้เขาสามารถวาดวัตถุคณิตศาสตร์เมทริกซ์และพื้นผิวโดยไม่ต้องพูดถึงสิ่งต่าง ๆ เช่นวิธีการทำงานของ GL ในรายละเอียด
ด้วยการซ่อนรายละเอียดเหล่านี้ทั้งหมดจะทำให้วัสดุย่อยง่ายขึ้น แต่บ่อยครั้งที่คุณจะเห็นผู้คนเดินออกมาจากห้องพักของดีเลิศโดยไม่ทราบวิธีการทำงานจริงโดยไม่ต้องใช้ห้องสมุด พวกเขาไม่เข้าใจว่า shaders เชื่อมต่อกับวัตถุบัฟเฟอร์อย่างไรข้อมูลไหลไปป์ไลน์ ฯลฯ
มันเป็นหนังสือที่ให้ประโยชน์ได้มากกว่า moreso หากทุกอย่างล้มเหลวมันจะทำงาน แต่ฉันคิดว่ามันน่าจะดีกว่า
นอกจากนี้ตามที่ผู้ตรวจสอบบางคนดูเหมือนจะพลาดข้อมูลที่เป็นประโยชน์บางอย่างเช่นข้อมูลแอตทริบิวต์การบรรจุโดยใช้ค่าปกติและอื่น ๆ
วัสดุ OpenGL ออนไลน์
มีสื่อออนไลน์มากมายที่เราสามารถเรียนรู้ได้
บทแนะนำของ NeHe
บทเรียน NeHe ของเป็นคนอื่นได้ระบุไว้เป็นอย่างมากจากวันที่ พวกเขามุ่งเน้นไปที่ฟังก์ชั่นคง OpenGL มันมักจะระบุว่ามันเป็นเรื่องง่ายที่จะเรียนรู้ฟังก์ชั่นคงที่ GL ซึ่งเป็นความจริง แต่นั่นไม่ได้ทำให้มันเป็นความคิดที่ดี
การทำความเข้าใจว่าการทำงานของฟังก์ชั่นไปป์ไลน์จริง ๆทำงานหนักอย่างไร ฉันจะไปไกลกว่าที่จะบอกว่ามันยากกว่าการเรียนรู้เฉดสี เมื่อคุณได้รับมัน shaders ง่าย การทำความเข้าใจกับความซับซ้อนของสิ่งต่าง ๆ ในสภาพแวดล้อมพื้นผิว combiners และ whatnot นั้นยุ่งยากมากและต้องมีการเยี่ยมชมเอกสารอ้างอิงบ่อยครั้งเพื่อให้แน่ใจว่าทุกอย่างถูกต้อง แม้ว่าคุณจะเข้าใจทุกอย่างถูกต้อง แต่ก็เป็นเรื่องง่ายที่จะทำผิดพลาดเล็กน้อยซึ่งทำให้ทุกอย่างพัง
ความแตกต่างคือคุณสามารถทำให้ฟังก์ชั่นคงที่ได้โดยไม่ต้องเข้าใจ สิ่งนี้ส่งเสริมการเขียนโปรแกรมลัทธิสินค้า มันทำให้เป็นไปได้ที่จะได้รับบางสิ่งบางอย่างบนหน้าจอโดยไม่รู้ตัวว่ากำลังทำอะไรอยู่ ในฟอรัม OpenGL.org เราพบคำถามเกี่ยวกับฟังก์ชั่นคงที่โดยรอบตั้งแต่ผู้ที่ไม่ทราบว่า gluLookAt ทำงานอย่างไรไปจนถึงปัญหาเกี่ยวกับไฟส่องสว่าง
ไม่ฉันไม่คิดว่า NeHe เป็นวิธีที่ดีในการเรียนรู้ OpenGL
ความเห็นด้านบนสามารถใช้กับบทช่วยสอนที่ไม่ใช่ shader เช่นSwiftless , Lighthouseและอื่น ๆ
การเขียนโปรแกรม OpenGL ของ Wikibook
Wikibook OpenGL Programmingน่าจะเทียบเท่ากับ NeHe ในปัจจุบัน มันครอบคลุม GL เวอร์ชัน 2.1 เพราะพวกเขาต้องการให้มันเกี่ยวข้องกับแพลตฟอร์มมือถือ ถ้านั่นเป็นสิ่งสำคัญสำหรับคุณแล้วโดยทั้งหมดดูที่นี่
ปัญหาอื่น ๆ ของ NeHe และทำให้ Wikibook นี้เป็นจุดสนใจที่สำคัญในซอร์สโค้ด อัตราส่วนข้อความต่อโค้ดมีขนาดเล็กมาก มีโค้ดจำนวนมากแต่ตัวอักษรไม่ได้อธิบายว่ามันทำงานอย่างไร
เป็นตัวอย่างให้ดูที่ด้านล่างของบทช่วยสอน 2 มันแนะนำการผสม มันไม่ได้บอกว่าการผสมทำงานอย่างไร ไม่ได้glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
หมายความว่าจริงหรือหมายถึงอะไร เพิ่งพูดว่า "นี่คือโค้ดบางส่วนที่ทำให้สิ่งต่าง ๆ โปร่งใส"
นั่นไม่ใช่สภาพแวดล้อมการเรียนรู้ที่ดีที่สุด
บทแนะนำที่ไม่สมบูรณ์
Swiftless มีชุดของOpenGL บทเรียน ทุเรียนซอฟแวร์นอกจากนี้ยังมีบางส่วนShader บนพื้นฐานของบทเรียน และมีของ"OpenGLBook.com" บทเรียน
สิ่งที่ทุกคนมีเหมือนกันคือ ... พวกมันไม่สมบูรณ์และถูกทอดทิ้ง พวกเขามีบทเรียนประมาณ 4-5 บทและจากนั้นก็ถูกทิ้ง ไม่มีผู้ใดมาถึงพื้นผิวแสงหรืออะไรทำนองนั้น เอาล่ะทุเรียนก็ชนกับพื้นผิว แต่ไม่ส่องแสง
มากสามารถเปล่งประกายจากพวกเขา แต่ก็มีหลายสิ่งที่ขาดหายไปเช่นกัน
การส่งเสริมตนเองที่ไร้ยางอาย
การทบทวนบทเรียนกราฟิก 3Dของฉันจะเป็นความขัดแย้งทางผลประโยชน์ที่น่ากลัว ดังนั้นฉันจะถือเอาความยาวเกี่ยวกับองค์กรที่อยู่เบื้องหลังพวกเขาและทำไมฉันคิดว่าพวกเขาดี
โอ้และใช่ฉันกำลังทำงานกับบทที่ 17 โครงการยังไม่ตาย
สามบทแรกนั้นเกี่ยวกับการเรียนรู้ว่า OpenGL ไปได้อย่างไร The Superbible ล้มเหลวเนื่องจากพยายามซ่อนรายละเอียด ฉันพยายามอธิบายรายละเอียดเหล่านั้นให้ดี ซ้ำแล้วซ้ำเล่า บทนำอธิบายไปป์ไลน์เป็นข้อความธรรมดา บทช่วยสอนแรกอธิบายด้วยรหัสประกอบ และบทช่วยสอนที่สองก็เยี่ยมชมมากยิ่งขึ้น
จากนั้นฉันไปที่ตำแหน่งการวางตำแหน่งวัตถุโดยธรรมชาติ สิ่งนี้แนะนำเครื่องแบบ แต่ฉันไม่ต้องการที่จะติดขัดเครื่องแบบและมุมมองในเวลาเดียวกัน ดังนั้นฉันจึงแยกแนวคิดทั้งสอง หลังจากการฉายภาพการกำหนดบัฟเฟอร์เชิงลึกดูเหมือนเป็นขั้นตอนต่อไปที่สมเหตุสมผลแล้วตามด้วยวิธีการแปลงและเมทริกซ์ทำงาน หลังจากนั้นกล้อง การหมุนกับควอเทอร์เนียนนั้นเป็นสิ่งที่เพิ่มเข้ามาช้า แต่ฉันรู้สึกว่ามันเป็นเรื่องสำคัญที่ต้องพูดถึงสำหรับโปรแกรมเมอร์กราฟิค
บทแนะนำการส่องสว่างสร้างอีกแบบหนึ่งแบบต่อเนื่อง จากนั้นกระจายแสงต่อชิ้นส่วนจากนั้นกระจายแสง ช่วงไดนามิกเป็นตัวเลือกที่น่าสนใจ เนื้อหาเบื้องต้นส่วนใหญ่พยายามหลีกเลี่ยงสิ่งนั้น แต่ฉันยอมรับมัน วันนี้คุณไม่ใช่โปรแกรมเมอร์กราฟิกหากคุณคิดว่าความเข้มของแสงอยู่ในช่วง [0, 1] และคุณก็ไม่ได้เป็นโปรแกรมเมอร์กราฟิกในทุกวันนี้ถ้าคุณไม่รู้วิธีบำรุงรักษาท่อส่งสีเชิงเส้น
คนสุดท้ายในไฟส่องบน imposters เป็นคนแปลก ๆ ฉันพยายามออกแบบบทช่วยสอนที่แก้ปัญหาแทนที่จะแสดงฟังก์ชั่น OpenGL บางอย่างโดยเฉพาะอย่างยิ่งเมื่อหนังสือดำเนินไป การออกแบบการสอนของฉันมากมายมาจากการหาวิธีที่จะพูดคุยเกี่ยวกับบางหัวข้อในขณะที่ยังทำให้พวกเขาเป็นปัญหาจริงและไม่ชัดเจน "เรากำลังเรียนรู้ X ตอนนี้" เรขาคณิต shaders เป็นเรื่องยากเพราะพวกเขาไม่ได้แก้ปัญหามากจริงๆ
ผู้นำเสนอแสดงถึงปัญหาที่ GS มีประโยชน์ในการแก้ไข นอกจากนี้ยังอนุญาตให้ฉันพูดถึงสิ่งต่าง ๆ ที่ใช้น้อยกว่าเช่นdiscard
และเปลี่ยนความลึกของชิ้นส่วน และมันแสดงให้เห็นถึงพลังของ shaders จริง ๆ : คุณสามารถทำให้สี่เหลี่ยมแบนกลายเป็นทรงกลม
บทเรียนการทำพื้นผิวก็มีความน่าสนใจเช่นกัน หนึ่งในเหตุผลที่ฉันเลิกพูดคุยเกี่ยวกับพื้นผิวสีแบบแพร่กระจายจนกระทั่งหนึ่งในสามคือการพูดคุยเกี่ยวกับพื้นผิว sRGB ชั่วคราว ด้วยวิธีนี้ฉันสามารถพูดคุยเกี่ยวกับปัญหาพื้นฐานเกี่ยวกับพื้นผิว (โหลดข้อมูลวางไว้ในเฉดสีกรองกรองหนีบ ฯลฯ ) โดยไม่ต้องจัดการกับปัญหาเชิงเส้น ดังนั้นฉันจึงสามารถใช้บทช่วยสอนทั้งหมดในหัวข้อนั้น ที่ให้ฉันจริงๆเน้นจริง ๆความสำคัญในการรักษาท่อสีเชิงเส้นคืออะไร
มันเป็นหนึ่งในสัตว์เลี้ยงของฉัน