Vous pouvez apprendre beaucoup de choses. Voici ma réflexion sur chacun d'eux, du point de vue d'un nouvel utilisateur d'OpenGL.
Exemples OpenGL
Il y a beaucoup d'exemples de code que vous pouvez lire. Les exemples de G-truc sont assez complets et couvrent de nombreuses fonctionnalités avancées.
Cependant, si vous êtes débutant , apprendre à partir d’exemples est un terrible moyen d’apprendre. Lire du code que vous ne comprenez pas vraiment ne vous apprendra pas pourquoi cela fonctionne. En effet, le texte de la page liée ci-dessus indique précisément et à juste titre que les exemples ne sont pas destinés aux débutants.
Apprendre à partir de code source nu, à moins d'être très commenté (à ce stade, c'est un tutoriel), ce n'est pas une chose facile. Tenter de le faire encourage la programmation culte et le codage copier-coller. Il est très facile de vous convaincre que vous comprenez comment quelque chose fonctionne alors que vous ne faites que copier du code d'un endroit à un autre. Vous pouvez peut-être mélanger et assortir les choses, mais une véritable compréhension est difficile à obtenir sans matériel didactique approprié.
Livres OpenGL
Il existe un bon nombre de livres pouvant être achetés pour le développement OpenGL. Je vais couvrir mes pensées sur les deux plus gros ici.
Livre rouge OpenGL
Celui-ci est quelque peu problématique d'un point de vue purement pratique. Voir, la 7ème édition couvre les GL 3.0 et 3.1. Ce qui est plutôt vieux. Depuis lors, de nombreuses fonctionnalités utiles ont été ajoutées à OpenGL, des fonctionnalités qui changent la façon dont vous écrivez les choses. Et toutes ne sont pas des fonctionnalités matérielles.
La 8ème édition arrive "bientôt", et couvrira 4.1. On ne sait pas si cela couvre les vieux trucs à fonction fixe.
Je dirais que ce livre est OK. Le plus gros problème est l'organisation des informations. Cela ressemble plus à un manuel de référence complet qu'à un livre fait pour apprendre. Voici ce que je veux dire.
Une des choses les plus importantes à faire lors de l’enseignement est de ne pas surcharger l’élève avec des informations sans importance. Mais le livre rouge fait exactement cela. Lors de l'introduction de matériel, cela introduit beaucoup de matériel. Une grande partie est superflue pour la tâche à accomplir.
Ce dont vous parlez et quand vous en parlez est essentiel pour faire de votre livre une bonne ressource d’apprentissage. Le livre rouge ne retient jamais les informations avant un moment plus opportun. Quand il parle de la façon de dessiner des triangles et des primitives, il parle de tout pour les dessiner, tous en même temps. Il couvre chaque option, chaque fonction, chaque paramètre, etc.
Ce n'est tout simplement pas une bonne organisation de l'information.
OpenGL Superbible
La cinquième édition de ce livre ne couvre que le noyau GL 3.x, donc pas de fonction fixe.
Cependant, l'organisation générale du livre est plus ou moins identique à celle de la quatrième édition. Cela semble impossible puisque la 4e édition utilisait la fonction fixe et n'introduisait les shaders que beaucoup plus tard.
La façon dont cela a été accompli est ma plainte n ° 1 concernant le livre. En gros, l'auteur a créé une bibliothèque qui implémente une forme d'OpenGL à fonction fixe. Il englobe les objets VAO, les objets tampons, les shaders et diverses autres choses, de manière à ce qu'il puisse dessiner des objets, des calculs matriciels et des textures sans avoir à parler de détails tels que le fonctionnement du pipeline GL.
En cachant tous ces détails, le matériel est plus facile à digérer. Mais vous verrez souvent des gens s'éloigner de la Superbible sans savoir comment fonctionner réellement sans la bibliothèque. Ils ne comprennent pas vraiment comment les shaders se connectent aux objets de la mémoire tampon, comment les données circulent dans le pipeline, etc.
C'est un livre utilisable, plus que le Redbook. Si tout échoue, cela fera le travail. Mais je pense que ça pourrait être mieux.
En outre, selon certains examinateurs, certaines informations utiles, telles que la compression des données d'attribut à l'aide de valeurs normalisées, par exemple, semblent manquer.
Matériel OpenGL en ligne
Il existe de nombreux documents en ligne dont on pourrait apprendre.
Les tutoriels de NeHe
Les tutoriels de NeHe , comme d'autres l'ont indiqué, sont extrêmement obsolètes. Ils se concentrent sur OpenGL à fonction fixe. On dit souvent qu'il est facile d'apprendre le GL à fonction fixe, ce qui est vrai. Mais cela n'en fait pas une bonne idée.
Comprendre comment la conduite à fonction fixe vraiment fonctionne est difficile. J'irais même jusqu'à dire que c'est plus difficile que d'apprendre les shaders. Une fois que vous l'obtenez, les shaders sont simples. Comprendre les subtilités de l'environnement de texture, des combineurs et autres, est très délicat et nécessite de fréquentes visites de la documentation pour vous assurer que tout est correctement configuré. Même si vous comprenez tout correctement, il est facile de faire une petite erreur qui fait tout casser.
La différence est que vous pouvez effectuer un travail à fonction fixe sans le comprendre. Cela encourage la programmation culte de cargaison. Cela permet d’obtenir quelque chose à l’écran sans vraiment savoir ce que l’on fait. Sur les forums OpenGL.org, nous voyons constamment des questions concernant les fonctions fixes, des personnes ignorant le fonctionnement de gluLookAt, des difficultés d'éclairage, des personnes cherchant à obtenir un effet particulier pour l'environnement de texture.
Donc non, je ne pense pas que NeHe soit un bon moyen d'apprendre OpenGL.
Le commentaire ci-dessus peut être utilisé pour n’importe quel didacticiel, tel que Swiftless , Lighthouse , etc.
Programmation OpenGL de Wikibook
La programmation OpenGL de Wikibook est probablement l’équivalent moderne de NeHe. Il couvre la version 2.1 de GL, car ils veulent que ce soit toujours pertinent pour les plateformes mobiles. Si cela est important pour vous, alors certainement, regardez ici.
L’autre problème avec NeHe, et donc ce Wikibook, est l’importance accordée au code source. Le rapport texte sur code est très petit; Il y a beaucoup de code, mais le texte n'explique pas vraiment comment tout cela fonctionne.
A titre d'exemple, regardez au bas du didacticiel 2. Il introduit le mélange. Cela ne dit pas comment fonctionne le mélange. Il ne dit pas ce que glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
signifie réellement ou fait. Il dit simplement: "Voici un code qui rend les choses transparentes."
Ce n'est pas le meilleur environnement d'apprentissage.
Didacticiels incomplets
Swiftless a un ensemble de tutoriels 4.x OpenGL . Durian Software propose également des didacticiels OpenGL à base de shader . Et il y a les tutoriels "OpenGLBook.com" .
Ce qu'ils ont tous en commun, c'est qu'ils sont incomplets et abandonnés. Ils ont tous reçu environ 4-5 tutoriels, puis ont été abandonnés. Aucun d'entre eux n'a atteint la texture, l'éclairage ou quelque chose comme ça. Durian a frappé la texturation mais pas l'éclairage.
On peut en tirer beaucoup, mais il manque aussi beaucoup.
Auto-promotion sans vergogne
Réviser mes propres didacticiels Modern 3D Graphics serait un conflit d’intérêts horrible. Je vais donc parler longuement de l'organisation derrière eux et des raisons pour lesquelles je pense qu'ils sont bons.
Oh et oui, je travaille sur le tutoriel 17. Le projet n'est pas mort.
Les trois premiers chapitres traitent réellement du fonctionnement du pipeline OpenGL. La Superbible a échoué car elle a essayé de cacher des détails. Au lieu de cela, j'essaie d'expliquer ces détails vraiment, vraiment bien. À plusieurs reprises. L'introduction explique le pipeline en texte brut. Le premier tutoriel l'explique avec un accompagnement de code. Et le second tutoriel le visite encore plus.
À partir de là, je passe naturellement au positionnement des objets. Cela introduit des uniformes, mais je ne voulais pas y insérer des uniformes et une projection en perspective en même temps. J'ai donc séparé les deux concepts. Après la projection, la mise en mémoire tampon de profondeur semblait une étape raisonnable, suivie de la façon dont fonctionnent les transformations et les matrices. Après cela, les caméras. La rotation avec les quaternions a été ajoutée tardivement, mais j’estime qu’il était important de parler de cela pour le nouveau programmeur.
Les tutoriels sur l'éclairage construisent à nouveau l'un sur l'autre. Éclairage diffus, puis par fragments, puis spéculaire. La plage dynamique était un choix intéressant. La plupart des documents d'introduction tentent d'éviter cela, mais je l'accepte. Vous n'êtes pas un programmeur graphique de nos jours si vous pensez que l'intensité de la lumière est toujours dans la plage [0, 1]. Et vous n'êtes pas un programmeur graphique de nos jours si vous ne savez pas comment gérer un pipeline de couleurs linéaire.
Le dernier en éclairage, sur les imposteurs, était étrange. J'essaie de concevoir des tutoriels qui résolvent les problèmes plutôt que de simplement montrer certaines fonctions OpenGL, en particulier au fur et à mesure que le livre avance. Une grande partie de ma conception de didacticiel provient de la recherche de moyens de parler de certains sujets tout en les abordant comme de vrais problèmes, ce qui n’est pas évident: "nous apprenons X maintenant". Les shaders de géométrie sont difficiles, car ils ne résolvent pas vraiment beaucoup de problèmes.
Les imposteurs représentaient un problème que les GS étaient réellement utiles pour résoudre. En outre, cela m'a permis de parler d'autres choses moins utilisées, telles discard
que la modification de la profondeur d'un fragment. Et cela montre vraiment la puissance des shaders: vous pouvez transformer un carré en une sphère.
Les tutoriels de texturation sont également intéressants. L'une des raisons pour lesquelles j'ai tardé à parler de textures de couleur diffuse jusqu'à ce que la troisième solution était de ne pas parler de textures sRGB pendant un moment. De cette façon, je pourrais parler des problèmes fondamentaux liés aux textures (chargement de données, leur mise en shaders, filtrage, serrage, etc.) sans avoir à traiter de problèmes linéaires. Je pourrais alors passer tout un tutoriel sur ce sujet. Cela m'a permis de vraiment, vraiment souligner l'importance de maintenir un pipeline de couleur linéaire est.
C'est une de mes bêtes noires.