Je complète un analyseur d'objet de front d'onde et je veux l'utiliser pour construire des objets maillés génériques. Mon moteur utilise OpenGL 4 et les shaders pour tout dessiner dans mon moteur.Rendu d'un maillage dans OpenGL comme une série de sous-groupes?
Ma question est de savoir comment assurer la meilleure efficacité de rendu pour le rendu d'un maillage.
Un wavefront .obj file a normalement plusieurs sous-groupes d'objets spécifiés.
Un sous-groupe peut se voir attribuer un matériau spécifique (par exemple une couleur rouge brillant). Par conséquent, un maillage peut être une collection assez complexe de sous-groupes, chacun ayant son propre matériau affecté.
Mes questions sont -
Q. Dois-je dessiner chaque sous-groupe séparément par exemple avec un appel à glDrawElements pour chaque sous-groupe? (Donc, si j'avais 4 sous-groupes, je dois faire quatre appels glDrawElements, invoquant ainsi le shader 4 fois avec 4 changements uniformes (pour les matériaux/textures) séparées)
glDrawElements(GL_TRIANGLES, nNumIndicesInGroup, GL_UNSIGNED_INT, ((char*)NULL)+ first-vertex-offset);
Si cela est correct , alors je vais devoir calculer:
les indices dans chaque sous-groupe (ce qui implique un tableau d'index séparé et VAO pour chaque sous-groupe) le sommet de décalage du début du sous-groupe
Cela semble terriblement inefficace, est-ce que j'aboie le mauvais arbre?
En outre, à partir du Wavefront obj wiki page:
Smooth shading across polygons is enabled by smoothing groups.
s 1
...
# Smooth shading can be disabled as well.
s off
...
Quelqu'un peut-il suggérer ce que les valeurs d'ombrage lisse indiquent? Par exemple. s1, s2, s4 etc.
Cette question, comme indiqué, ne peut pas être répondue sans en savoir plus sur ce que sont les données de vertex et ce que vous allez faire avec. Des questions telles que les matériaux, les shaders, etc. ont un impact sur les performances. –