Bonjour,
Je suis actuellement entrain d'apprendre à utiliser opengl en réalisant une petite application en 3d via lwjgl en java. J'ai besoin d'aide pour comprendre comment je peux afficher des objets avec des mesh différents en un seul draw call.
Ce que j'ai actuellement et qui fonctionne avec un seul mesh:
J'ai un model d'arbre de Type A dont j'enregistre toutes les infos (vertex, indices) dans un vbo. Puis ensuite j'affiche les éléments avec la fonction suivante :
glDrawElementsInstanced(GL_TRIANGLES, this.modelManager.getElementCount, GL_UNSIGNED_INT, 0, NB_MAX_MODEL);
Tout s'affiche correctement et j'obtiens bien NB_MAX_MODEL affiché à l'écran.
Maintenant ce que je souhaite c'est ajouter un arbre de Type B et c'est la que ça ce complique . Ce que j'ai tenté de faire c'est d'ajouter les infos de type B dans le meme vbo que type A en faisant attention de bien incrémenter les indices. ce qui se passe alors c'est que les 2 arbres sont affiché l'un sur l'autre. Donc j'ai modifié la fonction draw utilisé.
Je suis pas sure que ce soit la bonne fonction mais j'utilise la fonction glMultiDrawElements mais je n'ai maintenant plus d'affichage.
1 2
| int[] count = new int[] {NB_MAX_MODEL/2, NB_MAX_MODEL/2};
glMultiDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, this.modelManager.pointerBuffer); |
J'essaye d'affiché la moitié d'arbre de type A et la moitié de Type B. Je suis pas sure d'avoir compris le paramètre "count"
Donc ma question est ce que je suis sur la bonne piste ?
Merci d'avance pour l'aide
EDIT : j'ai trouvé qu'en utilisant la fonction glDrawElementsInstancedBaseVertex je peux choisir quel type d'arbre afficher par contre je ne trouve pas la version "multi" de cette fonction
je dois faire 2 draw call pour avoir les 2 types d'arbre
glDrawElementsInstancedBaseVertex(GL_TRIANGLES, this.modelManager.getElementCount().get(1), GL_UNSIGNED_INT, 0, NB_MAX_MODEL, this.modelManager.getElementCount().get(0));
et
glDrawElementsInstancedBaseVertex(GL_TRIANGLES, this.modelManager.getElementCount().get(0), GL_UNSIGNED_INT, 0, NB_MAX_MODEL, 0);
Partager