Apprendre OpenGL moderne

Je suis conscient qu'il y avait des questions similaires au cours des dernières années, mais après avoir fait quelques recherches, Je ne peux toujours pas décider d'où et ce que je devrais apprendre. Je voudrais également voir votre vue actuelle et réelle sur la programmation OpenGL moderne avec plus d'approche OOP et shader C++. Et assurez-vous que ma compréhension réelle de certaines choses est valide.

Donc... actuellement, nous avons OpenGL 4.2, qui comme je l'ai lu quelque part nécessite dx11 matériel (ça veut dire quoi?) et ensemble de bibliothèques "latérales", pour par exemple créer une fenêtre.

Il y a la surabondance la plus commune, que je déteste extrêmement. L'une des raisons principales sont les appels de fonction, ce qui ne permet pas la liberté dans la façon dont nous créons la boucle principale. Comme certaines personnes le disaient, Ce n'était pas destiné aux jeux.

Il y a aussi GLFW, qui est en fait assez gentil et direct pour moi. Pour une raison quelconque, les gens l'utilisent avec GLUT. (qui fournit non seulement l'initialisation de la fenêtre, mais aussi d'autres utilitaires? )

Et il y a aussi SFML et SDL (SDL

Et nous avons aussi GLEW, qui est l'utilitaire de chargement d'extension... attendre... GLUT/GLFW n'est-il pas déjà une extension? Y a - t-il une raison de l'utiliser, comme y a-t-il des extensions vraiment importantes pour s'intéresser?

Jusqu'à présent, nous avons la création de fenêtres (et certains utilitaires), mais... OGL ne s'occupe pas du chargement des textures, ni des modèles 3D. Comment beaucoup d'autres libs ai-je besoin?

Parlons maintenant de la partie éducation. Il y a (dans)célèbre tutoriel NeHe. Écrit en C avec L'utilisation de WinApi, avec un code extrêmement peu clair et des solutions obsolètes, mais toujours le plus populaire. Certaines choses comme Red Book peuvent être trouvées, qui sont liées à des versions comme 2.x ou 3.x, cependant, il n'y a que quelques tutoriels (et inachevés) mentionnant 4.x.

Avec quoi aller?

37
demandé sur Nicol Bolas 2012-01-05 00:38:17

6 réponses

Si vous écrivez un jeu, j'éviterais des choses comme GLUT, et j'écrirais vos propres wrappers qui auront le plus de sens pour votre architecture de rendu de jeu.

J'éviterais également OpenGL 4.2 à ce stade, sauf si vous voulez seulement cibler du matériel spécifique sur des plates-formes spécifiques, car le support est minime. c'est-à-dire que la dernière version de Mac OSX Lion vient d'ajouter le support pour OpenGL 3.2.

Pour la couverture la plus complète des machines fabriquées au cours des dernières années, construisez votre cadre autour D'OpenGL 2.1 et Ajouter un support supplémentaire pour les nouvelles fonctionnalités OpenGL où ils ont du sens. La conception globale devrait être la même. Si vous ne souhaitez cibler que les machines "actuelles", c'est-à-dire les machines de fin 2011 et suivantes, construisez votre framework autour D'OpenGL 3. Seul le matériel le plus récent prend en charge 4.2, et uniquement sur Windows et certains Linux. Si vous souhaitez cibler les appareils mobiles et les consoles, utilisez OpenGL ES 2.0.

GLEW charge et gère OpenGL Extensions , qui sont des extensions matérielles de différents fournisseurs, par opposition à GLUT qui est une boîte à outils pour la construction D'applications OpenGL, des choses complètement différentes. Je recommande fortement D'utiliser GLEW, car il fournira un mécanisme propre pour déterminer quelles fonctionnalités sont disponibles sur le matériel sur lequel il est exécuté, et vous libérera de la tâche d'assigner manuellement des pointeurs de fonction aux fonctions appropriées.

OpenGL SuperBible est un très bon livre, vérifiez également OpenGL Shading Language . Tout ce que vous faites avec OpenGL moderne va impliquer l'utilisation de shaders - plus de fonctionnalités fixes - de sorte que votre plus grand défi sera de comprendre GLSL et comment les pipelines de shaders fonctionnent.

19
répondu Gerald 2012-01-04 21:13:39

Donc... actuellement, nous avons OpenGL 4.2 out, qui, comme je l'ai lu quelque part nécessite du matériel dx11 (qu'est-ce que cela signifie?) et ensemble de bibliothèques' side', Pour par exemple créer une fenêtre.

Le matériel DX11 est... matériel qui a" prend en charge DirectX 11 " écrit sur le côté de la boîte. Je ne suis pas sûr de ce que vous demandez ici; n'êtes-vous pas clair sur ce Qu'est Direct3D, ce QU'est D3D 11, ou ce qui sépare D3D 11 des versions antérieures?

FYI: D3D est une alternative Windows uniquement à l'utilisation OpenGL pour accéder au matériel de rendu. La Version 11 est juste la version la plus récente de L'API. Et D3D11 ajoute quelques nouvelles choses par rapport à D3D10, mais rien de beaucoup qu'un débutant aurait besoin.

OpenGL est une spécification qui décrit une certaine interface pour les opérations graphiques. Comment cette interface est créée ne fait pas partie D'OpenGL. Par conséquent, chaque plate-forme a sa propre façon de créer un contexte OpenGL. Windows utilise L'API Win32 avec WGL. X-Windows utilise L'API X-Windows avec Fonctions GLX. Et ainsi de suite.

Les bibliothèques comme GLUT, GLFW, etc. sont des bibliothèques qui abstrait toutes ces différences. Ils créent et gèrent une fenêtre OpenGL pour vous, de sorte que vous n'avez pas à salir votre code avec des détails spécifiques à la plate-forme. Vous n'avez pas à utiliser l'un d'eux.

Certes, si vous êtes intéressé à apprendre OpenGL , il est préférable d'éviter de traiter avec des minutae spécifiques à la plate-forme comme comment prendre soin d'un HWND et autres.

Et nous avons aussi GLEW, qui est l'utilitaire de chargement d'extension... attendre... GLUT/GLFW n'est-il pas déjà une extension? Y a - t-il une raison de l'utiliser, comme y a-t-il des extensions vraiment importantes pour s'intéresser?

C'est un autre malentendu. GLUT est une bibliothèque , pas une extension. Une extension OpenGL est partie de OpenGL . Voir, OpenGL est juste une spécification, un document. L'implémentation D'OpenGL que vous utilisez actuellement implémente le système Graphique OpenGL, mais il peut également mettre en œuvre un certain nombre d'extensions à ce système graphique.

GLUT ne fait pas partie D'OpenGL; c'est juste une bibliothèque. Le travail de GLUT est de créer et de gérer une fenêtre OpenGL. GLEW est également une bibliothèque, qui est utilisée pour chargement des fonctions OpenGL . Ce n'est pas la seule alternative, mais il est un populaire.

Jusqu'à présent, nous avons la création de fenêtres (et certains utilitaires), mais... OGL ne s'occupe pas du chargement des textures, ni des modèles 3D. Combien d'autres libs dois-je le besoin?

OpenGL n'est pas un moteur de jeu. C'est un système graphique, conçu pour l'interfaçage avec du matériel graphique Dédié. Ce travail n'a rien à voir avec des choses comme charger quoi que ce soit à partir de n'importe quel type de fichier. Oui, faire un jeu l'exige, mais comme indiqué précédemment, OpenGL n'est pas un moteur de jeu.

Si vous avez besoin de charger un format de fichier pour faire quelque chose que vous souhaitez faire, alors vous devrez soit écrire du code pour faire le chargement (et l'ajustement du format nécessaire pour interfacer avec GL) ou télécharger une bibliothèque qui le fait pour vous. Le Wiki OpenGL maintient une très bonne liste d'outils pour différentes tâches .

Il y a (dans)célèbre tutoriel NeHe. Écrit en C avec L'utilisation de WinApi, avec un code extrêmement peu clair et des solutions obsolètes, mais toujours le plus populaire. Certaines choses comme Red Book peuvent être trouvées, qui sont liées à des versions comme 2.x ou 3.x, cependant, il n'y a que quelques tutoriels (et inachevés) mentionnant 4.X.

Que faire avec?

Le Wiki OpenGL maintient une liste de documents en ligne pour apprendre des choses OpenGL , à la fois old-school et plus moderne.

Attention: L'auto-Promotion sans vergogne suit!

Mes tutoriels sur l'apprentissage des graphiques sont plutôt bons, avec de nombreuses sections et sont toujours en cours de travail. Il n'enseigne aucun OpenGL 4.fonctionnalité spécifique à x, mais OpenGL 3.3 est complètement compatible avec 4.2. Tous ces programmes fonctionneront très bien sur 4.x le matériel.

Je maintiens également un SDK non officiel pour OpenGL.{[32] } c'est un ensemble d'utilitaires utiles, tous conçus pour être construits par un système de construction simple et unifié. Il est également raisonnablement bien documenté.

37
répondu Nicol Bolas 2015-12-26 04:44:08

J'apprends actuellement OpenGL moderne. J'ai aussi eu du mal à trouver de bonnes ressources, mais voici ce que j'ai découvert jusqu'à présent.

J'ai cherché un bon livre et j'ai fini avec OpenGL ES 2.0 Programming Guide , qui, je pense, est le meilleur choix pour apprendre OpenGL moderne en ce moment. Oui, Le livre est sur OpenGL ES, mais ne laissez pas cela vous effrayer. La bonne chose à propos D'OpenGL ES 2.0 est que toutes les parties lentes de L'API ont été supprimées afin de ne pas avoir de mauvaises habitudes de l'apprendre alors qu'il est encore très proche de bureau OpenGL sinon, avec seulement quelques fonctionnalités manquantes, que je pense que vous pouvez apprendre assez facilement après avoir maîtrisé OpenGL ES 2.0.

D'un autre côté, vous n'avez pas le désordre avec les bibliothèques de fenêtrage, etc. que vous avez avec desktop OpenGL et donc le livre sur OpenGL ES ne vous aidera pas là. Je pense que les bibliothèques à utiliser sont très subjectives, mais jusqu'à présent, j'ai bien géré SDL, ImageMagick et Open Asset Import Bibliothèque .

Maintenant, le livre a été une bonne aide, mais à part cela, il y a aussi une belle collection de tutoriels enseignant OpenGL moderne à partir de zéro au développement OpenGL sur Linux. (Je pense que c'est valable sur d'autres systèmes d'exploitation le nom néanmoins.) Le livre, les tutoriels et un coup d'œil ou deux de temps en temps au Livre Orange ont suffi à me faire comprendre les bases de L'OpenGL moderne. Notez que je ne suis toujours pas un maître dans la région, mais il est certainement obtenu moi a commencé.

6
répondu Antti 2012-01-04 21:07:52

Je suis d'accord qu'il est difficile d'entrer dans OpenGL ces jours-ci lorsque tous les tutoriels et exemples utilisent des fichiers de projet obsolètes, des liens boken, etc., et si vous demandez de l'aide, vous êtes simplement dirigé vers ces mêmes vieux tutoriels.

J'étais vraiment confondu avec les tutoriels NeHe au début, mais quand j'ai un peu mieux compris C, compilant des bibliothèques sur UNIX et d'autres choses de base, tout est tombé en place.

En ce qui concerne le chargement de la texture, je peux recommander SOL: http://www.lonesock.net/soil.html

Je ne suis pas sûr mais je me souviens que j'ai eu du mal à le compiler correctement, mais cela a peut-être été ma faible expérience à l'époque. Donnez-moi un coup de fil si vous rencontrez un problème!

Une autre astuce utile est d'obtenir une machine virtuelle Linux en cours d'exécution, puis vous pouvez télécharger le code D'exemple Nehe Linux et le compiler hors de la boîte. Je pense que vous avez juste besoin de surabondance pour que cela fonctionne.

Je préfère aussi GLFW avant GLUT, principalement parce que GLUT n'est pas maintenu activement.

Bonne chance!

3
répondu oskob 2012-01-04 21:20:28

Le point majeur de OpenGL moderne est la tesselation et le nouveau type de programmes de shader, donc je voudrais recommander de commencer à partir d'un tutoriel autonome sur OpenGL 4 tesselation, c'est-à-dire: http://prideout.net/blog/?p=48

Après les manuels et les tutoriels, un bon suivi est de jeter un oeil aux moteurs open-source qui sont basés sur le "nouveau" OpenGL 3/4. En tant que l'un des développeurs, je voudrais pointer Linderdaum Engine.

2
répondu Sergey K. 2012-05-14 20:16:06

"programmation OpenGL moderne avec plus d'approche OOP et shader C++" me fait mentionner Qt. Il n'a pas encore été mentionné, mais Qt est une bibliothèque qui vaut la peine d'apprendre et est le moyen le plus simple d'écrire des applications c++ multiplateformes. Je l'ai également trouvé le moyen le plus simple D'apprendre OpenGL en général car il gère facilement l'initialisation et le code spécifique au matériel pour vous. Qt a également ses propres bibliothèques mathématiques, donc tout ce dont vous avez besoin pour commencer avec OpenGL est Qt. VPlay est une bibliothèque qui utilise Qt pour aider les gens faire des jeux facilement donc il y a évidemment des gens qui utilisent Qt pour faire des jeux aussi bien.

Pour une courte introduction à Qt et OpenGL voir mon post ici.

Je mentionnerai que puisque Qt extrait du code OpenGL, si vous essayez d'utiliser les wrappers Qt, L'API est légèrement différente de celle D'OpenGL (bien que sans doute plus simple).

Quant à mon vote pour de bons tutoriels ou consultez le livre les tutoriels OpenGL D'Anton et les tutoriels Swiftless. Le livre électronique d'Anton sur Amazon est également noté plus élevé que toute autre ressource publiée par OpenGL que j'ai vue jusqu'à présent (et beaucoup moins cher).

-1
répondu steventaitinger 2016-01-07 22:00:16