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?
Réponses:
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:
(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.
la source
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:
Ce ne sont que quelques avantages qui me viennent à l’esprit, il y en a plusieurs autres.
la source
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.
la source
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.
la source
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.
la source
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.
la source