เริ่มต้นด้วย OpenGL เมื่อบทเรียนส่วนใหญ่ล้าสมัย [ปิด]


16

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

ฉันพร้อมที่จะเริ่มเขียนโปรแกรมใน OpenGL โดยใช้ C ++ ฉันมีคอมไพเลอร์ที่ใช้งานได้ (DevCpp; อย่าขอให้ฉันเปลี่ยนไปใช้ VC ++ และอย่าถามฉันว่าทำไม) ตอนนี้ฉันแค่มองหาบทช่วยสอนที่แข็งแกร่งเกี่ยวกับวิธีการตั้งโปรแกรมด้วย OpenGL ผู้ช่วยของฉันพบบทช่วยสอนที่จัดทำโดย NeHe Productions แต่เมื่อฉันได้รู้แล้วว่ามันออกจากวันที่แล้ว! (แม้ว่าฉันจะดึงหน้าต่างพื้นฐานมารวมกันเพื่อรองรับผ้าใบ OpenGL)

จากนั้นฉันก็ออนไลน์และพบว่า OpenGL SuperBible ซึ่งเห็นได้ชัดว่าใช้ freeglut แต่สิ่งที่ฉันอยากรู้คือ SuperBible 5th edition จะเป็นปัจจุบันหรือไม่ ข้อเสนอแนะเพื่อ freeglut ฉันพบว่ารุ่นล่าสุดคือ 2.6.0 แต่ตอนนี้มันเป็น 2.8.0!

  • OpenGL SuperBible ยังคงเป็นสถานที่ที่ดีและทันสมัยอยู่ใช่ไหม?
  • มีสถานที่ที่ดีกว่าในการเรียนรู้ OpenGL หรือไม่?
  • ฉันได้รับอนุญาตให้เก็บ freeglut ในไดเรกทอรีรวม DevCpp (อาจเป็น GL) หรือมีขั้นตอนที่สำคัญบ้างไหม?
  • มีความคิดเห็นหรือข้อเสนอแนะที่ฉันไม่คิดว่าจะถามเพราะฉันเพิ่งเริ่ม

@dreta ช่วยเคลียร์บางสิ่งให้ฉันดังนั้นตอนนี้ฉันมีความคิดที่ดีกว่าว่าจะถามอะไร:

ฉันคิดว่าฉันต้องการเริ่มต้นด้วย OpenGL โดยใช้ไลบรารี wrapper แทนที่จะเข้าถึง OpenGL โดยตรง
ฉันแค่คิดว่าสำหรับผู้เริ่มต้นมันจะง่ายขึ้นสำหรับฉันที่จะเขียนโปรแกรมและรับผลลัพธ์ที่ดีในขณะที่ฉันยังไม่ต้องเข้าใจรายละเอียดที่สกปรกทั้งหมด (ตามที่ @stephelton พูดถึง)

ปัญหาคือฉันไม่พบห้องสมุดใด ๆ ที่ไม่มีการอ้างอิงที่ไม่ได้กำหนดให้กับฟังก์ชั่นที่ไม่รองรับอีกต่อไป Freeglut ใช้งานได้ แต่ก็ยังใช้ GLU อยู่
ไม่มีใครรู้ว่าฉันสามารถทำอะไรได้บ้าง
นอกจากนี้ฉันพยายามรวบรวมแหล่งที่มาของ SuperBible แรก แต่ฉันมีข้อผิดพลาดเนื่องจาก GLAPI ไม่ได้ถูกกำหนดเป็นประเภทข้อผิดพลาดที่เกิดขึ้นในไลบรารี GLU

ฉันต้องการใช้ SuperBible แต่ฉันไม่ทราบวิธีการแก้ไข


2
คุณควรเปลี่ยนเป็น GCC
notlesh

DevCpp เป็นเพียง IDE ซึ่งเรียกใช้ GCC (mingw ให้เจาะจง) แต่เนื่องจากมีการกล่าวถึง Eclipse CDT น่าจะเป็นที่นิยมมากกว่าเนื่องจากไม่ได้ถูกทิ้งไว้ในระบบตลอด 10 ปีที่ผ่านมา
แคสเปอร์เบเยอร์

4
@Casper ผู้สืบทอดของมรดก DevCpp คือ Code :: Blocks และยังคงได้รับการอัปเดตเป็นประจำ
Alex Shepard

1
หากคุณต้องการห้องสมุดห่อหุ้มรอบ OpenGL ผมแนะนำให้คุณลองSFML SFML ให้สิ่งต่าง ๆ ตามปกติเช่นการสร้างหน้าต่างตัวจับเวลา ฯลฯ ขณะที่ยังช่วยให้คุณสามารถวาดข้อความและรูปร่างที่เรียบง่าย คุณสามารถปล่อยให้จมน้ำตายเพื่อใช้ OpenGL "ดิบ" เมื่อใดก็ตามที่คุณต้องการผสมฟังก์ชั่น SFML และการเรียก API ดิบ
Oskar N.

1
คุณไม่สามารถ "ปิด" คำถามได้โดยเพิ่ม "{CLOSED}" ลงในชื่อ คำถามจะถูกปิดโดยผู้ดำเนินรายการหรือหากมีผู้โหวตให้ปิดคำถาม ฉันจะย้อนกลับการแก้ไขของคุณ .. "CLOSED" จะถูกผนวกเข้ากับชื่อของคุณโดยอัตโนมัติหากผู้ดูแลตัดสินใจที่จะปิด ..
bummzack

คำตอบ:


19

ถิ่นที่อยู่ของเราโรล Bolas รักษาหนังสือเกี่ยวกับเส้นเกี่ยวกับการเขียนโปรแกรมกราฟิกที่ทันสมัย มันใช้ OpenGL ที่ทันสมัยทุกอย่างถูกนำมาใช้อย่างง่ายดายในการบริโภคเป็นจุดเริ่มต้นที่ดี ฉันใช้มันเพื่อเรียนรู้ OpenGL ที่ทันสมัยและมันทำให้ฉันประหลาดใจใน 2 เดือนที่ผ่านมา

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

หากคุณต้องการเรียนรู้เกี่ยวกับ GLSL มีGLSL Core Tutorialจาก lighthouse3D แม้ว่านี่จะเป็นความรู้หลักเพียงอย่างเดียวที่ฉัน "เชื่อมั่น" ในเว็บไซต์ส่วนที่เหลือมีแนวโน้มที่จะล้าสมัย

เมื่อคุณเริ่มเข้าใจถึงวิธีการที่ทันสมัยของ OpenGL คุณจะมีเวลาค้นหาข้อมูลเฉพาะอย่างง่ายกรองรหัสที่ล้าสมัยและที่สำคัญที่สุดคือการอ่านข้อกำหนด คุณเพียงแค่ต้องเริ่มต้นที่ไหนสักแห่ง

หนังสือที่เป็นประโยชน์ของ OpenGL ส่วนใหญ่ถ้าไม่ใช่ทั้งหมดนั้นล้าสมัยแล้ว SuperBible ใหม่นั้นเป็นอะไรที่แปลกและฉันจะไม่แนะนำให้ใคร คู่มือการเขียนโปรแกรม OpenGL สำหรับ OpenGL 4.1 ออกมาในวันที่ 16 กันยายนโชคไม่ดีที่รุ่นที่ 7 ใช้รหัสที่ไม่รองรับดังนั้นคุณต้องรอฉันแน่ใจ

และแน่นอนคุณสามารถถามคำถามได้ที่นี่


1
ทำไมคุณไม่แนะนำ SuperBible?
Codesmith

3
@AUTO SuperBible รุ่นที่ 5 ใช้ wrapper ที่กำหนดเองรอบ ๆ OpenGL เพื่อให้ "เข้าถึงได้" ตัวอย่างจำนวนมากใช้กระดาษห่อที่กำหนดเองมากเกินไป มันไม่ได้สอนคุณในสิ่งที่ควรจะเป็นซึ่งเป็นข้อกำหนดหลักของ OpenGL วิธีที่ฉันเห็นถ้าคุณไม่จำเป็นต้องเรียนรู้ OpenGL ที่คัดค้านอย่างชัดเจนแล้วก็ลืมไปเลยว่ามันมีอยู่จริง ไม่มีจุดเรียนรู้มัน สเปคหลักมีความชัดเจนและทรงพลังมากขึ้น
dreta

@AUTO สเปคหลักมีความต้องการมากขึ้นในตอนเริ่มต้นนั่นเป็นสิ่งที่ดี มันจะบังคับให้คุณดูแลกระบวนการเรนเดอร์ส่วนใหญ่ทำให้คุณเข้าใจและควบคุมมันได้อย่างเต็มที่ มันเปิดความเป็นไปได้มากมายมากกว่ารหัสที่เลิกใช้แล้ว หลังจากนั้นถ้าคุณสามารถเรียนรู้ API ของระบบปฏิบัติการและ lanuch OpenGL ภายใต้โดยไม่มีอะไรมากเกินไปคุณก็จะอยู่ในดินแดนมหัศจรรย์
dreta

ตกลงดังนั้นให้ฉันถามคำถามสำคัญกับคุณ: ไลบรารี GLU ดูเหมือนจะเลิกใช้แล้วและไม่ได้รับการสนับสนุนอย่างสมบูรณ์ โดยการใช้สเปคฉันจะได้รับการเข้าถึงโดยตรงโดยไม่จำเป็นต้องใช้ GLU หรือไม่ เช่นนั้นฉันจะไม่ได้รับข้อผิดพลาด linker เพิ่มเติมจากฟังก์ชั่นที่ไม่มีอยู่ที่อ้างอิงโดยห้องสมุด GLU?
Codesmith

@AUTO GLU ไม่จำเป็นเลยฉันแค่แตะเสา 10 ฟุตระหว่างคลาสการเขียนโปรแกรมกราฟิก (เราต้องใช้รหัสที่ไม่สนับสนุนมันเจ็บปวดมาตรฐานเปลี่ยนเร็วกว่าโปรแกรมบทเรียนฉันเดา) มันเป็นเพียงห้องสมุดที่ช่วยในเรื่องรหัสที่เลิกใช้แล้ว หากคุณมีรหัสของคุณตั้งค่ากับ GLU ก็อาจจะมีกลิ่นเหม็น
dreta

1

คำถามนี้ถูกถามมานานแล้ว แต่ฉันหวังว่านี่จะช่วยคนที่มีคำถามแบบเดียวกับคุณ

ฉันได้เริ่มต้นกับ OpenGL โดยอ่าน minibook arcsynthesis.orgบน ไม่แน่ใจว่าใครเป็นคนเขียน ดูเหมือนว่าการลงทะเบียนของเว็บไซต์ได้ผ่านพ้นไปหรืออะไร แต่คุณควรจะสามารถที่จะหาได้ที่นี่: http://web.archive.org/web/20140209181347/http://www.arcsynthesis.org/gltut/ มันใช้ OpenGL 3.3 ดังนั้นคุณจะใช้ท่อส่งที่ทันสมัยและการปฏิบัติทั้งหมดที่เกี่ยวข้อง แต่คุณจะไม่ได้สัมผัสกับ tessellation หรือคำนวณเฉดสี

มูลค่าเว็บไซต์อื่นมองที่เป็นhttps://open.gl/ ดูเหมือนว่าจะมุ่งเน้นไปที่ผู้เริ่มต้นมากและไม่ได้ครอบคลุมสิ่งต่าง ๆ ในเชิงลึกเหมือนกับเนื้อหาข้างต้น แต่อาจเป็นจุดเริ่มต้นที่ดีสำหรับผู้ที่เพิ่งเริ่มต้น

อย่าลืมอ่านวิกิ OpenGL และ google ชื่อฟังก์ชันของคุณหากคุณต้องการความช่วยเหลือ หน้าบางหน้าใน wiki นั้นไร้ประโยชน์อย่างสมบูรณ์ แต่หน้าอื่น ๆ ค่อนข้างมีประโยชน์ทั้งในการอ้างอิงและเป็นสื่อการเรียนรู้


1
บุคคลที่กล่าวถึงในคำตอบที่ยอมรับเขียนว่า Nicol Bolas - gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey

0

บทเรียนเก่า ๆ เหล่านี้ยังคงเกี่ยวข้องกับผู้เริ่มต้น ที่จริงแล้วฉันขอแนะนำให้เริ่มจากตรงนั้นมากกว่ากับ OpenGL เวอร์ชันล่าสุด รุ่นที่ใหม่กว่าได้ทิ้งวิธีการวาดรูปเรขาคณิตที่ง่ายกว่า (เช่นการวาดโหมดในทันที)

ด้วยเวอร์ชันล่าสุดคุณต้องเตรียมและส่งอาร์เรย์ของจุดยอดและบอกการ์ดวิดีโอว่าการจัดเรียงของจุดยอดในอาร์เรย์ที่คุณให้นั้นเป็นอย่างไร สิ่งเหล่านี้ยุ่งยากในการแก้ไขข้อบกพร่อง

บางรุ่น (คือ OpenGL ES 2.x) กำหนดให้คุณต้องให้สมการแสงของคุณเอง (ในรูปแบบของ Fragment Shaders) และแปลงข้อมูลจุดสุดยอดของคุณเองเพื่อให้มันจบลงบนหน้าจอที่คุณต้องการ (Vertex Shaders) นี่เป็นการยากที่จะดีบั๊กและไม่มีที่สำหรับผู้เริ่มต้น (ในความคิดของฉัน)

ดังนั้นฉันขอแนะนำให้คุณกลับไปที่ NeHe tutorials (เป็นต้น) แล้วเริ่มต้นใหม่ อาจเป็น "ล้าสมัย" แต่ก็ยังใช้งานได้ เมื่อคุณเริ่มเข้าใจสิ่งที่เกิดขึ้นจริงในขั้นตอนการเรนเดอร์ใน OpenGL และทำความเข้าใจกับแนวคิดทางคณิตศาสตร์บางอย่างที่ทำให้สิ่งเหล่านี้ใช้งานได้ เรนเดอร์ใน OpenGL


จริงๆแล้วพวกเขาไม่ทำงาน นั่นเป็นเหตุผลที่ฉันโพสต์คำถามนี้ พวกเขาใช้ฟังก์ชัน gluPerspective ซึ่งเลิกใช้แล้วและไม่มีสิ่งใดทดแทน
Codesmith

1
นั่นไม่ใช่ฟังก์ชั่น OpenGL มันเป็นฟังก์ชั่นยูทิลิตี้แยกจากห้องสมุดอื่น คุณสามารถค้นหารหัสได้อย่างง่ายดาย - มันไม่ยากมาก
notlesh

ขอขอบคุณ แต่ฉันพบว่ามีสิ่งทดแทนที่ไม่สมบูรณ์ซึ่งฉันไม่ทราบวิธีใช้ ยอมรับอาร์กิวเมนต์ "matrix * float" ในขณะที่ตัวเก่าใช้ matrix ภายในบางตัว ฉันจะทำอะไรให้มัน
Codesmith

การใช้ google เป็นครั้งแรกสำหรับ "การใช้งาน gluPerspective" นั้นเป็นสิ่งที่คุณต้องการอย่างแท้จริง มันเรียก glFrustum ซึ่งไม่สามารถใช้ได้ในบางรุ่นล่าสุดของ OpenGL (ES 2.x ไม่รวม) แม้แต่สิ่งนั้นก็ไม่ยากเกินไปที่จะค้นหาคำว่า
notlesh

0

อย่างที่คนอื่นพูดกันหนังสือส่วนใหญ่ถูกคัดค้านหรือล้ำสมัยเกินไป อย่างไรก็ตามฉันขอแนะนำ SuperBible รุ่นที่ 5 แต่เพื่อให้ได้ภาพรวมอย่างรวดเร็วของสิ่งที่สามารถทำได้ใน OpenGL และทำความคุ้นเคยกับสิ่งต่าง ๆ เช่นมุมมอง / การฉายภาพเป็นต้น

การดำน้ำใน OpenGL ที่ทันสมัยในทันทีอาจทำให้คุณรู้สึกท่วมท้นในตอนแรกดังนั้นให้ลองเรียนรู้ที่จะทำสิ่งพื้นฐานบางอย่างในเวอร์ชันที่เลิกใช้แล้วในขณะนี้

ฉันต้องการเพิ่มเว็บไซต์ที่มีบทเรียนที่ดีฉันพบเมื่อเร็ว ๆ นี้ http://ogldev.atspace.co.uk/


ขอบคุณฉันจะตรวจสอบการสอนนั้น แต่เพื่อใช้ OpenGL SuperBible คำถามของฉันยังคงอยู่: ฉันจะแก้ไข GLU ได้อย่างไรเนื่องจาก freeglut อ้างอิงจากมัน
Codesmith

@AUTO: FreeGLUT ไม่ใช่ "อิงจาก" GLU ฟังก์ชัน FreeGLUT บางตัวเรียก GLU แต่ถ้าคุณไม่เรียกฟังก์ชันเหล่านั้นคุณจะไม่มีปัญหา
Nicol Bolas

แต่เป็นไปได้หรือไม่ที่SuperBible จะเรียกใช้ฟังก์ชันเหล่านี้ และถ้ามันไม่ฉันไม่สามารถ ใช้ มัน
Codesmith

จริงๆแล้วความคิดเห็นของฉันคือการไม่รบกวนรหัสแหล่งที่มาพร้อมกับ SuperBible อ่าน แต่พยายามทำทุกอย่างตั้งแต่เริ่มต้น ในปัญหาของคุณกับ GLU การคาดเดาที่ดีที่สุดของฉันคือคุณไม่ได้กำหนดค่า / ติดตั้งไลบรารีของคุณอย่างถูกต้อง ดาวน์โหลด MinGW เวอร์ชั่นล่าสุด ดาวน์โหลดเวอร์ชันล่าสุดของ freeglut แล้วคอมไพล์มันหรือหาไลบรารี่ที่รวบรวมไว้ล่วงหน้า อย่างไรก็ตามคุณควรเริ่มเรียนรู้บางสิ่งมากกว่าใช้เวลากับการวางแผนว่าจะเริ่มอย่างไร
Grieverheart

@AUTO: ทำไม SuperBible ถึงเรียกพวกเขาว่าทำไม ถ้ามันเรียกพวกเขาว่ารหัสของ SuperBible จะไม่ทำงาน นี่คือเหตุผลที่มันไม่ได้เรียกพวกเขา
Nicol Bolas

0

arcsynthesis.org (เว็บไซต์ที่กล่าวถึงในคำตอบที่ยอมรับได้) น่าจะเป็นเรื่องที่น่าเสียดาย (แก้ไข: มันมีอยู่ที่ลิงค์นี้ !)

บทเรียนของ Anton Gerdelan สำหรับ OpenGL 4 นั้นสามารถอ่านได้และทันสมัยจนถึงกลางปี ​​2014 มีสองสามคนแรกฟรีส่วนที่เหลือมีอยู่ในอเมซอนที่ซึ่งพวกเขามีรีวิวที่ยอดเยี่ยมในราคาที่ไม่แพง จนถึงตอนนี้ฉันก็พอใจแล้ว

มีบางบทเรียนฟรีมากขึ้นสำหรับ OpenGL 3.3 หรือสูงกว่าอยู่ที่http://www.opengl-tutorial.org/ พวกเขาย้อนหลังไปถึงปี 2012 แต่อาจเป็นวัสดุเสริมที่ดีสำหรับแหล่งอื่น


OGLDev เป็นปัจจุบันในเชิงลึกและฟรี ogldev.atspace.co.uk/index.html
Yattabyte


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