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.