Préconcepts
Ok, ce que j'ai rassemblé jusqu'à présent est le suivant:
- n'utilisez pas de pipeline fixe (obsolète ou va être obsolète)
- vbos stocke des "modèles d'objets" (n données de sommet, principalement)
- les vaos décrivent la façon dont les données sont définies de sorte que les appels de tirage sachent quelle partie de chaque vbo correspond à quel type d'informations de sommet (un vao peut faire référence à plusieurs vbos, l'inverse est un peu difficile)
- chaque appel de tirage envoie également des données de sommet aux shaders
Comment je vois la 3D (facultatif)
Compte tenu de ces informations, je peux voir à quel point dessiner des objets 3D complexes est très agréable avec OpenGL moderne. Vous chargez essentiellement un tas de modèles d'objets (probablement à partir de Blender ou d'un autre logiciel similaire) dans des VBO avec des coordonnées locales, puis vous fournissez simplement pour chaque instance d'un objet un paramètre de shader différent (décalage) pour dessiner dans l'espace mondial.
Problème / question
En 2D, cependant, les problèmes et les priorités sont complètement différents. Vous ne dessinez pas beaucoup d'objets complexes, vous n'avez pas besoin de matrices de projection compliquées et ainsi de suite et les shaders sont beaucoup plus simples.
Quelle serait la meilleure façon de dessiner des géométries changeantes fréquemment (vraiment fréquemment, essentiellement chaque image) avec OpenGL moderne?
Dans le paragraphe suivant, vous pouvez voir quelques idées de problèmes (le problème des cercles et des rectangles), qui identifient mieux le type de changements qui m'intéressent.
Mes tentatives (facultatif)
J'ai donc commencé à réfléchir à la façon dont je traiterais le dessin d'une géométrie 2D de base à l'écran:
- un carré: charger un
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO pour la géométrie d'un carré dans l'espace local, puis fournir au shader la largeur réelle du carré et les coordonnées du monde et les informations de couleur
refroidit, semble facile. Passons à un cercle:
- un cercle: éventail en triangle avec ... eh. quelle précision (nombre de sommets)? pour les petits cercles, la précision doit être petite et pour les cercles de bogues, la précision doit être élevée. Il est clair que le chargement de 1 VBO ne peut pas convenir à tous les cas. Que faire si j'ai besoin d'ajouter de la précision car un cercle est redimensionné pour être plus grand?
Moins cool. Passons à quelque chose d'un peu plus facile, un rectangle:
- un rectangle: hein. il n'y a pas de "géométrie rectangle générale". Vous avez juste une proportion largeur / hauteur et c'est tout, mais chaque rectangle est probablement différent si la taille change.
Comme vous pouvez le voir, les choses se dégradent à partir de là. Surtout avec des polygones complexes et ainsi de suite.
Aucune politique de code: P
J'ai juste besoin d'un aperçu de l'idée, aucun code n'est nécessaire, en particulier du code C ou C ++. Dites simplement des trucs comme: "faire un VBO avec ces données de sommet, puis le lier, ...".