J'utilise OpenGL ES 2.0, j'ai un tas de quads à dessiner, j'aimerais pouvoir passer seulement 4 sommets par quad comme si j'utilisais GL_QUADS, mais en gros, je veux juste savoir la meilleure façon de dessiner un tas de quads séparés.
Jusqu'à présent, ce que j'ai trouvé, je pouvais le faire: -GL_TRIANGLES (6 sommets par quad) -Générer GL_TRIANGLE_STRIP (6 sommets par quad)
Possibilités que j'ai trouvées: -GL_TRIANGLE_STRIPS avec une valeur d'index spéciale qui réinitialise la bande quad (cela signifierait 5 index par quad, mais je ne pense pas que ce soit possible est OpenGL ES 2.0)
3, 4,
4, 5, 6, 7}. Les triangles dégénérés sont3,3,4
et3,4,4
. Est-ce que ça vaut le coup? Non, sauf si vos quads ont tendance à venir par paires (ou plus) avec des bords communs. Si le 2e quad est {3, 2, 4, 5}, alors la bande l'est{0,1,3,2,5,4}
.{0,1,2, 0,2,3, 4,5,6, 4,6,7}
ou tout aussi bons{0,1,2, 2,3,0, 4,5,6, 6,7,4}
. Bonne classe pour aider c'est glText Android / SpriteBatchL'utilisation de tampons d'index n'est pas nécessairement plus rapide, comme indiqué dans les documents Apple, "Pour de meilleures performances, vos modèles doivent être soumis comme une seule bande triangulaire non indexée à l'aide de glDrawArrays" .
Donc, même si a le
GL_TRIANGLE_STRIP
fera dans 4 sommets sans avoir besoin d'un tampon d'index, et vous pouvez utiliser un tampon d'index, il est assez boiteux d'essayer de "sauvegarder" en répétant 2 sommets . Pour cette raison, je vous suggère de dessiner 2 séparationsGL_TRIANGLES
et de répéter les 2 sommets sur la diagonale .la source
Le gros gain sur le bureau est de déplacer les données dans les VBO GL_STATIC_DRAW. Vraisemblablement, cela est également vrai sur le GPU MBX de l'iPhone.
la source
L'utilisation
GL_TRIANGLE_FAN
pour un quad utilise 4 sommets, pas 6.la source
GL_TRIANGLE_STRIP
, comme d'autres réponses l'ont déjà souligné.