Quelles sont les bonnes ressources d'apprentissage pour OpenGL? [fermé]

88

J'utilise OpenGL ES sur l'iPhone depuis quelque temps déjà et, fondamentalement, je me sens un peu perdu devant le petit ensemble de commandes que j'ai vues dans des exemples et adoptées comme étant les miennes. J'adorerais utiliser OpenGL sur d'autres plateformes et bien le comprendre.

Chaque fois que je cherche un livre, je trouve ces immenses bibles qui semblent inintéressantes et très difficiles pour un débutant. Si j'avais quelques week-ends à consacrer à l'apprentissage d'OpenGL, quel serait le meilleur moyen de dépenser mon temps (et mon argent)?

DFectuoso
la source
12
Je déteste le dire, mais OpenGL Superbible ou le livre rouge OpenGL sont le meilleur moyen d’apprendre à utiliser OpenGL. C'est un sujet complexe, le livre doit donc être volumineux.
Rachel Blum
6
Est-il accessible même pour un nouveau-né?
DFectuoso

Réponses:

36

Soyez prudent lorsque vous consultez des didacticiels OpenGL, car nombre d'entre eux (NeHe) inclus ne font qu'apprendre des choses que vous ne devriez plus faire. Aujourd'hui, OpenGL est une bête différente de ce qu'elle était il y a 10 ans.

Quelques beaux exemples évitant les trucs obsolètes peuvent être trouvés ici: http://www.g-truc.net/post-tech-content-sample.html

OpenGL Samples Pack 4.0.1.0 est une mise à jour qui porte le nombre d'échantillons à un total de 58 échantillons. comprenant 13 échantillons OpenGL 4, 33 échantillons OpenGL 3.3 et 12 échantillons OpenGL 2 pour Visual Studio 2008 et 2010 en 32 et 64 bits.

NocturnDragon
la source
Il relie à une montagne!
user14170
65

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 discardque 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.

Nicol Bolas
la source
1
Je viens de commencer à lire votre livre / code source, et c'est incroyable .. merci beaucoup de l'avoir publié gratuitement!
Alex Coplan
Bien que je sois un gars des télécommunications, je tentais simplement de suivre vos tutoriels. Et ils sont vraiment sympas pour un débutant. La seule chose à faire est qu’un opengl sdk non officiel ne peut pas être construit correctement avec Ubuntu12.04 + Eclipse. Existe-t-il un moyen de l’installer directement (comme nous le faisons pour GL, GLEW, GLU, glut, etc.)
iammilind le
@iammilind: " ne peut pas être construit correctement " Comment la construction échoue-t-elle? En outre, il n'y a pas "d'installation"; c'est la moitié du point. Il s’agit d’un mécanisme de copie / création / exécution sans installations système, dépendances, PPM ou autres éléments que je ne comprends pas ou que je ne sais pas comment utiliser sous Linux. Vous le placez où vous voulez, pas là où votre système pense qu'il devrait aller.
Nicol Bolas
1
Dans Ubuntu, malheureusement, le processus de construction échoue à l’ preamakeétape proprement dite :( ... Cela vous sera très utile si, pendant votre temps libre, vous pouvez essayer d’exécuter vos tutoriels de code avec Ubuntu + Eclipse. Pour l’inverse, je suis l’inverse. est d’utiliser le matériel de lecture que vous avez fourni et de le relier à d’autres didacticiels de code, parce que j’ai vu «l’arcsynthèse» le meilleur endroit jusqu’à présent pour le Web pour les débutants d’apprentissage OpenGL.
iammilind le
@iammilind: J'ai remarqué que vous n'aviez pas déposé de rapport de bogue. Comment vous attendez-vous à ce que ces choses soient réparées sans un?
Nicol Bolas
8

Mon seul livre sur OpenGL est "OpenGL SuperBible, 4ème édition" et le 5ème est sur le point de paraître dans 5 semaines. Je pense que c'est bon pour les débutants et les programmeurs avancés.

Edit: Je pourrais ajouter que ne vous lancez pas dans les dernières tendances technologiques si vous apprenez simplement à programmer. Une fois que vous devenez un expert utilisant une seule méthodologie, 5 nouvelles interfaces / versions viennent de paraître. Nous avons vu des shaders avancer tous les 3 mois, semble-t-il. Choisissez donc ce qui a la meilleure documentation (généralement des primitives), créez quelques programmes et avancez progressivement car il est plus que probable que vous rencontriez du code plus ancien dans le futur. J'espère que ça aide!

Phil
la source
Je passe en revue le superbible maintenant et c'est vraiment bon pour les personnes qui n'ont pas de fond graphique car cela explique tous les concepts au fur et à mesure.
Spidey
5

Comme d'habitude, le meilleur moyen d'apprendre est de le faire. Je retiendrais de dépenser de l'argent à moins que vous ne pensiez qu'il serait vraiment avantageux de pouvoir lire un manuel, la plupart (sinon la totalité) des informations peuvent être trouvées en ligne. En plus d'apprendre OpenGL, vous voudrez peut-être aussi retoucher votre algèbre linéaire, cela ne fait jamais de mal.

Le gros problème auquel j'ai été confronté est que beaucoup de choses qui existent ont été dépréciées dans la version récente d'OpenGL.

La meilleure ressource que j'ai pu trouver est celle du blog de Joe . Il est préférable d'introduire le pipeline moderne et de vous donner quelques exemples d'une manière plus lisible que ce que j'ai pu trouver ailleurs. Il semble que Nehe ait récemment mis à jour un couple et que, même si leurs leçons sont encore anciennes, certaines nouvelles pourraient être intéressantes. Lazy Foo ' était également une excellente ressource, mais comme Nehe, ses tutoriels utilisent du matériel protégé.

Je pense qu'après un week-end ou deux, une fois que vous vous sentez à l'aise, lancez-vous et faites un petit projet pour tout appliquer. Breakout, ou tetris - quelque chose où vous pouvez vous concentrer sur le code lui-même. Vous en apprenez beaucoup plus lorsque vous partez et essayez de réaliser un projet réel, peu importe sa simplicité.

cmjreyes
la source
3

La meilleure façon d'apprendre OpenGL est de l'utiliser. Je recommanderais d'écrire votre propre moteur. Cela peut sembler une tâche ardue, et c'est le cas. Votre premier moteur ne sera pas très bon, mais vous aurez beaucoup appris.

Fondamentalement: écrivez un moteur, utilisez-le pour un jeu, déterminez ce que vous n’aimez pas et réécrivez-le. Continuez comme ça et vous vous améliorerez chez OpenGL. :)

Ce dont vous allez avoir besoin:

  • Un moyen de charger des modèles (.obj)
  • Un moyen de charger des textures
  • Éclairage, soit dans le pipeline à fonction fixe, soit dans un shader
  • Pour des scènes légèrement plus complexes qu'une théière à l'écran, un graphique de scène
  • Beaucoup d'outils minuscules (classe de vecteur 3d, classe de quaternion, classe de caméra, gestionnaire de scène, etc.)

C'est déjà beaucoup de travail.

chevalier666
la source
Pourriez-vous m'indiquer une documentation sur l'architecture de base ou les composants qu'un "premier moteur" devrait avoir? Cela pourrait en fait sembler être un bon moyen de me salir les mains avec un
verre
4
-1 Ecrire des moteurs comme moyen d'entrer dans gamedev n'est pas très bon. Vous ne savez pas quoi mettre dans le moteur, par exemple. scientificninja.com/blog/write-games-not-engines
Le canard communiste
@TheCommunistDuck SADLY, scientificninja n'est plus. Lien web.archive
Bobobobo
2

J'ai appris opengl en écrivant un "simple" jeu: 3D Tetris !

Essayez de créer votre propre jeu / application simple:

  • Astéroïdes
  • Pong
  • Scroller latéral simple (vous pouvez apprendre à charger des modèles pour le joueur / les ennemis. Vous n'en avez pas? Utilisez les modèles Quake)
  • Générateur de terrain 3d

Faites quelque chose de simple qui vous intéresse!

Bryan Denny
la source
2

Nous utilisons OpenGL (ES) dans notre jeu Orchard's Craps pour iPhone, mais celui-ci a été géré par un programmeur aux compétences en 3D délirantes. Donc, à cause de cela, j'ai appris OpenGL (ES) afin de savoir de quoi je parle et de pouvoir coder avec l'équipe.

Un site que j'ai trouvé utile, avec une série de tutoriels, est le blog de Jeff LaMarche: http://iphonedevelopment.blogspot.com et voici un lien pour ses publications OpenGL: http://iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html

Et d’OpenGL.org, ces deux liens sont utiles: http://www.opengl.org/code/ et http://www.opengl.org/resources/features/

La meilleure façon, a été dit ci-dessus plusieurs fois. Sautez et faites quelque chose de petit, c’est intéressant, et progressez. Il s’agit de comprendre la scène, la caméra et le matériel (shaders). Une fois que vous avez compris ces concepts, vous pouvez commencer à vous pencher sur les moteurs physiques, la détection de collision, les effets de particules, etc. Woot! (^_^)

Bonne chance dans toutes tes entreprises, Kevin

Kevin Bomberry
la source
2

Eh bien, personne n’a parlé du Guide de programmation OpenGL , je n’ai pas cette édition en particulier, mais les versions plus anciennes étaient plutôt bonnes.

Frédérick Imbeault
la source
1
Dis m'en plus, s'il te plait. Je me demande en quoi cela est meilleur / différent de la super bible et si cela en vaut la peine de lire de tels gros livres (sans vouloir offenser mais si cela prend plus de 20 heures pour lire un livre, je veux être sûr que ça en vaut la peine =))
DFectuoso
2

http://www.opengl-tutorial.org/

A des tutoriels pour OpenGL 'moderne' (noyau 3.0 / 4.0, par exemple, aucun objet obsolète (comme glBegin / glEnd) n'est enseigné). Bien que les tutoriels utilisent des nuanceurs, les bases sont expliquées en détail, ce qui permet de construire une base mathématique solide tout au long du processus. Le texte est bien complété avec des exemples de code * et des visualisations utiles.

Les didacticiels intermédiaires traitent de sujets tels que l'utilisation de Quaternions ou de Lightmaps .

. * glm est utilisé comme une bibliothèque mathématique

Exilyth
la source
1

Il suffit de noter que la meilleure façon d'apprendre OpenGL est axée sur les tâches . Essayez de faire quelque chose (comme ajouter une fonctionnalité à votre jeu), puis cherchez ce qui est nécessaire pour le faire .

Les manuels et les didacticiels sont vraiment ennuyeux sans un contexte plus vaste, c'est-à-dire quelque chose de plus que le didacticiel que vous souhaitez réaliser vous-même.

bobobobo
la source
-1

Commencez avec NeHe pour obtenir rapidement votre premier triangle à l'écran. Faites quelques tutoriels pour débutants pour comprendre les concepts de base de la programmation 3D. Si, comme vous le dites, en mentionnant OpenGL ES, vous connaissez déjà les bases de la programmation 3D (que sont les matrices, à quoi servent-elles, comment différentes matrices sont-elles utilisées pour projeter des vertices à l'écran, quels sont les vertices, etc.), Ensuite, je suggère que vous ne perdiez pas du temps avec NeHe, car cela pourrait vous ralentir (en vous enseignant des choses que vous devez "désapprendre" plus tard).

En dehors de cela, je conviens que la meilleure façon de l’apprendre est de le faire. Un bon premier projet hors du monde pourrait être un jeu en 2D (ou un moteur de jeu en 2D). L'utilisation moderne d'OpenGL pour des applications 2D peut vous apprendre beaucoup des concepts pertinents (utilisation des tampons et des shader, par exemple), ce qui sera moins intimidant qu'un projet 3D. Ensuite, vous pourrez ensuite appliquer ce que vous avez appris en réalisant une application 3D.

Janis Kirsteins
la source
NeHe est obsolète. De plus, bien que la création d’art soit plus facile et que vous traitiez principalement de quads texturés, il existe de nombreux cas de décalage (par exemple un produit vectoriel croisé) qui rendent l’écriture d’un jeu en 2D avant d’écrire un jeu en 3D plus difficile. Les jeux avec des graphismes 3D mais un jeu en 2D (par exemple, Pong, Breakout, ...) pourraient être plus faciles que les jeux 2D / 3D purs.
Exilyth
-4

On m'a dit à maintes reprises que les didacticiels de Nehe sont les meilleurs, je suppose qu'ils vous conviendront également! http://nehe.gamedev.net/ J'ai acheté le livre rouge ...

gokoon
la source
Cela ressemble à un ensemble amusant de petits morceaux de zéro à un bon endroit, merci!
DFectuoso
2
Je suis fortement en désaccord. Oui, les tutoriels NeHe sont là depuis longtemps, mais ils n’ont jamais eu un très bon style et ils sont plutôt obsolètes.
Andreas
8
-1 Nehe est beaucoup trop obsolète.
Axel Gneiting
7
-1. J'ai appris toutes sortes de mauvaises choses de nehe!
Gabriel Isenberg
-1. NeHe devrait étiqueter ses tutoriels comme obsolètes et obsolètes.
Quazi Irfan