39 votes

Apprendre l'OpenGL moderne

Je sais qu'il y a eu des questions similaires ces dernières années, mais après avoir fait quelques recherches, je n'arrive toujours pas à décider d'où et de ce que je dois apprendre. J'aimerais également connaître votre point de vue actuel sur la programmation moderne d'OpenGL avec une approche plus C++ OOP et shader. Et être sûr que ma compréhension actuelle de certaines choses est valable.

Donc... actuellement, nous avons OpenGL 4.2, qui, comme je l'ai lu quelque part, nécessite du matériel dx11 (qu'est-ce que ça veut dire ?) et un ensemble de bibliothèques 'annexes', pour par exemple créer une fenêtre. (qu'est-ce que ça veut dire ?) et un ensemble de bibliothèques 'annexes', pour par exemple créer une fenêtre.

Il y a le GLUT, le plus courant, que je déteste au plus haut point. L'une des principales raisons est l'appel de fonctions, qui ne laisse pas de liberté dans la manière de créer la boucle principale. Comme certaines personnes l'ont dit, il n'a pas été conçu pour les jeux.

Il y a aussi le GLFW, qui est en fait assez agréable et simple pour moi. Pour certaines raisons, 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 < SFML imo), alors que les deux nécessitent parfois une approche étrange pour travailler avec OGL et dans certains cas ne sont pas vraiment rapides.

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

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

Mentionnons maintenant la partie éducation. Il existe le (in)célèbre tutoriel NeHe. Écrit en C avec l'utilisation de WinApi, avec un code extrêmement peu clair et des solutions dépassées, il reste néanmoins le plus populaire. On peut trouver des choses comme le Red Book, qui sont liées à des versions comme 2.x ou 3.x, mais il n'y a que peu de tutoriels (et non terminés) mentionnant la 4.x.

Avec quoi ?

4 votes

Votre "question" est très imprécise et confuse, citant de nombreuses choses qui ne sont pas vraies ou qui sont des incompréhensions du fonctionnement des choses. Pourriez-vous essayer de clarifier ce que vous essayez d'accomplir et ce que vous avez besoin de découvrir ?

6 votes

J'ai écrit que je voulais "être sûr que ma compréhension actuelle de certaines choses est valable".

0 votes

"GLUT/GLFW n'est-il pas déjà une extension ?" - Non, ils ne le sont pas. GLUT est une bibliothèque indépendante, tout comme GLFW. Les extensions font partie de l'implémentation OpenGL du système lui-même, pas d'une bibliothèque. GLEW est une bibliothèque pour un accès facile aux extensions.

37voto

Nicol Bolas Points 133791

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

Un matériel DX11 est... un matériel sur lequel il est écrit "supporte DirectX 11" sur le côté de la boîte. Je ne suis pas sûr de ce que vous demandez ici ; ne savez-vous pas ce qu'est Direct3D, ce qu'est D3D 11, ou ce qui différencie D3D 11 des versions précédentes ?

Pour information : D3D est une alternative à l'utilisation d'OpenGL pour accéder au matériel de rendu. La version 11 est simplement la version la plus récente de l'API. Et D3D11 ajoute quelques nouvelles choses par rapport à D3D10, mais pas grand chose dont 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éé ne fait pas partie d'OpenGL. Par conséquent, chaque plateforme 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 les 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, afin que vous n'ayez pas à salir votre code avec des détails spécifiques à la plateforme. Vous n'êtes pas obligé d'utiliser l'un d'entre eux.

Accordé, si vous êtes intéressé à apprendre OpenGL il est préférable d'éviter de s'occuper des détails spécifiques à la plate-forme, comme la façon de s'occuper d'un HWND et autres.

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

Il s'agit d'un autre malentendu. Le GLUT est un bibliothèque et non une extension. Une extension OpenGL est partie d'OpenGL . Vous voyez, 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 elle peut également implémenter un certain nombre d'extensions à ce système graphique.

GLUT ne fait pas partie d'OpenGL ; c'est juste une bibliothèque. Le rôle de GLUT est de créer et de gérer une fenêtre OpenGL. GLEW est aussi une bibliothèque, qui est utilisée pour chargement des fonctions OpenGL . Ce n'est pas la seule solution, mais c'est une solution populaire.

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

OpenGL n'est pas un moteur de jeu. C'est un système graphique, conçu pour s'interfacer avec du matériel graphique dédié. Ce travail n'a rien à voir avec des choses comme le chargement de quoi que ce soit à partir de n'importe quel type de fichier. Oui, la création d'un jeu nécessite cela, mais comme indiqué précédemment, OpenGL n'est pas un moteur de jeu.

Si vous devez 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 s'interfacer avec GL), soit télécharger une bibliothèque qui le fait pour vous. Le Wiki OpenGL maintient une Une bonne liste d'outils pour différentes tâches .

Il y a le (in)célèbre tutoriel NeHe. Écrit en C avec l'utilisation de WinApi, avec un code extrêmement peu clair et des solutions dépassées, il reste néanmoins le plus populaire. On peut trouver des choses comme le Red Book, qui sont liées à des versions comme 2.x ou 3.x, mais il n'y a que peu de tutoriels (et non terminés) mentionnant la 4.x.

Avec quoi ?

Le Wiki OpenGL maintient une liste de matériel en ligne pour apprendre des trucs sur l'OpenGL à l'ancienne ou plus moderne.

AVERTISSEMENT : Une auto-promotion éhontée suit !

Mes tutoriels sur l'apprentissage du graphisme sont assez bons, avec de nombreuses sections et est toujours en cours de développement. Il n'enseigne aucune fonctionnalité spécifique à OpenGL 4.x, mais OpenGL 3.3 est complètement compatible avec 4.2. Tous ces programmes fonctionneront parfaitement sur du matériel 4.x.

1 votes

Définitivement un +1 pour les tutoriels

2 votes

Merci beaucoup pour vos tutoriels.

2 votes

De facto, le meilleur tutoriel en ligne pour OpenGL moderne.

19voto

Gerald Points 13865

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

J'éviterais également OpenGL 4.2 à ce stade, à moins que vous ne souhaitiez cibler un matériel spécifique sur des plates-formes spécifiques, car le support est minimal. Par exemple, la dernière version de Mac OSX Lion vient d'ajouter le support d'OpenGL 3.2.

Pour la couverture la plus complète des machines réalisées au cours des dernières années, construisez votre framework autour d'OpenGL 2.1 et ajoutez la prise en charge des fonctionnalités OpenGL plus récentes lorsqu'elles ont un sens. La conception générale doit rester la même. Si vous souhaitez uniquement cibler les machines "actuelles", c'est-à-dire les machines fabriquées à partir de fin 2011, construisez votre framework autour d'OpenGL 3. Seul le matériel le plus récent supporte la 4.2, et uniquement sous Windows et certains Linux. Si vous souhaitez cibler les appareils mobiles et les consoles, utilisez OpenGL ES 2.0.

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

OpenGL SuperBible est un très bon livre, consultez aussi Langage d'ombrage OpenGL . Tout ce que vous faites avec l'OpenGL moderne va impliquer l'utilisation de shaders - plus de fonctionnalité fixe - donc votre plus grand défi va être de comprendre GLSL et comment les pipelines de shaders fonctionnent.

1 votes

+1 Enfin, quelqu'un a mentionné la SuperBible ! La meilleure introduction à l'OpenGL moderne que j'ai vue.

6voto

Antti Points 4673

Je suis actuellement en train d'apprendre l'OpenGL moderne également. J'ai également 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 Guide de programmation OpenGL ES 2.0 qui, à mon avis, est le meilleur choix pour apprendre l'OpenGL moderne à l'heure actuelle. Oui, le livre traite d'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 que vous ne preniez pas de mauvaises habitudes en l'apprenant, tout en restant très proche d'OpenGL de bureau, avec seulement quelques fonctionnalités manquantes, que vous pourrez apprendre assez facilement après avoir maîtrisé OpenGL ES 2.0.

D'un autre côté, vous n'avez pas à vous embrouiller avec les bibliothèques de fenêtrage, etc., comme c'est le cas avec l'OpenGL de bureau, et le livre sur l'OpenGL ES ne vous sera donc d'aucune utilité. Je pense que le choix des bibliothèques à utiliser est très subjectif, mais jusqu'à présent, je me suis bien débrouillé avec SDL, ImageMagick y Ouvrir la bibliothèque d'importation d'actifs .

Le livre a été d'une grande aide, mais à part cela, il y a aussi une belle collection de tutoriels qui enseignent l'OpenGL moderne depuis le début à l'adresse suivante Développement d'OpenGL sur Linux . (Je pense qu'il est valable sur d'autres OS, mais le nom n'en reste pas moins.) Le livre, les didacticiels et un coup d'œil de temps en temps à la Livre orange ont été suffisants pour me faire comprendre les bases de l'OpenGL moderne. Notez que je ne suis toujours pas un maître en la matière, mais cela m'a permis de démarrer.

0 votes

Je recommande vivement SDL si vous voulez un cadre simple pour créer une fenêtre et dessiner avec OpenGL. Je pense que NeHe est toujours un bon guide, certaines API ont été supprimées par d'autres plus appropriées, auquel cas c'est à vous de le mettre à jour :).

3voto

oskob Points 658

Je suis d'accord avec le fait qu'il est très difficile de se familiariser avec OpenGL de nos jours lorsque tous les tutoriels et les exemples utilisent des fichiers de projet périmés, des liens boken, etc. et si vous demandez de l'aide, vous êtes simplement dirigé vers ces mêmes vieux tutoriels.

J'étais vraiment confus avec les tutoriels de NeHe au début, mais quand j'ai eu une meilleure compréhension du C, de la compilation de bibliothèques sous UNIX et d'autres trucs de base, tout s'est mis en place.

En ce qui concerne le chargement des textures, je peux recommander SOIL : http://www.lonesock.net/soil.html

Je ne suis pas sûr, mais je me souviens avoir eu des difficultés à le compiler correctement, mais c'était peut-être ma faible expérience à l'époque. Appelez-moi si vous rencontrez des difficultés !

Un autre conseil utile est de faire tourner une machine virtuelle Linux, puis de télécharger le code d'exemple de NeHe Linux et de le compiler directement. Je pense que vous avez juste besoin de GLUT pour que cela fonctionne.

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

Bonne chance !

0 votes

FreeGLUT est toujours en cours d'élaboration. Personne ne devrait utiliser l'ancien GLUT pour le moment, puisque FreeGLUT est compatible avec lui.

1 votes

Je n'ai pas essayé celui-là mais si vous êtes habitué au GLUT, cela semble être une bonne alternative. Je préfère cependant la syntaxe de GLFW :)

0 votes

Je préfère être en mesure de créer des framebuffers SRGB, ce que FreeGLUT peut faire mais que GLFW ne peut pas faire pour une raison quelconque. C'est une condition sine qua non pour moi ; je refuse de travailler dans un espace de couleurs non linéaire.

2voto

Sergey K. Points 14180

Le point majeur de l'OpenGL moderne est la tesselation et les nouveaux types de programmes de shaders. Je vous recommande donc de commencer par un tutoriel autonome sur la tesselation de l'OpenGL 4, à savoir http://prideout.net/blog/?p=48

Après les manuels et les didacticiels, un bon suivi consiste à jeter un coup d'œil aux moteurs à code source ouvert qui sont basés sur le "nouveau" OpenGL 3/4. En tant qu'un des développeurs, je vous conseille de consulter Moteur Linderdaum .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X