OpenGL เหมาะสมกับเกม 2D หรือไม่?


43

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

นี่เป็นแผนที่ดีหรือเป็น OpenGL ที่สร้างขึ้นเป็นพิเศษสำหรับ 3D หรือไม่?



ฉันคิดว่าประโยชน์อย่างหนึ่งที่ใช้กับ OpenGL สำหรับ 2D คือคุณได้รับประโยชน์จากความแตกต่าง สิ่งเหล่านี้อาจมีประโยชน์สำหรับการบรรลุเทคนิคพิเศษ ประโยชน์อีกอย่างคือถ้าคุณรู้จัก OpenGL แล้วคุณจะคุ้นเคยกับ API
Lysol

คำตอบ:


43

OpenGL ค่อนข้างเหมาะสมสำหรับเกม 2D แม้ว่าโดยทั่วไปจะใช้สำหรับ 3D แต่ฟังก์ชันเดียวกันนี้สามารถใช้กับเกม 2D ได้ กล่าวคืออะไรก็ตามที่คุณสามารถทำได้ด้วย 3D OpenGL จะสามารถใช้งานได้กับ "2D" OpenGL

สามารถดูข้อมูลเพิ่มเติมบางอย่างได้ที่ตำแหน่งนี้

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

ตัวอย่าง:

Ortho เทียบกับมุมมอง

(a) เป็นฉากในการฉายภาพออโทกราฟ (b) เป็นฉากเดียวกันโดยใช้การฉายภาพมุมมอง ในเกม 2 มิติสิ่งนี้อาจทำให้ตำแหน่งของสไปรต์ผิดพลาดได้หากมีการเปลี่ยนแปลงความลึก (ซึ่งขึ้นอยู่กับการพัฒนาของคุณ การใช้การฉายภาพเปอร์สเปคทีฟยังทำให้การจัดตำแหน่งสิ่งต่าง ๆ ในพิกัดหน้าจอทำได้ยากขึ้น

นอกจากนี้ OpenGL ยังมีประโยชน์มากมายมากมาย ในขั้นต้นการเร่งด้วยฮาร์ดแวร์เป็นข้อดีอย่างมาก นอกจากนี้ยังมีการควบคุมในระดับที่ดีกว่าในสิ่งที่กราฟิกการ์ดทำและวิธีการที่เกี่ยวข้อง


ขอบคุณมาก! ฉันแค่ต้องการการยืนยันว่าจะทำได้
w4etwetewtwet

4
หากคุณมีความถนัดและสนใจที่จะใช้ OpenGL สำหรับ 2D มันจะทำให้คุณได้รับผลตอบแทนมากมายที่ OpenGL เท่านั้นที่สามารถให้ได้ ประสิทธิภาพที่เพิ่มขึ้นความเข้ากันได้ข้ามแพลตฟอร์ม ... ลองคิดดูด้วยวิธีนี้ ตัวเลือกอื่น ๆเกือบทั้งหมดสำหรับ 2D จะถูกสร้างขึ้นบน OpenGL ต่อไป เป็นโอกาสที่ดีในการตัด "พ่อค้าคนกลาง" บางคนออกไป
Steven Lu

2
@StevenLu และไม่พูดถึงการเป็นโปรแกรมเมอร์จริง
Outurnate

ยอดเยี่ยมอ่าน! ขอขอบคุณที่เชื่อมโยง Yup: การเขียนโค้ด 2D ของคุณด้วย OpenGL แบบตรงนั้นเป็นสิ่งที่เลวร้ายกว่าดังนั้นนี่คือเหตุผลที่คุณควรทำ
Steven Lu

1
คุณควรให้ข้อมูลเพิ่มเติมกับคำตอบนี้ไม่ใช่เพียงแค่ลิงค์ อาจอธิบายได้ว่าทำไม GL จึงทำงานกับ 2D (มุมมอง orthographic) และประโยชน์ที่จะได้รับ (การเร่งด้วยฮาร์ดแวร์
Sean Middleditch

21

OpenGL เนื่องจากชื่อคือไลบรารีกราฟิก แม้ว่ามันจะถูกพัฒนาขึ้นโดยคำนึงถึง 3 มิติ แต่ก็ไม่มีข้อสันนิษฐานฮาร์ดโค้ดในห้องสมุดที่คุณจะใช้ 3d ยิ่งไปกว่านั้นด้วยความสามารถแบบ 3 มิติสิ่งต่าง ๆ ที่ยากที่จะทำในแนวทาง 2d อย่างเข้มงวดนั้นเป็นเรื่องเล็กน้อย ตัวอย่าง:

  • การจัดเรียง Z ทำได้ง่ายขึ้นโดยใช้พิกัด 3 มิติบัฟเฟอร์ความลึก (ระวังความโปร่งใส)
  • การหมุนและการปรับสไปรต์นั้นโดยทั่วไปนั้นฟรีเพราะคุณใช้ล่ามที่มีพื้นผิวซึ่งไม่ขึ้นกับความละเอียด
  • หากคุณยินดีที่จะ จำกัด ตัวเองกับกราฟิกการ์ดที่มีความสามารถของ OpenGL 2.0 คุณสามารถใช้ประโยชน์จากเฉดสีซึ่งจะทำให้การเขียนเอฟเฟกต์พิเศษทำได้ง่ายขึ้น (พร่าเลือน, ผลกระทบจากอนุภาค, การจัดการรูปภาพ, การเปลี่ยนสี) เร็วกว่า CPU-side มาก

นี่เป็นเพียงไม่กี่ข้อได้เปรียบที่มาจากด้านบนของหัวของฉันฉันเดาว่ามีอีกหลายคน


3
โปรด จำกัด ตัวเองให้ใช้การ์ดกราฟิกที่มีความสามารถของ OpenGL 2.0 (หรือสูงกว่า) OpenGL 2.0 ซึ่งเปิดตัวในปี 2547 แม้จะเป็นรุ่นที่ล้าสมัยไปแล้วก็ตาม
Slicedpan

@Slicedpan แต่น่าเสียดายที่แล็ปท็อป / เน็ตบุ๊คบางรุ่นยังคงมาพร้อมการ์ด Intel ที่มีการสนับสนุน GL 1.4 สูงสุด - โดยส่วนตัวฉันตัดสินใจทิ้งไว้ แต่บางคน (โดยเฉพาะเมื่อทำเกมง่ายๆ) อาจต้องการการสนับสนุน
Kornel Kisielewicz

16

ในขณะที่ OpenGL เป็น 3D API คุณยังสามารถใช้เพื่อสร้างเกม 2D ได้ คุณสามารถปลอมสภาพแวดล้อม 2D ในแบบ 3 มิติด้วยเทคนิคต่าง ๆ เช่นการควบคุมข้อมูลไปยังระนาบ

อย่างไรก็ตามมีการสนับสนุนที่ จำกัด ใน API จริงสำหรับการทำสิ่งนี้อย่างชัดเจน (ไม่มีฟังก์ชั่น "เปิดโหมด 2D" เป็นต้น) วิธีที่คุณต้องการจำลอง (ซึ่งคุณสามารถหาได้จากบทเรียนออนไลน์มากมาย) อาจเป็นเรื่องยากที่จะเข้าใจอย่างสมบูรณ์โดยไม่ต้องทำความเข้าใจกับท่อ 3D ที่ใช้งานจริงภายใต้ประทุน

ดูเหมือนว่าคุณได้ดู OpenGL มาระยะหนึ่งแล้วและอาจเข้าใจพื้นฐานเหล่านั้นได้ดี แต่ถ้าคุณรู้สึกสั่นคลอนกับพวกเขาคุณอาจต้องการที่จะเริ่มต้นกับเกมของคุณโดยใช้ห้องสมุด 2D ที่ถูกสร้างขึ้นบน OpenGL เช่นCocos2d มันจะให้ประสบการณ์บางอย่างกับ 2D API ที่ควรมีลักษณะโดยทั่วไปและยังทำให้คุณได้รับประโยชน์จากแบ็คเอนด์ 3D ที่เร่งด้วยฮาร์ดแวร์ถ้าคุณรู้สึกว่าคุณยังไม่พร้อมที่จะจัดการกับสิ่งทั้งหมดด้วยตัวคุณเอง



4

ห้องสมุดกราฟิก 2d จำนวนมากเช่นSDLหรือSFMLใช้ประโยชน์จากการเร่งด้วยฮาร์ดแวร์ OpenGL สิ่งนี้จะช่วยให้คุณได้รับประโยชน์ด้านประสิทธิภาพของ OpenGL แต่สรุปรายละเอียดที่น่ารังเกียจในระดับต่ำกว่า API ที่ง่ายกว่ามาก


0

ตอนนี้ฉันมีประสบการณ์มากมายในการเขียนโปรแกรม OpenGl และฉันสามารถบอกคุณได้ว่ามันเป็นความเจ็บปวด ในอดีตเมื่อฉันเริ่มเขียนโปรแกรมฉันมีประสิทธิผลมากในสภาพแวดล้อมที่เรียบง่ายเช่น BlitzBasic จากนั้นฉันก็เริ่มเข้าสู่ขั้นตอนต่อไปด้วยการเรียนรู้ C ++ และ OpenGl และเมื่อคุณไม่มีครูที่ดีหรือคนถามคุณจะวิ่งเข้าไปในหน้าจอสีดำอย่างถาวร ปัญหาที่ใหญ่ที่สุดคือสถานะของ OpenGl มีสวิตช์มากมายที่คุณสามารถสลับเพื่อเปลี่ยนสถานะของ OpenGL ได้ และสวิตช์บางตัวขึ้นอยู่กับสวิตช์อื่น ตัวอย่างเช่น glGet (GL_TEXTURE_BINDING_2D) ขึ้นอยู่กับ glGet (GL_ACTIVE_TEXTURE) และเอกสารประกอบที่ขึ้นอยู่กับสถานะอื่นที่ไม่ดีที่สุด การดำเนินการหลายอย่างเช่นการโหลดพื้นผิวต้องการให้คุณเปลี่ยนสถานะนี้ซึ่งมักจะนำไปสู่การแตกหักของรหัสอื่นที่ต้องใช้สถานะเก่า และจากนั้นก็มีปัญหานี้ที่ OpenGl เป็นพฤติกรรมการใช้งานขึ้นอยู่กับการใช้งานเพื่อให้โปรแกรมของคุณทำงานบนเครื่องของคุณ แต่ในเครื่องอื่น ๆ ทั้งหมดที่คุณเห็นเป็นสีดำ สิ่งที่คุณสามารถทำได้ที่นี่คือการเดาว่ามีอะไรผิดปกติในโค้ด 10,000 บรรทัด ดังนั้นถ้าคุณชอบความหงุดหงิดใช่แล้วใช้ OpenGl สำหรับสิ่ง 2 มิติ สำหรับคนอื่น ๆ อย่าทำถ้าคุณไม่ต้องการมัน คุณสามารถทำงานได้อย่างมีประสิทธิภาพใน OpenGl แต่มันจะทำให้คุณเสียเวลาและความกังวลใจ มีความเป็นไปได้มากกว่าที่คุณต้องการใช้จ่าย คุณสามารถทำงานได้อย่างมีประสิทธิภาพใน OpenGl แต่มันจะทำให้คุณเสียเวลาและความกังวลใจ มีความเป็นไปได้มากกว่าที่คุณต้องการใช้จ่าย คุณสามารถทำงานได้อย่างมีประสิทธิภาพใน OpenGl แต่มันจะทำให้คุณเสียเวลาและความกังวลใจ มีความเป็นไปได้มากกว่าที่คุณต้องการใช้จ่าย


-2

Unity3D ใช้ OpenGL และฉันใช้สำหรับ 2D และ 2.5D platformers Unity3D นั้นเป็น 3D Gaming Engine แต่ก็ใช้สำหรับเกม 2D และ 2.5D ด้วยเช่นกัน คุณสามารถมีเครื่องบิน x, y, z และ จำกัด การเคลื่อนไหวหรือการหมุนให้เหลือเพียง 2 ของเครื่องบินเหล่านั้นเท่านั้นสร้างบรรยากาศ 2D ในโลก 3D


เยี่ยมมากโหวตครั้งแรกของฉัน ดีใจที่ได้เห็น gamedev มีความเกลียดชังเช่นกัน
Apollo SOFTWARE

1
ฉันเดาว่าจะแสดงจุดผ่านตัวอย่างในโลกแห่งความจริงที่ขมวดคิ้วอยู่ เป็นมืออาชีพมาก
Apollo SOFTWARE

7
Amit, downvotes ไม่ได้ระบุว่า "เกลียดชัง" Downvotes เป็นเพียงวิธีการที่ชุมชนนำเสนอความคิดเห็นของคำถามและคำตอบ มันไม่ใช่เรื่องส่วนตัวสำหรับคุณดังนั้นพยายามอย่าทำแบบนั้น ฉันยอมรับว่า downvoter ควรให้ความเห็นเกี่ยวกับสาเหตุของ downvote เนื่องจากคุณไม่ทราบวิธีปรับปรุงคำตอบหากไม่มีคำติชม ฉันจะบอกคุณว่าทำไมฉันคิดว่ามันเป็น downvote เพียงเพราะบุคคลหนึ่งใช้ OpenGL สำหรับเกม 2D ไม่ได้หมายความว่าเหมาะสม คุณต้องให้เหตุผลว่าทำไมถึงเหมาะสม
MichaelHouse

2
ใช่ไม่แน่ใจว่าทำไมคนถึงดูถูก บิต "ใช้ OpenGL" ที่ฉันรู้สึกว่าควรชี้แจงด้วย "ใช้ OpenGL บนแพลตฟอร์มที่ต้องใช้" (ใช้ Direct3D หรือ API เฉพาะคอนโซลทุกที่ยกเว้น iOS / Anrdoid / OSX / Linux) แต่นั่นเป็นการชี้แจงที่ชัดเจนกว่าการแก้ไข
Sean Middleditch

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