สำหรับเกม 2D มีเหตุผลใดที่จะไม่ใช้ 3D API เช่น Direct3D หรือ OpenGL?


20

ฉันออกจากงานอดิเรกพัฒนาเกมมาระยะหนึ่งแล้ว ย้อนกลับไปเมื่อฉันทำมันคนส่วนใหญ่ใช้ Direct Draw เพื่อสร้างเกม 2D เมื่อถึงเวลาที่ผู้คนหยุดพูดว่า OpenGL หรือ Direct3D ด้วยการฉายภาพฉากฉากเป็นวิธีที่จะไป

ฉันกำลังคิดที่จะกลับไปสู่การสร้างเกม 2 มิติโดยเฉพาะบนโทรศัพท์มือถือ แต่อาจเป็นบนแพลตฟอร์ม XNA เช่นกัน เพื่อให้บางสิ่งบางอย่างโดยใช้ OpenGL ฉันมีเส้นโค้งการเรียนรู้ขนาดเล็ก (ที่หวัง) เพื่อทำให้ฉันคุ้นเคยกับการพัฒนา 3D

มีเหตุผลใดที่จะข้ามไปและทำงานกับเฟรมเวิร์ก 2D ที่ฉันเพิ่งมีบัฟเฟอร์เฟรมความกว้าง x ความสูงฉันต้องเติมพิกเซล?


คำถามนี้ผิดจริง ... ฉันหมายถึง: Direct3D และ OpenGL ไม่ใช่ 3D API จริง ๆ ใช่ไหม? พวกเขากำลังเสนอการเร่งฮาร์ดแวร์ แต่ทั้งใน 2D และ 3D มีความแตกต่างเล็กน้อย
jacmoe

คำตอบ:


20

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

สำหรับเกมของตัวเองฉันสร้างชุดของคลาสสำหรับจัดการกับวัตถุ 2 มิติ ตรรกะเกมของฉันเกี่ยวข้องกับพิกัด x และ y เท่านั้น ชั้นเรียนของฉันจัดการกับสิ่งต่าง ๆ เช่นการหมุนการปรับโหมดการผสมผสาน ฯลฯ ฯลฯ

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


ฉันสนใจที่จะฟังว่า xna จัดการกับ ap 2d ที่อยู่เบื้องหลังอย่างไร
Iain

5
มันคือทั้งหมดของ 3D ในที่สุด Spritebatch การเรนเดอร์แบบ 2D เป็นเอฟเฟกต์ภาพ
drxzcl

+1 สำหรับการแยกอินเทอร์เฟซออกจากการใช้งาน
Steve S

@Iain นี่คือ implimentation XNA ใน DirectX11 เขียนโดยนักเขียน XNA xnatoolkit.codeplex.com
ClassicThunder

8

มีเหตุผลที่จะไม่ใช้ 3D API

เฉพาะคอมพิวเตอร์ใน NA, ฝั่งตะวันตกเฉียงเหนือของสหภาพยุโรปและญี่ปุ่นรองรับ ...

ตัวอย่างเช่นฉันอาศัยอยู่ในบราซิลคอมพิวเตอร์น้องสาวของฉันเป็นรุ่นใหม่มีหน่วยประมวลผลแบบมัลติคอร์หน่วยความจำหลาย GB และยังไม่ได้เรียกใช้เกม OpenGL

ตัวอย่างเช่นฉันสามารถเล่น Dwarf Fortress (ใช้ OpenGL เพื่อแสดงกราฟิก ASCII) บนคอมพิวเตอร์ของฉันเองบนคอมพิวเตอร์เครื่องอื่นที่ฉันพบว่ามันทำงานช้า

และนี่ไม่ใช่ปัญหาเฉพาะกับบราซิลฉันถามคนรอบตัวและมันเป็นเรื่องธรรมดาในหลาย ๆ แห่งของโลก ... ประชากรที่เป็นเจ้าของการ์ดที่รองรับ OpenGL หรือ Direct3D นั้นเป็นชนกลุ่มน้อย ...

เฉพาะที่ชนกลุ่มน้อยนี้ได้รับความสนใจจาก บริษัท มากขึ้น ...

แต่ถ้าคุณกำหนดเป้าหมายเฉพาะตลาด "ดั้งเดิม" เหล่านี้ (NA, Northwest EU, JP) ให้ไปหามัน!

แก้ไขสำหรับ downvoting เหล่านั้น: เห็นได้ชัดว่าคุณไม่เห็นด้วยดังนั้นคุณมีหลักฐานว่าไม่มีใครส่งคอมพิวเตอร์อีกต่อไปกับชิป VIA หรือ SIS (หรือแม้แต่ผู้ผลิตที่ไม่รู้จักหรือแย่ลง) อีกต่อไปโดยไม่มี OpenGL 1.0 รองรับหรือไม่

ฉันมีเครื่องจักรสองเครื่องเช่นนั้นในบ้านของฉันและเป็นของใหม่ (ทั้งคู่มีมากกว่าหนึ่งคอร์ทั้งสองมี RAM 2GB, ทั้งคู่มีความถี่สัญญาณนาฬิกามากกว่า 2GHz ... )

มหาวิทยาลัยของฉันมี 200 เครื่องเช่นนั้นแม้บางเครื่องที่ Dell สร้างขึ้น

มันเรียบง่ายอย่างชัดเจน GPUs มีราคาแพง (แม้แต่เส็งเคร็ง Intel) และในตลาดที่ยากจนมันเป็นความหรูหราผู้ที่ซื้อเครื่องเพื่อใช้งาน MS Word และอ่านอีเมลจะไม่ซื้อเครื่องที่มีชิปกราฟิกที่เหมาะสมเมื่อ พวกเขาสามารถซื้อที่ถูกกว่า 50 USD โดยเฉพาะเมื่อ 50 USD เป็นสิ่งที่คนส่วนใหญ่ต้องซื้ออาหารตลอดทั้งเดือน

โปรดอย่ามาที่นี่โดยบอกว่าฉันกำลังพูด BS ถ้าคุณไม่เคยไปเที่ยวประเทศโลกที่สามและอย่าบอกว่าคนในประเทศโลกที่สามไม่เล่นเกมพวกเขาทำกันเยอะ Osmos นักพัฒนาโพสต์เกี่ยวกับการเปิดตัวลินุกซ์เวอร์ชั่นของพวกเขาชี้ให้เห็นว่าการรับส่งข้อมูลขาเข้าจำนวนมาก (ที่จริงแล้วส่วนใหญ่) มาจากรัสเซียโดยชัดแจ้งเพราะคนเหล่านั้นมักถูกเพิกเฉย

ที่นี่ในบราซิลเกมที่ได้รับความนิยมมากที่สุดคือ Counter-Strike ซึ่งทำงานในโหมดซอฟต์แวร์ ... Lan-Houses บางเครื่องมีเพียง 10% ของเครื่องจักรที่มี GPU แม้แต่เกมใหญ่ที่มี 200 หรือ 300 สถานี ...

ฉันไม่ควรโพสต์ข้อความนี้ฉันรู้ว่ามันจะดึงดูดการลงคะแนนฉันเสียคะแนนในการโพสต์นี้ทุกครั้งที่ฉันอธิบายว่าเพราะเหตุใดเกมอื่นของฉันจึงใช้ Allegro 4.4 แทน 5.0 เพราะ 5.0 ไม่สนับสนุน Direct Draw หรือ โหมดซอฟต์แวร์ฉันได้รับสะเก็ดระเบิดมากมายจากผู้คนจำนวนมากบอกว่าฉันเป็นคนโกหกหรือว่าฉันโง่ที่พูดความจริงนี้เกี่ยวกับความพร้อมใช้งานจริงของการเร่งความเร็ว OpenGL

แก้ไข 2: เพื่อให้สามารถเล่นและพัฒนาเกมที่มี OpenGL ได้ฉันต้องขอให้พ่อแม่และผู้อื่นซื้อ GeForce 8600 (นั่นเป็นการ์ดที่ถูกที่สุดที่ฉันพบว่ายังสามารถใช้งาน Mass Effect 1 และ UT3 อื่น ๆ ได้ -engine games) พวกเขาซื้อมาให้ฉัน แต่ตอนนี้ฉันเป็นเวลาหลายปีโดยที่ไม่ได้รับของขวัญอื่นอีกเลยแม้แต่ของขวัญวันเกิดเพราะมันแพงแค่ไหนและฉันหวังว่าการ์ดใบนี้จะทำงานได้นานกว่า 3 หรือ 4 ปี ...

แก้ไข 3:
ตัวอย่าง pratical: Eletronic Arts สร้างไคลเอนต์ใหม่สำหรับ Ultima Online ที่ใช้การเร่งความเร็ว 3 มิติสำหรับกราฟิก 2 มิติ ... ผล: ผู้เล่นจำนวนมากบ่นว่า framerates ที่ต่ำมากและ EA สำรองข้อมูลในการตัดสินใจบังคับใช้ ลูกค้าใหม่ (ตอนนี้ได้รับอนุญาตให้ยังคงใช้ลูกค้าเก่า)

EDIT 4 ในปี 2015: คำตอบนี้จะถูกทิ้งไว้ที่นี่ส่วนใหญ่เป็นสิ่งประดิษฐ์ทางประวัติศาสตร์ปัจจุบันจำนวนคอมพิวเตอร์ที่มีชิปเส็งเคร็งมากอยู่ในระดับต่ำแม้ในประเทศโลกที่สามพวกเขายังคงมีอยู่โดยเฉพาะในคอมพิวเตอร์ที่ใช้งานในสำนักงาน ที่พบบ่อยอีกต่อไปฉันไม่คิดว่ามันคุ้มค่าที่จะทำงานกับ API โหมดซอฟต์แวร์อีกต่อไป API ที่ใช้ OpenGL เป็นวิธีที่จะดำเนินการในตอนนี้


3
วันนี้ไม่มีชิปที่ไม่รองรับ 3D มีแนวโน้มมากที่คุณเพียงแค่ต้องอัพเดทไดรเวอร์เพราะไดรเวอร์ที่ Windows เตรียมไว้ไม่รองรับ OpenGL crap GPU ที่พบมากที่สุดคือสิ่งที่ Intel GMA และแม้กระทั่งว่ามีการสนับสนุน OpenGl พื้นฐาน
Axel Gneiting

1
ทำซ้ำอีกครั้ง: ชิปที่นี่แย่กว่า Intel GMA ทุกอย่าง และใช่ไดรเวอร์บางตัวที่แก้ไขจะแก้ปัญหาได้ แต่คุณไม่สามารถคาดหวังให้ผู้ใช้รู้ได้
speeder

ตัวอย่างเชิงปฏิบัติ: Eletronic Arts สร้างไคลเอนต์ใหม่สำหรับ Ultima Online ที่ใช้การเร่งความเร็วแบบ 3 มิติสำหรับกราฟิก 2D ของมัน ... ผล: ผู้เล่นจำนวนมากบ่นว่า framerates ที่ต่ำมากและ EA สำรองข้อมูลในการตัดสินใจบังคับใช้ลูกค้าใหม่ (ตอนนี้ได้รับอนุญาตให้ใช้งานแบบเก่าได้)
speeder

1
ลูกค้าใหม่มาจากปี 2008 สิ่งที่ฉันพูดคือ: ผู้คนในปี 2008 ไม่ชอบไคลเอนต์ OpenGL และเปลี่ยนกลับไปใช้ 1997
speeder

1
เพียงเพราะคนไม่อัปเดตไดรเวอร์ไม่ได้หมายความว่าคอมพิวเตอร์ไม่รองรับ OpenGL และ Direct3D OP ควรตรวจสอบความเข้ากันได้ของ OpenGL / Direct3D ถ้าไม่มีเขาควรบอกผู้ใช้ให้อัปเดตไดรเวอร์ของเขา สิ่งนี้จะได้ผลใน 98.6% ของคดีทั้งหมดแม้กระทั่งในโลกที่สองและสาม อย่างจริงจังแม้ว่าคุณสามารถเชื่อมโยงไปยังคอมพิวเตอร์ที่คุณสามารถซื้อที่ขาดการสนับสนุน OpenGL / Direct3D?
Avi

3

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

โอบกอด 3d และรักมัน แต่รักมันด้วยแกนที่น้อยลงหนึ่งแกน


2

โดยทั่วไป 3D APIs เป็นวิธีที่จะไป GPU ของวันนี้ได้รับการออกแบบมาเพื่อแสดงกราฟิก 3 มิติดังนั้นคุณจึงรับประกันได้ถึงประสิทธิภาพที่มั่นคง และอย่างที่ ZorbaTHut บอกไว้การไปตามเส้นทาง 3 มิติช่วยให้คุณได้รับประโยชน์จากสิ่งต่าง ๆ เช่นพิกเซลที่น่ากลัว

จริงๆแล้วมี API แบบ 2D จำนวนไม่มาก DirectDraw เลิกใช้แล้วและห้องสมุด 2D / vector ส่วนใหญ่ใช้ OpenGL หรือ Direct3D เพื่อทำการเรนเดอร์ แม้แต่ชุดเครื่องมือ UI ที่ทันสมัยก็ใช้ประโยชน์จาก API แบบสามมิติเพื่อทำการเรนเดอร์และการจัดองค์ประกอบภาพ ใช้ WPF (กรอบงาน UI ล่าสุดของ Microsoft) ตัวอย่างเช่นใช้ Direct3D สำหรับการเรนเดอร์


2

ยังคงมีเครื่องเก่าจำนวนมากที่น่าแปลกใจที่มีการเร่งความเร็วแบบเส็งเคร็ง / ไม่มีตัวตนและไดรเวอร์ที่ไม่เคยได้รับการอัปเดตเช่นการใช้ DirectDraw จะยังคงเร็วกว่า OpenGL หรือ D3D ฉันพบสิ่งนี้ในขณะที่ทำงานกับเกมมัลติเพลเยอร์ 2d ที่อายุประมาณ 10 ปีตอนนี้เมื่อฉันพยายามเขียนแบ็กเอนด์เรนเดอร์ใหม่ใน OpenGL เพื่อรองรับแพลตฟอร์มอื่น ๆ ผู้เล่นหลายคนรายงานว่าโหมด OpenGL ไม่สามารถเล่นได้เนื่องจากอัตราเฟรมต่ำ ฉันจะเห็นด้วยกับโปสเตอร์ของบราซิลว่านี่เป็นเรื่องธรรมดานอกสหรัฐอเมริกาและยุโรป แต่ก็ยังคงเป็นจริงในที่เหล่านั้นเช่นกัน

หากคุณกำหนดเป้าหมายไปยังโทรศัพท์มือถือหรือ XNA ให้ใช้ 3D อย่างแน่นอน แต่ถ้าคุณต้องการสร้างเกมที่ทำงานบนพีซีเครื่องใดก็ได้ฉันจะบอกว่าติดกับ DDraw


1

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

ที่กล่าวว่าการใช้กราฟิก 3D back-end ดูเหมือนว่าจะมี Upside มากกว่า downside ดังนั้นถ้าคุณถามฉันมันคุ้มค่ากับความพยายาม


1

หากเกมของคุณง่ายพอและคุณต้องการให้เกมทำงานได้ดีบนเครื่องระดับล่างโดยเฉพาะเน็ตบุ๊กและแล็ปท็อปรุ่นเก่า (โดยไม่มีการเร่งความเร็ว 3 มิติหรือน้อยมาก - กราฟิกแบบรวมของ Intel ที่เก่ากว่าเป็นต้น) วิธี framebuffer 2D

หากคุณมีความสุขสำหรับเกมที่ต้องการการ์ด / ชิป ATi / NVidia ต่ำสุดอย่างต่ำการใช้ 3D API จะช่วยให้คุณทำสิ่งดีๆมากมาย (อัลฟาผสมการปรับ / หมุน ฯลฯ ) จะเป็นเรื่องยากที่จะทำได้ดี / มีประสิทธิภาพในซอฟต์แวร์ตัวแสดงที่แท้จริง

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

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

แต่โดยทั่วไปฮาร์ดแวร์ 3 มิตินั้นยอดเยี่ยมและการผสมสารเติมแต่งคือเพื่อนของคุณ :)

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