2010-01-03 11 views
7

Desidero disegnare molte sfere (~ 100k) utilizzando OpenGL. Finora, sto facendo qualcosa di simile aDisegno di molte sfere in OpenGL

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

Prima di usare le sfere appropriate, ho usato GL_POINTS. Ciò mi ha permesso di chiamare glDrawArrays con un array contenente tutti i punti che era molto efficiente. C'è un modo migliore rispetto al codice precedente per disegnare molti oggetti identici?

+1

come menzionato da Gregory Pakosz, l'istanza è il modo standard per farlo. Tuttavia, in realtà non sto ottenendo quello che il caso reale richiederebbe ~ 100.000 sfere. Tutto ciò che posso pensare sarebbe meglio servire con punti rotondi. Ti va di far luce sul tuo caso d'uso? – Bahbar

+0

Simulo gli anelli di Saturno e voglio visualizzare i risultati in tempo reale. Il feedback visivo di "profondità" è vitale e quindi i punti semplici non funzionano. Vedi per esempio: http://hanno-rein.de/examplespheres.png e http://hanno-rein.de/examplepoints.png – hanno

+1

Bella illustrazione. Puoi simulare l'aspetto della sfera facendo l'illuminazione in un pixel shader. Anche solo l'applicazione di una texture di base potrebbe aiutarti già. Essendo il punto, le sfere 100K sono destinate a ferire perf, mentre i punti non lo fanno (come già notato). – Bahbar

risposta

2

È possibile utilizzare spill point e uno shader di frammenti per duplicare l'effetto di una sfera renderizzata senza la geometria della sfera effettiva. Vorrei provare ad istanziare prima, comunque.