2010-01-03 6 views
7

Je veux dessiner de nombreuses sphères (~ 100k) en utilisant OpenGL. Jusqu'à présent, je fais quelque chose commeDessin de plusieurs sphères dans OpenGL

for (int i=0; i<pnum; i++){ 
    glPushMatrix(); 
    glTranslatef(bpos[i].x, bpos[i].y, bpos[i].z); 
    glCallList(DListSPHERE); 
    glPopMatrix(); 
} 

Avant d'utiliser des sphères appropriées, je GL_POINTS. Cela m'a permis d'appeler glDrawArrays avec un tableau contenant tous les points qui était très efficace. Y at-il un meilleur moyen que le code ci-dessus pour dessiner de nombreux objets identiques?

+1

Comme l'a mentionné Gregory Pakosz, l'instanciation est la façon standard de le faire. Cependant, je ne comprends vraiment pas ce que le monde réel nécessiterait ~ 100K sphères. Toutes les choses auxquelles je peux penser seraient mieux servies avec des points ronds. Vous voulez faire la lumière sur votre cas d'utilisation? – Bahbar

+0

Je simule les anneaux de Saturne et je veux visualiser les résultats en temps réel. Le retour visuel de la «profondeur» est vital et par conséquent les points simples ne fonctionnent pas. Voir par exemple: http://hanno-rein.de/examplespheres.png et http://hanno-rein.de/examplepoints.png – hanno

+1

Belle illustration. Vous pouvez simuler l'aspect de la sphère en faisant l'éclairage dans un pixel shader. Même l'application d'une texture de base vous y aidera déjà. Point étant, 100K sphères est lié à blesser perf, tandis que les points ne sont pas autant (comme vous l'avez déjà remarqué). – Bahbar

Répondre

2

Vous pouvez utiliser des sprites ponctuels et un fragment shader pour dupliquer l'effet d'une sphère rendue sans la géométrie de sphère réelle. J'essaierais d'instancier d'abord, cependant.

Questions connexes