2010-01-03 27 views
7

Quiero dibujar muchas esferas (~ 100k) usando OpenGL. Hasta el momento, estoy haciendo algo comoDibujando muchas esferas en OpenGL

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

Antes de usar esferas adecuadas, solía GL_POINTS. Eso me permitió llamar al glDrawArrays con una matriz que contiene todos los puntos que fue muy eficiente. ¿Hay alguna manera mejor que el código anterior para dibujar muchos objetos idénticos?

+1

como mencionó Gregory Pakosz, la creación de instancias es la forma estándar de hacerlo. Sin embargo, realmente no estoy obteniendo lo que el caso del mundo real requeriría ~ 100K esferas. Todas las cosas en las que puedo pensar serían mejor atendidas con puntos redondos. ¿Te importa arrojar algo de luz sobre tu caso de uso? – Bahbar

+0

Simulo los anillos de Saturno y quiero visualizar los resultados en tiempo real. La retroalimentación visual de "profundidad" es vital y, por lo tanto, los puntos simples no funcionan. Ver por ejemplo: http://hanno-rein.de/examplespheres.png y http://hanno-rein.de/examplepoints.png – hanno

+1

Bonita ilustración. Puede simular el aspecto de la esfera haciendo la iluminación en un sombreador de píxeles. Incluso el solo hecho de aplicar una textura básica ya te ayudaría allí. Siendo un punto, 100K esferas están destinadas a perjudicar el rendimiento, mientras que los puntos no lo son tanto (como ya habrás notado). – Bahbar

Respuesta

2

Puede usar sprites de puntos y un sombreador de fragmentos para duplicar el efecto de una esfera renderizada sin la geometría real de la esfera. Sin embargo, probaría instar primero.