Sto pensando a una scena di tipo Minecraft, dove per voxel intendi un mondo di blocchi che sono effettivamente resi usando poligoni:
Se usi uno shader di geometria, sarà difficile evitare di avere esattamente tre facce (o qualsiasi altra cosa) per voxel.
Se hai molti blocchi adiacenti che hanno la stessa trama, puoi usare la piastrellatura delle trame per avere molti meno triangoli nella tua striscia (degenerata) in un approccio VBO. Voglio dire, se c'è una bella grande area piatta 6x6 di voxel di erba, puoi disegnare l'intera cima in soli 2 triangoli anziché 64.
Con l'approccio GS non puoi fare il banale abbattimento di facce occluse da voxel adiacenti che è molto semplice anche con un approccio VBO.
Non ho provato l'approccio GS, ma posso dire che l'approccio VBO con la combinazione di ripetizioni di tessere adiacenti funziona molto bene. Ho trovato che scherzare con gli indici degli elementi è molto più lento della semplice ripetizione dei vertici. Se dividi il tuo mondo in piccoli cubetti, puoi in genere usare solo un byte per componente per vertice e persino impacchettare le informazioni sulla trama e le normali (una faccia su un cubo allineato all'asse ha solo 3 possibili normali) ecc. In un quarto byte per creare 4 byte per vertice che è bello e veloce.
Ho usato VBO separati per ognuna delle 6 facce - ovviamente devi solo disegnarne al massimo 3. Ciò si adatta perfettamente alle diverse trame normalmente utilizzate nelle parti superiori dei voxel in stile Minecraft. Perché per ogni set il normale e tale è quindi uniforme.
Con l'uso di pixmap piastrellate verticalmente in un atlante con GL_REPEAT
sull'asse orizzontale e avendo versioni ruotate di 90 gradi delle pixmap nello stesso atlante, ho scoperto che posso disegnare enormi quantità di blocchi apparentemente diversi usando lo stesso VBO nella stessa chiamata. Nell'esempio di area erbosa 6x6, l'avrei diviso in 12 triangoli poiché ho ripetuto solo una dimensione nel mio atlante.
Per lo più ho fatto in modo che funzionasse sull'estremità più bassa dei chip grafici e mobile integrati, dove GS è solo qualcosa su cui posso sognare di giocare un giorno.