2012-10-18 14 views
5

Ho una grafica a caratteri 2D che verrà mappata su uno scheletro di Box2d. Il braccio del personaggio, ad esempio, potrebbe essere costituito da 2 rettangoli fisici collegati a un giunto al gomito. Ogni rettangolo avrà il suo sprite artistico corrispondente. L'arte per il braccio inferiore non sarà completamente rettangolare. Potrebbe essere una fonte rettangolare di png, ma ci sarà molto spazio negativo in cui il braccio non è necessariamente disegnato.Come suddividere l'arte 2D in triangoli usando OpenGL

La mia domanda è qual è il modo migliore per suddividere l'arte 2D in triangoli? Devo trattare tutti gli sprite piatti come un semplice rettangolo composto da 2 triangoli, lasciando un sacco di spazio alfa? O è meglio suddividere la forma in più triangoli e cercare di far corrispondere la forma reale (eventualmente con un ventaglio triangolare)? Quali potrebbero essere alcuni dei vantaggi/svantaggi di ciascun approccio? Aggiornerò le trame mentre varie cose accadono al personaggio.

Ecco un esempio di cosa sto parlando:

img

(il quadrato rosso è la forma fisica e le linee blu sono possibili configurazioni a triangolo)

risposta

1

Meno geometria è di solito migliore per le prestazioni (3 ° da sinistra).

La triangolazione "esatta" (4 ° da sinistra) sarebbe utile per il rilevamento di collisioni ad alta fedeltà (i laser si riflettono su un asteroide lucido?).

Fare attenzione agli aggiornamenti frequenti delle texture. glTexSubImage2d() è la strada da percorrere.

Se l'implementazione GL lo supporta, è possibile eseguire caricamenti asincroni using PBOs.

+0

Grazie. Non sto considerando le forme d'arte reali per il rilevamento delle collisioni. Probabilmente tutto sarà fatto con il modello fisico. Suppongo che mi stavo chiedendo se tutto quello spazio alfa renderizzato extra avrebbe rimosso il vantaggio della semplicità della soluzione a 2 triangoli ... specialmente quando le trame diventano meno rettangolari e viene utilizzato uno spazio più negativo . Qualcosa di circolare, come una trama di meteoriti, avrebbe molto spazio negativo nella trama rettangolare. Sovrapporre più di queste aree alfa = 0 l'una sull'altra dovrebbe avere qualche effetto negativo, giusto? –

+2

Se non hai bisogno dell'effettivo mix alfa (che richiede più larghezza di banda di memoria a causa della lettura dei pixel di destinazione aggiunta) puoi farla franca con [alpha testing] (http://www.opengl.org/wiki/Transparency_Sorting#Alpha_test) , che semplicemente scarta un pixel in entrata se il valore alfa è inferiore ad una certa soglia. In realtà penso che sia possibile combinare il blending e l'alpha testing per ottenere il meglio da entrambi i mondi: con un valore di soglia basso i pixel zero-zero vengono abbattuti precocemente (prima del blending) e allo stesso tempo si lasciano sfumare alfa agli angoli degli oggetti. – genpfault

+0

Grande ... ha molto senso ed è molto utile. –