OpenGL è appropriato per i giochi 2D?


44

Mi sto insegnando da tempo la libreria OpenGL e voglio iniziare a fare un gioco. Tuttavia, per un'introduzione più semplice, voglio iniziare con qualcosa di 2D, come un gioco in stile Pokemon dall'alto verso il basso.

È un buon piano o OpenGL è stato creato appositamente per il 3D?



Penso che uno dei vantaggi dell'utilizzo di OpenGL per 2D sia il vantaggio degli shader. Questi potrebbero essere utili per ottenere effetti speciali. Un altro vantaggio è che se conosci già OpenGL, avrai già familiarità con l'API.
Lysol,

Risposte:


44

OpenGL è abbastanza appropriato per i giochi 2D. Sebbene sia generalmente utilizzato per il 3D, la stessa funzionalità può essere utilizzata per i giochi 2D. Vale a dire, tutto ciò che puoi fare con 3D OpenGL sarà applicabile con OpenGL "2D".

Alcune ulteriori informazioni sono disponibili in questa posizione .

2D OpenGL è realizzato nello stesso modo di 3D OpenGL. OpenGL 2D è solo l'applicazione di una tecnica, ovvero il rendering della scena su un piano piatto, quindi l'utilizzo e la proiezione ortografica invece di una proiezione prospettica, che, a seconda della configurazione, potrebbe distorcere la scena.

Un esempio:

Orto vs prospettiva

(a) è una scena in una proiezione ortografica. (b) è la stessa scena, usando una proiezione prospettica. In un gioco 2D, ciò può causare un errato posizionamento degli sprite se la loro profondità è alterata (il che, a seconda di come si procede allo sviluppo, potrebbe essere il caso). L'uso di una proiezione prospettica rende anche più difficile l'allineamento delle cose nelle coordinate dello schermo.

Inoltre, OpenGL offre molti, molti, molti vantaggi. In primo luogo, l'accelerazione hardware è un grande vantaggio. Esiste anche un controllo molto più preciso su ciò che fa la scheda grafica e su come funziona, consentendo ottimizzazioni specifiche del caso


Grazie mille! Volevo solo la conferma che sarebbe stato bene farlo.
w4etwetewtwet,

4
Se hai l'attitudine e l'interesse per usare OpenGL per 2D, ti porterà molti premi che solo OpenGL può dare. Prestazioni straordinarie, compatibilità multipiattaforma ... Pensaci in questo modo. Quasi tutte le altre scelte per il 2D sarebbero comunque basate su OpenGL. È una grande opportunità per eliminare alcuni "intermediari"
Steven Lu,

2
@StevenLu e per non parlare del fatto che è un po 'più un vero programmatore
Esci il

Ottima lettura! Grazie per averlo collegato. Sì: codificare il tuo 2D con OpenGL dritto è solo più tosto, quindi è per questo che dovresti farlo.
Steven Lu,

1
Dovresti fornire maggiori informazioni a questa risposta piuttosto che solo un link. Forse spiega perché GL funziona per il 2D (viste ortografiche) e quali vantaggi porta (accelerazione hardware, effetti shader).
Sean Middleditch,

22

OpenGL come afferma il nome è una libreria grafica. Sebbene sia stato sviluppato pensando a 3d, nella libreria non ci sono presupposti hardcoded che utilizzerai 3d. Inoltre, grazie alle sue capacità 3D, molte cose che sarebbero difficili da fare in un approccio strettamente 2D sono banali. Esempi:

  • L'ordinamento Z è semplificato utilizzando le coordinate 3d del buffer di profondità (attenzione alla trasparenza però)
  • la rotazione e il ridimensionamento dello sprite sono fondamentalmente gratuiti in quanto si utilizzano quadratini strutturati indipendenti dalla risoluzione
  • se sei disposto a limitarti alle schede grafiche compatibili con OpenGL 2.0 puoi approfittare degli shader, il che semplifica molto la scrittura di effetti speciali (sfocature, effetti particellari, manipolazione delle immagini, sostituzione del colore) - per non parlare del fatto che sarà molto più veloce del lato CPU

Questi sono solo alcuni dei vantaggi che provengono dalla cima della mia testa, immagino ce ne siano molti altri.


3
Ti preghiamo di limitarti alle schede grafiche compatibili con OpenGL 2.0 (o successive), OpenGL 2.0 è stato rilasciato nel 2004, anche se è piuttosto obsoleto.
Slicedpan,

@Slicedpan, purtroppo alcuni laptop / netbook sono ancora dotati di schede Intel che hanno il supporto GL 1.4 max - personalmente ho deciso di abbandonarli, ma alcune persone (specialmente quando si creano giochi semplici) potrebbero volerli supportare.
Kornel Kisielewicz,

16

Mentre OpenGL è un'API 3D, puoi comunque usarla per creare giochi 2D. Puoi simulare un ambiente 2D in 3D attraverso varie tecniche, come la contrapposizione di dati a un piano.

Tuttavia, nell'API attuale esiste un supporto limitato per farlo in modo ovvio (ad esempio non esiste la funzione "Attiva modalità 2D"). I modi in cui lo simuleresti (che puoi trovare in molti tutorial online) possono essere difficili da comprendere appieno senza una certa comprensione della pipeline 3D che viene effettivamente utilizzata sotto il cofano.

Sembra che tu abbia guardato OpenGL per un po 'e quindi probabilmente hai una buona conoscenza di quei fondamenti. Tuttavia, se ti senti traballante, potresti voler iniziare con il tuo gioco utilizzando una libreria 2D costruita su OpenGL, come cocos2d . Ti darà una certa esperienza su come dovrebbero apparire le API 2D e ti offre comunque i vantaggi di un back-end 3D con accelerazione hardware, se ritieni di non essere abbastanza pronto per affrontare tutto da solo.



5

Molte librerie grafiche 2D come SDL o SFML utilizzano l'accelerazione hardware OpenGL. Ciò offre il vantaggio in termini di prestazioni di OpenGL, ma estrae i cattivi dettagli di basso livello dietro un'API molto più semplice.


0

Ora ho molta esperienza nella programmazione OpenGl e posso dirti che è una seccatura. In passato, quando ho iniziato a programmare, ero molto produttivo in ambienti semplici come BlitzBasic. Quindi ho iniziato ad andare al passo successivo con l'apprendimento di C ++ e OpenGl. E quando non hai un buon insegnante o persone da chiedere, ti imbatterai permanentemente nella schermata nera. Il problema più grande è l'inferno di stato di OpenGl. Ci sono tonnellate di interruttori che puoi scambiare per cambiare lo stato di apertura. E alcuni switch dipendono da altri switch. ad esempio glGet (GL_TEXTURE_BINDING_2D) dipende da glGet (GL_ACTIVE_TEXTURE). E la documentazione su quale stato dipende da quale altro stato non è la migliore. Molte operazioni come il caricamento delle trame richiedono di cambiare questo stato che molto spesso porta alla rottura di altro codice che richiede il vecchio stato. E poi c'è questo problema che OpenGl come comportamento dipendente dall'implementazione, in modo che il tuo programma sia eseguito sul tuo computer ma sull'altro computer tutto ciò che vedi è nero. Tutto quello che puoi fare qui è indovinare cosa c'è che non va nelle tue 10000 righe di codice. Quindi, se ti piace la frustrazione, allora sì, usa OpenGl per cose 2D. Per tutte le altre persone, non farlo se non ne hai bisogno. Puoi diventare produttivo in OpenGl, ma ti costerà molto tempo e nervi. Probabilmente più di quello che vuoi spendere. Puoi diventare produttivo in OpenGl, ma ti costerà molto tempo e nervi. Probabilmente più di quello che vuoi spendere. Puoi diventare produttivo in OpenGl, ma ti costerà molto tempo e nervi. Probabilmente più di quello che vuoi spendere.


-2

Unity3D usa OpenGL e io lo uso per platform 2D e 2.5D. Unity3D è essenzialmente un motore di gioco 3D, ma viene utilizzato anche per giochi 2D e 2.5D. Puoi avere piani x, y, z e limitare solo il movimento o la rotazione a 2 di quei piani, creando un'atmosfera 2D essenzialmente in un mondo 3D.


Ottimo, il mio primo voto negativo. Sono contento di vedere che anche Gamedev ha degli odiatori.
SOFTWARE Apollo

1
Immagino che illustrare un punto attraverso esempi del mondo reale sia mal visto. Molto professionale.
SOFTWARE Apollo

7
Amit, i voti negativi non indicano "nemici". I downgrade sono semplicemente un modo per la comunità di esprimere la propria opinione su domande e risposte. Non è personale per te, quindi cerca di non prenderlo in questo modo. Sono d'accordo che il downvoter avrebbe dovuto commentare il motivo del downvote, dal momento che non sai come migliorare la risposta senza feedback. Ti dirò perché penso che sia stato sottoposto a downgrade. Solo perché un individuo usa OpenGL per giochi 2D, non significa nel complesso che sia appropriato. È inoltre necessario fornire ragioni sul perché sia appropriato.
MichaelHouse

2
Sì, non sono sicuro del motivo per cui le persone effettuano il downvoting; il bit "usa OpenGL" che ho sentito dovrebbe essere chiarito con "usa OpenGL su piattaforme che lo richiedono" (usa Direct3D o API specifiche della console ovunque tranne iOS / Anrdoid / OSX / Linux), ma questo è più un chiarimento che una correzione.
Sean Middleditch,

1
Non mi sono sottovalutato, ma un altro motivo per cui questa risposta è inappropriata è perché stai usando un motore basato su OpenGL, non OpenGL grezzo, che cambia molto le cose.
w4etwetewtwet,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.