Bonnes ressources pour apprendre OpenGL moderne (3.0 ou ultérieur)? [fermé]


73

Je tombe sur la recherche d’une bonne ressource pour commencer avec OpenGL (version 3.0 ou ultérieure). Bien, j'ai trouvé beaucoup de livres mais aucun d'entre eux ne peut être considéré comme une bonne ressource!

Voici deux exemples:

Guide de programmation OpenGL (7ème édition) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 C'est PLEIN de matériel déconseillé! Presque tous les chapitres commencent par une note à ce sujet.

OpenGL Superbible (5th Edition) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 Ce livre utilise une bibliothèque créée par l'auteur pour expliquer les principaux arguments et cacher ce que vous voulez apprendre! Je ne veux pas apprendre à utiliser votre bibliothèque! Je veux apprendre OpenGL!

J'espère que vous comprenez que ce n'est pas la même question du type "hé, je ne parviens pas à utiliser Google ... dites-moi comment apprendre OpenGL". Je viens de terminer une recherche complète et approfondie, mais je ne trouve pas de ressource complète et complète pour apprendre le "nouveau" OpenGL, en évitant les sujets obsolètes.

Est-ce que quelqu'un peut me diriger dans la bonne direction? Je connais le C ++ et j'ai 10 ans d’expérience dans le développement ... où puis-je trouver une bonne ressource?! Je veux passer du temps dessus et je veux apprendre profondément.

Réponses:


69

Je suis d'accord sur les livres ci-dessus avec quelques notes:

  • Le 8ème guide de programmation OpenGL est maintenant disponible et a été refait pour la version moderne OpenGL 4.3.

  • La SuperBible 5ème édition vous fournit une bibliothèque de béquilles au début, mais au fur et à mesure que vous parcourez le livre, vous réimplémentez les fonctionnalités de cette bibliothèque afin de vous familiariser avec toutes ses fonctionnalités. Je recommande également vivement d’emballer des éléments OpenGL dans quelque chose si vous utilisez un langage orienté objet. Je travaille sur ma propre bibliothèque pour le plaisir, ce qui semble être la voie à suivre. En la mettant en œuvre moi-même, je comprends tous les tenants et aboutissants et je n'ai besoin que d'insérer les éléments que j'utilise réellement. Vous pouvez également supprimer certaines choses, telles que l’envoi de données à des shaders (ce n’est pas shinyMaterial.setColor (Red) plus agréable), cela peut également vous permettre de restituer certaines informations en fournissant des alternatives héritées. Il y a aussi oglplus .

Le principal problème de l’apprentissage moderne «fondamental» d’OpenGL est que, pour pouvoir mettre en place un pipeline de base, même si c’est juste pour dessiner un cube, vous devez comprendre ce qui suit:

  • Opérations Matrix (utilisez GLM si vous utilisez C ++, vous aurez également besoin d'une version du Kit de développement logiciel non officielle MatrixStack OpenGL ici ou de la version simple ici .)
  • Programmation de shader GLSL.
  • liaison des données aux shaders et aux objets Vertex Buffer. Si vous vouliez apprendre uniquement le profil de base pur, ils doivent tous être mis en œuvre simultanément et si quelque chose est brisé, vous ne verrez rien et vous ne saurez presque pas où cela s'est mal passé. Cela ne couvre pas non plus des choses telles que l'éclairage de base (où vous devez apprendre les algorithmes d'ombrage en plus du langage de programmation).

Mais vous n'avez pas besoin de commencer dans les profondeurs avec le profil de base. Utilisez certaines des fonctionnalités obsolètes au début, à peu près tout le supportera toujours, puis modernisez-le.

Un autre problème est qu’OpenGL «moderne» peut vraiment faire référence à 3 choses:

  • Le premier est la pipline de shader programmable, par opposition au pipeline à fonction fixe. Les techniques «modernes» de base ont été possibles depuis la publication d'OpenGL 2.0 en 2004, année de l'introduction des shaders (les didacticiels n'ont pas été mis à jour). La version 1.5 comportait également des objets Vertex Buffer, qui sont une autre pierre angulaire d'OpenGL moderne. Le problème, c'est qu'aujourd'hui encore, les développeurs OpenGL pourraient même ne pas être en mesure de tirer parti de tout cela. Il existe de nombreux netbooks de mauvaise qualité avec ces chipsets Intel qui ne prennent en charge que OpenGL 1.5 et des téléphones tels que les anciens iPhones / Android qui ne prennent en charge que OpenGL ES 1.1. La seule différence entre OpenGL 2.0 et OpenGL 3.x / 4.x est qu'il est désormais obligatoire pour le profil principal.

  • Modern OpenGL pourrait également faire référence aux nouvelles fonctionnalités de 3.x, 4.x. Des choses comme Vertex objets Array , objets framebuffer , objets uniformes tampon / std140 , qualificatifs de mise en page , GLSL sous - routinesetc. Beaucoup de ceux que j'ai trouvés peuvent rendre les choses beaucoup plus agréables à programmer. Ils peuvent également modifier subtilement vos canalisations de moteur globales. Ce sont aussi des choses qui, avec un peu d’effort, vous pouvez faire du backport en créant des fonctions d’aide, etc. (Par exemple, écrivez un objet générique de shader manager que vous pouvez utiliser pour définir des uniformes. Si vous utilisez des UBO, utilisez-le qui gère autrement le téléchargement manuel des valeurs dans les shaders , peut-être mettre un peu de shader réécrivant pour l’automatiser). Ce matériel ne fonctionne que sur les nouvelles cartes vidéo. Vous ne verrez aucun netbook le prenant en charge, ni aucune console de jeu vidéo de la génération actuelle (ils utilisent leur propre sous-ensemble d’OpenGL similaire à OpenGL ES). Les derniers OSX n'en ont que 3.

  • L'Ultra moderne nextgen OpenGL. OpenGL 4.3 vient de sortir. Il est fourni avec les calques de calcul, les tampons de stockage glMultiDrawElementsIndirect et shader. Cela permet un pipeline fondamentalement différent dans lequel vous téléchargez toutes les données de sommet sur le GPU, puis utilisez des calcul shaders pour calculer ce qui doit être dessiné plutôt que de le faire dans votre programme. Malheureusement, ce logiciel est très récent et je ne connais donc aucun tutoriel décent à ce sujet. Jetez un coup d'œil à la critique OpenGL 4.3 qui donne un aperçu de la façon dont cela fonctionne (l'auteur dit également qu'un article sur GPU Pro doit être publié). En tant que nouvelle marque, elle ne sera prise en charge nulle part à ce stade (sauf si vous utilisez une nouvelle carte nvidia avec des pilotes bêta). Bien que vous puissiez éventuellement utiliser OpenCL / CUDA pour en implémenter une partie.

Je sauterais glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix, etc. Commencez plutôt par apprendre les objets Vertex Buffer sans les shaders, n'essayez pas la 3D à ce stade, mais utilisez un triangle blanc et plat pour ne pas avoir à travailler avec des opérations 3D à l'aide de matrices aucun sens à apprendre à l'ancienne). Ensuite, dans les shaders, vous devrez modifier la manière dont vos objets tampon de vertex sont liés puisque vous souhaiterez maintenant utiliser les attributs de vertex. Apprenez à leur communiquer les propriétés via des uniformes. Puis apprenez les opérations de matrice avec GLM, liez les matrices aux shaders et lancez la 3D. Une fois que vous avez cela fait, il est fondamentalement juste d'apprendre des choses plus avancées comme la texturation,

Quelques tutoriels OpenGL modernes en ligne modernes, couvrant le pipeline de programmation de shader dont la plupart fonctionnent avec OpenGL 2.0+:

Pour d'autres ressources d'apprentissage générales. OpenGL ES pourrait être un bon point de départ. OpenGL ES a supprimé tous les éléments obsolètes. OpenGL 4.1 étant totalement compatible avec OpenGL ES, il devrait être possible de prendre un programme OpenGL ES et de l'exécuter dans OpenGL 4.1. Et les principes de base sont les mêmes pour les deux.

Certains éléments à noter sont qu'OpenGL ES 3.0 vient de sortir, mais comme il est nouveau, il ne dispose pas encore de tutoriels ni de support matériel. Il ne semble pas y avoir de changements fondamentaux majeurs (comme la différence entre le pipeline fixe et le modèle de shader que nous avons vu avec OpenGL ES 1.0-> 2.0). Donc, vous ne saurez probablement pas de choses périmées.

De plus, OpenGL ES utilisera souvent EGL , vous devrez donc apprendre un autre moyen d'ouvrir une fenêtre, mais cela ne devrait pas être trop difficile. Sinon, il existe quelques wrappers / émulateurs OpenGL ES ou vous pouvez apprendre sur Android / iPhone si vous en avez un (ou envisagez d'utiliser leurs émulateurs).

Il existe le Guide de programmation d'Addison Wesley OpenGL ES 2.0, qui est l'équivalent du livre rouge.

Vous pouvez également consulter le matériel GLSL axé sur les matériaux, car c'est là que réside la plupart des OpenGL modernes. Vous devez simplement vous assurer que ce que vous apprenez couvre le côté «collage» des liaisons OpenGL.

Découvrez la deuxième édition du langage OpenGL Shading Language (Orange Book).

Le livre de recettes OpenGL 4.0 Shading Language propose des informations plus détaillées sur OpenGL, mais ne constitue pas en soi un didacticiel complet. Cela vaut vraiment la peine de jeter un coup d'œil pour comprendre les dernières pratiques OpenGL du monde réel, telles que les objets de tampon uniformes et les sous-routines GLSL.

Enfin, vous pouvez jeter un coup d’œil à WebGL, bien que le fait d’être en JavaScript va être quelque peu différent et beaucoup plus difficile à déboguer.


3
+1, wow. Le seul petit changement que je suggérerais consisterait à utiliser des tableaux de vertex côté client au début, car ils constituent un chemin plus facile d'accès aux VBO, mais sans certains des pièges à ours dans lesquels les débutants peuvent tomber.
Maximus Minimus

1
J'ai pensé qu'il valait mieux éviter spécifiquement d'apprendre / d'utiliser des fonctionnalités obsolètes, car ce serait des choses qu'il faudrait désapprendre. L’autre chose dépréciée que je suggère d’utiliser est ce que OpenGL fera par défaut, comme pouvoir effectuer un rendu sans utiliser de shader et supposer que l’attribut de sommet 0 est la position qui doit exploser lors de l’activation du profil principal.
David C. Bishop

2
La 6ème édition de la SuperBible vient de paraître et elle est BEAUCOUP meilleure que la 5ème édition. Je le recommande vivement, il est facile de suivre et d'apprendre OpenGL moderne avec.
Philip

2
Le site glsut Arcsynthesis n'est plus disponible, mais le didacticiel peut toujours être téléchargé à partir de bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken le

15

Oubliez les livres au moins jusqu'à la sortie de la 8e édition du guide de programmation.

Outre le tutoriel mentionné , j'ai trouvé ce site utile, car il dépasse les bases assez rapidement. Ils sont tous deux une excellente introduction à OpenGL moderne. Une fois que vous avez dépassé cela, vous n’avez plus besoin que de la documentation. OpenGL est facile à utiliser une fois que vous vous y êtes habitué. Le reste est de la théorie de l’informatique graphique et des mathématiques.


11

Je suis dans la même situation que vous et j'ai enfin trouvé ce dont j'avais besoin pour démarrer.

Tout d’abord, rendez-vous sur: http://www.arcsynthesis.org/gltut/ . Ce site est fantastique, de bons exemples de travail et une explication détaillée de ce qui se passe. Même si le code est écrit en C ++, je l'utilise pour m'apprendre à écrire des démos OpenGL en Lisp. C'est aussi totalement libre de l'ancienne façon de faire les choses, vous n'avez donc pas à vous soucier de prendre de mauvaises habitudes.

Je tiens à souligner que même s’il s’agit «d’un site Web tout simplement différent», je n’ai trouvé aucun livre donnant une explication aussi claire et concise des bases que celle-ci.

Une fois que vous avez parcouru le site ci-dessus, vous aurez déjà une connaissance de base des shaders et beaucoup de ce que vous devez savoir peut maintenant être recherché sur Google (regardez bien les ressources opengl es ou webgl qui ont supprimé tous les éléments obsolètes) ou trouvé sur le site wiki opengl. Ce dernier est horriblement cryptique si vous ne possédez pas les bases du site d’arcsynthèse, mais très utile lorsque vous savez à peu près ce que vous recherchez.

Également pour un regard vraiment profond sur GLSL, jetez un coup d'œil à: Langage OpenGL Shader (The Orange Book) Je travaille très lentement, mais je vais vous donner la compréhension d'écrire des shaders pour vous permettre d'aller plus loin dans cette quête. Je vous avertirai que ce livre contient, selon les mots d'un critique, "200 pages de contenu de qualité supérieure regroupées dans un livre de 600 pages", mais l'historique et les informations supplémentaires peuvent fournir le contexte nécessaire pour comprendre les itinéraires empruntés par OpenGL. en tant que norme a baissé (enfin ça m'aide quand même!)

J'espère que cela vous aide et bonne chance, j'ai hâte de voir / jouer votre travail à l'avenir!

MISE À JOUR

Il semble que l'arcsynthèse soit malheureusement hors ligne, mais le site a été converti en pdf ici et le code a été dupliqué ici .

Également dans les quelques années qui ont suivi ma réponse initiale, learnopengl.com/ est devenu absolument brillant. Bien que je recommande toujours arcsynthesis pour son excellence brute dans son introduction à opengl moderne, le site learnopengl couvre bien plus que ne le faisait arcsysthesis et le gère avec un langage accessible, mais nous avons conçu des exemples et du code source ouvert. En gros, c'est sacrément bon, allez y faire un tour!

En ce qui concerne les livres, je ne suis pas allé trop loin avec le livre orange, mais je peux recommander la troisième édition de 'Real-Time Rendering' . Une fois que vous êtes prêt pour la technique, ce livre est une mine d'or.


2
OMG! le premier lien est fantastique!
MatterGoal

Le site gltut n'est plus disponible, mais vous pouvez toujours télécharger le didacticiel à l' adresse bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken le

Bon point, je vais mettre à jour mon post avec des recommandations supplémentaires aussi.
Baggers


5

Deux sites qui m'ont été très utiles sont: http://www.arcsynthesis.org/gltut/ et http://ogldev.atspace.co.uk/

En outre, le wiki OpenGL est une ressource extrêmement performante et actualisée.

Une fois que vous avez terminé, je vous recommande vivement de mordre la balle et de lire les spécifications OpenGL. Ensuite, vous serez un pro.


Oui, les didacticiels en ligne sont beaucoup plus utiles que la plupart des livres. La 5ème édition de SuperBible est extrêmement décevante.
Philip

Le site gltut n'est plus disponible, mais le tutoriel peut toujours être téléchargé à partir de bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

4

Le meilleur livre que j'ai trouvé qui couvre OpenGL "moderne" est http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Même s'il s'agit d'un "livre de recettes", il vous explique les étapes nécessaires à la configuration du rendu et les types de bibliothèques compagnons dont vous aurez besoin (bibliothèque d'images, bibliothèque de mathématiques de vecteur).

En plus de cela, il passe en revue toutes sortes de choses courantes pour lesquelles vous voudrez peut-être utiliser OpenGL, sans creuser trop profondément dans quelque chose méthodes complexes de mappage des ombres).

Je recommande également de prendre le livre orange.


Merci @Jari. N'est-ce pas "seulement" de shader? Je veux dire, ce livre présente-t-il les techniques OpenGL ainsi que les shaders?
MatterGoal

2
@ MattGoGo: OpenGL moderne est presque entièrement basé sur le shader. Ce livre couvre le côté contraignant OpenGL des choses. Je recommande également ce livre, mais comme complément à autre chose, ce n’est pas vraiment un livre d’apprentissage fondamental, mais il montre quelques superbes utilisations du monde réel des pratiques de modélisation.
David C. Bishop

4

Quelques autres tutoriels et d'autres choses qui n'ont pas été mentionnées mais utiles


+1 Pour ajouter à la liste, il existe des tutoriels OpenGL de Aks qui sont peu structurés mais qui contiennent suffisamment d’informations pour la configuration.
legends2k
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.