Il modo più veloce per disegnare piccole particelle in opengl?


8

Domanda rapida: qual è il metodo più veloce per eseguire il rendering di una vasta gamma di particelle 4x4 / 8x8 in OpenGL? Attualmente spendo 2 triangoli per ognuno, ma penso che sia lento, quindi mi piacerebbe davvero sapere se lo sto facendo bene .....


1
Solo un promemoria che, poiché si tratta di una domanda relativa alle prestazioni, è necessario misurare le prestazioni sulla propria piattaforma di destinazione, (a) per essere sicuri che sia abbastanza costoso da valere la pena di preoccuparsi e (b) testare l'accelerazione di qualsiasi soluzione proposta.
Nathan Reed,

Risposte:


6

Puoi disegnare punti con OpenGL.

Vuoi chiamare glDrawArrays () o glDrawElements () con GL_POINTS (invece di GL_TRIANGLE_STRIP o qualunque cosa tu stia utilizzando.)

Questo disegnerà punti sullo schermo in base alla dimensione attuale del punto, che puoi impostare tramite glPointSize () . È anche possibile alias di questi punti, ma nella mia esperienza non tutti i driver / hardware supportano punti con alias.

Non puoi strutturare questi punti; sono solo un singolo colore.


Grazie per il suggerimento. Ti capita di sapere se potrei fare il metodo GL_POINT con gli shader in modo da poter mappare anche una trama su di loro?
user1010005

1
Puoi usarlo con gli shader, ma c'è un solo vertice per un punto (al centro), quindi potresti avere difficoltà a trovare tex coords. stackoverflow.com/questions/5839095/… sembra che parli un po 'di questo ...
notlesh,

Puoi impostare uno sprite punto anche con GL_POINTS.
Mick,

1
@ user1010005 Per mappare la trama con GL_POINTS puoi guardare in GL_POINT_SPRITE_ARB. Inoltre, sono abbastanza sicuro che i punti finiscano sempre per occupare lo stesso numero di pixel sullo schermo, non importa quanto tu sia vicino o lontano da loro.
kevintodisco,

@ktodisco, puoi passare la dimensione del punto come attributo. facendo questo ho ottenuto un discreto effetto stella. per modificare le dimensioni nel vert shader, si assegna la variabile gl_PointSize
notlesh,

3

Nel core OpenGL 3.2 e versioni successive, gli shader geometrici sono disponibili per l'uso. Per una breve panoramica, diresti a OpenGL solo di disegnare i punti che rappresentano le posizioni delle tue particelle, e questi punti passerebbero normalmente attraverso lo shader di vertice, ma quando arrivano allo shader di geometria, costruisce il rettangolo (out di due tris) emettendo vertici nella fase successiva della pipeline. Insieme ai vertici è possibile generare a livello di codice normali e coordinate di trama.

Dato che questo è tutto fatto nell'hardware, sono abbastanza sicuro che sia il modo più veloce in questo momento per eseguire il rendering di particelle punto-sprite.


1
Questa è probabilmente una soluzione migliore di GL_POINTS, ma non funzionerà con le implementazioni OpenGL precedenti (e OpenGL ES).
notlesh,

Sembra fantastico ma ho intenzione di
trasferire il

2
@ user1010005 Solo un suggerimento, dovresti menzionarlo quando fai la domanda, quindi sappiamo con quali vincoli lavorare :)
kevintodisco

Sono un principiante con spiacevole dispiacere D:
user1010005

vorrei AMORE per vedere il geometry shader messo a disposizione in OpenGL ES. ) =
notlesh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.