Nella mia applicazione disegno un sacco di cubi tramite OpenGL ES Api. Tutti i cubi sono delle stesse dimensioni, solo che si trovano in diverse coordinate nello spazio. Posso pensare a due modi di disegnarli, ma non sono sicuro di quale sia il più efficiente. Non sono un esperto di OpenGL, quindi ho deciso di chiedere qui.Modalità di disegno efficiente in OpenGL ES
Metodo 1, che è quello che uso ora: Poiché tutti i cubi sono di dimensioni identiche, a calcolare vertex buffer, index buffer, tampone normale e buffer di colore sola volta. Durante un aggiornamento della scena, analizzo tutti i cubi, eseguo bufferData() per lo stesso set di buffer e quindi disegno la mesh triangolare del cubo usando la chiamata drawElements(). Poiché ogni cubo si trova in una posizione diversa, traduco la mvMatrix prima di disegnare. bufferData() e drawElements() viene eseguito per ogni cubo. Con questo metodo, probabilmente risparmio molta memoria, non calcolando i buffer ogni volta. Ma sto facendo molte chiamate a drawElements().
Metodo 2 sarebbe: trattare tutti i cubi come insieme di poligoni sparsi in tutto lo scena. Calcola vertici, indici, colori, buffer normali per ciascun poligono (in realtà triangoli all'interno dei poligoni) e trasferiscili nella memoria della scheda grafica nella singola chiamata a bufferData(). Quindi disegnali con una sola chiamata a drawElements(). Il vantaggio di questo approccio è che faccio una sola chiamata bindingBuffer e drawElements. Lo svantaggio è che uso molta memoria per creare i buffer.
La mia esperienza con OpenGL è abbastanza limitata, per non si sa quale uno dei metodi di cui sopra è meglio dal punto di vista delle prestazioni.
Sto usando questo in un'applicazione WebGL, ma è una generica domanda di OpenGL ES.
Non so la risposta, ma dopo 2 giorni w/o risposte I sus Il tuo approccio migliore è provare a implementare il metodo 2 ed eseguire alcuni test delle prestazioni. – LarsH
sì, lo immagino anche io. posterò quello che trovo. – Jayesh