OpenGL est-il approprié pour les jeux 2D?

44

Je suis moi-même la bibliothèque OpenGL depuis un certain temps et je veux commencer à créer un jeu. Cependant, pour une introduction plus facile, je veux commencer par quelque chose en 2D, tel qu'un jeu descendant de style Pokémon.

Est-ce un bon plan ou OpenGL est-il spécialement conçu pour la 3D?

w4etwetewtwet
la source
Je pense que l’un des avantages de l’utilisation d’OpenGL pour la 2D est que vous bénéficiez des avantages des shaders. Celles-ci pourraient être utiles pour obtenir des effets spéciaux. Un autre avantage est que si vous connaissez déjà OpenGL, vous serez déjà familiarisé avec l'API.
Lysol

Réponses:

44

OpenGL est tout à fait approprié pour les jeux 2D. Bien qu’elle soit généralement utilisée pour la 3D, la même fonctionnalité peut être utilisée pour les jeux 2D. C'est-à-dire que tout ce que vous pouvez faire avec 3D OpenGL sera applicable avec OpenGL "2D".

Quelques informations supplémentaires peuvent être trouvées à cet endroit .

2D OpenGL est réalisé de la même manière que 3D OpenGL. 2D OpenGL n’est que l’application d’une technique, c’est-à-dire le rendu de la scène sur un plan plat, puis l’utilisation d’une projection orthographique au lieu d’une projection en perspective, qui, selon votre configuration, pourrait fausser la scène.

Un exemple:

Ortho vs perspective

(a) est une scène en projection orthographique. (b) est la même scène, en utilisant une projection en perspective. Dans un jeu en 2D, cela peut entraîner un mauvais positionnement des sprites si leur profondeur est modifiée (ce qui, selon votre développement, peut être le cas). L'utilisation d'une projection en perspective rend également plus difficile l'alignement des éléments sur les coordonnées de l'écran.

De plus, OpenGL comporte de très nombreux avantages. L’accélération matérielle est avant tout un énorme avantage. Il existe également un degré de contrôle beaucoup plus précis sur le fonctionnement et la gestion de la carte graphique, permettant ainsi des optimisations spécifiques à chaque cas.

Renvoyer
la source
Merci beaucoup! Je voulais juste avoir la confirmation que ce serait bien de faire cela.
w4etwetewtwet
4
Si vous avez l'aptitude et l'intérêt d'utiliser OpenGL pour la 2D, cela vous apportera de nombreuses récompenses que seul OpenGL peut vous offrir. Des performances époustouflantes, une compatibilité multiplate-forme ... Pensez-y de cette façon. De toute façon, presque tous les autres choix pour la 2D seraient construits sur OpenGL. C'est une excellente occasion de couper quelques "intermédiaires"
Steven Lu
2
@StevenLu et ne pas mentionner, étant un peu plus d'un vrai programmeur
Outurnate
Bonne lecture! Merci d'avoir lié ça. Yup: coder votre 2D avec OpenGL est tout simplement plus dur , c'est pourquoi vous devriez le faire.
Steven Lu
1
Vous devriez fournir plus d'informations à cette réponse plutôt qu'un simple lien. Peut-être peut-être expliquer pourquoi GL fonctionne pour la 2D (vues orthographiques) et quels avantages cela apporte (accélération matérielle, effets de shader).
Sean Middleditch
22

OpenGL, comme son nom l'indique, est une bibliothèque graphique. Bien qu’elle soit développée en 3D, il n’ya pas d’hypothèses codées en dur dans la bibliothèque que vous utiliserez en 3D. De plus, grâce à ses capacités en 3D, plusieurs choses qui seraient difficiles à faire dans une approche strictement en 2D sont triviales. Exemples:

  • Le tri en Z est simplifié en utilisant les coordonnées 3d du tampon de profondeur (attention à la transparence cependant)
  • la rotation et la mise à l'échelle des images-objets sont fondamentalement gratuites, car vous utilisez des quads texturés indépendants de la résolution
  • si vous êtes prêt à vous limiter aux cartes graphiques compatibles OpenGL 2.0, vous pouvez tirer parti des shaders, ce qui simplifiera beaucoup l'écriture d'effets spéciaux (flous, effets de particules, manipulation d'images, substitution de couleurs) - sans oublier de le mentionner. beaucoup plus rapide que fait côté CPU

Ce ne sont que quelques avantages qui me viennent à l’esprit, il y en a plusieurs autres.

Kornel Kisielewicz
la source
3
Veuillez vous limiter aux cartes graphiques compatibles OpenGL 2.0 (ou supérieure), OpenGL 2.0 est sorti en 2004, même s’il est plutôt obsolète.
Slicedpan
@ Slicedpan, malheureusement, certains ordinateurs portables / netbooks sont toujours livrés avec des cartes Intel prenant en charge le niveau de support GL 1.4 max. Personnellement, j'ai décidé de les abandonner, mais certaines personnes (en particulier lors de la création de jeux simples) pourraient vouloir les prendre en charge.
Kornel Kisielewicz
16

OpenGL est une API 3D, mais vous pouvez toujours l'utiliser pour créer des jeux en 2D. Vous pouvez simuler un environnement 2D en 3D à l'aide de diverses techniques, telles que la contention de données dans un plan.

Toutefois, l’API actuelle ne prend en charge que de manière évidente cette opération (il n’existe pas de fonction "activer le mode 2D", par exemple). La manière dont vous la simulez (que vous pouvez trouver dans de nombreux tutoriels en ligne) peut être difficile à comprendre complètement sans une certaine compréhension du pipeline 3D réellement utilisé sous le capot.

Il semble que vous examiniez OpenGL depuis un moment et que vous maîtrisiez donc probablement ces principes fondamentaux. Cependant, si vous vous sentez fragile, vous voudrez peut-être commencer par utiliser une bibliothèque 2D construite sur OpenGL, telle que cocos2d . Cela vous donnera une certaine expérience de ce à quoi les API 2D devraient ressembler et vous procure tout de même les avantages d'un back-end 3D à accélération matérielle, si vous sentez que vous n'êtes pas tout à fait prêt à vous attaquer seul.

Josh
la source
5

De nombreuses bibliothèques graphiques 2D telles que SDL ou SFML utilisent l'accélération matérielle OpenGL. Cela vous donne l'avantage de performances d'OpenGL, mais résume les détails de bas niveau méchants derrière une API beaucoup plus simple.

Philipp
la source
0

J'ai maintenant beaucoup d'expérience en programmation OpenGl, et je peux vous dire que c'est pénible. Dans le passé, lorsque j'ai commencé à programmer, j'étais très productif dans des environnements simples comme BlitzBasic. Ensuite, j'ai commencé à passer à l'étape suivante avec l'apprentissage de C ++ et d'OpenGl. Et quand vous n'avez pas un bon professeur ou des personnes à qui demander, vous tomberez en permanence sur l'écran noir. Le plus gros problème est l'enfer de l'état d'OpenGl. Il y a des tonnes de commutateurs que vous pouvez échanger pour changer l'état d'opengl. Et certains commutateurs dépendent d'autres commutateurs. Par exemple, glGet (GL_TEXTURE_BINDING_2D) dépend de glGet (GL_ACTIVE_TEXTURE). Et la documentation dont l'état dépend de quel autre état n'est pas le meilleur. De nombreuses opérations telles que le chargement de texture vous obligent à changer cet état, ce qui entraîne très souvent la rupture d'un autre code nécessitant l'état antérieur. Et puis, il y a ce problème d'OpenGl en tant que comportement dépendant de l'implémentation, de sorte que votre programme s'exécute sur votre machine mais que sur l'autre machine, tout ce que vous voyez est en noir. Tout ce que vous pouvez faire ici est de deviner ce qui ne va pas dans vos 10000 lignes de code. Donc, si vous aimez la frustration, utilisez oui OpenGl pour les projets en 2D. À toutes les autres personnes, ne le faites pas si vous n'en avez pas besoin. Vous pouvez être productif avec OpenGl, mais cela vous coûtera beaucoup de temps et de nerfs. Probablement plus que ce que vous voulez dépenser. Vous pouvez être productif avec OpenGl, mais cela vous coûtera beaucoup de temps et de nerfs. Probablement plus que ce que vous voulez dépenser. Vous pouvez être productif avec OpenGl, mais cela vous coûtera beaucoup de temps et de nerfs. Probablement plus que ce que vous voulez dépenser.

Arne
la source
-2

Unity3D utilise OpenGL, et je l’utilise pour les joueurs de plate-forme 2D et 2.5D. Unity3D est essentiellement un moteur de jeu 3D, mais est également utilisé pour les jeux 2D et 2.5D. Vous pouvez avoir des plans x, y, z et limiter uniquement le mouvement ou la rotation à deux de ces plans, créant ainsi une atmosphère 2D dans un monde essentiellement 3D.

LOGICIEL Apollo
la source
Génial, mon premier vote négatif. Content de voir que gamedev a des ennemis aussi.
Apollo LOGICIEL
1
Je suppose qu'illustrer un point à travers des exemples du monde réel est mal vu. Très professionnel.
Apollo LOGICIEL
7
Amit, les votes négatifs n'indiquent pas "haineux". Les votes négatifs sont simplement un moyen pour la communauté de donner son opinion sur les questions et les réponses. Ce n'est pas personnel, essayez donc de ne pas le prendre de cette façon. Je conviens que le votant inférieur aurait dû commenter la raison du vote négatif, car vous ne savez pas comment améliorer la réponse sans retour. Je vais vous dire pourquoi je pense qu'il a été voté. Ce n’est pas parce qu’une personne utilise OpenGL pour des jeux 2D que cela convient. Vous devez également expliquer pourquoi c'est approprié.
MichaelHouse
2
Ouais, je ne sais pas pourquoi les gens votent moins; le bit "utilise OpenGL" doit être clarifié avec "utilise OpenGL sur les plateformes qui en ont besoin" (il utilise Direct3D ou des API spécifiques à la console partout sauf iOS / Anrdoid / OSX / Linux), mais il s'agit davantage d'une clarification que d'une correction.
Sean Middleditch
1
Je ne me suis pas voté contre moi-même, mais une autre raison pour laquelle cette réponse est inappropriée est que vous utilisez un moteur basé sur OpenGL, et non OpenGL brut, ce qui change beaucoup les choses.
w4etwetewtwet