Domanda

Devo disegnare lo sfondo per uno sparatutto a scorrimento spaziale 2D. Devo implementare 3 strati di stelle: una nebulosa distante (che si muove molto lentamente) sullo sfondo, uno strato di stelle lontane (che si muove lentamente) e uno strato di stelle vicine (che si muovono normalmente) sopra le altre due.

Il modo in cui l'ho provato per la prima volta è stato l'utilizzo di 3 trame di 320 x 480 che erano png trasparenti delle stelle. Ho usato GL_BLEND e SRC_ALPHA, ONE_MINUS_SRC_ALPHA.

I risultati non sono stati grandi nemmeno sul 3GS. Sui dispositivi di prima generazione, l'FPS è sceso a 40..50, quindi penso che lo sto facendo nel modo sbagliato.

Quando disabilito GL_BLEND tutto funziona alla grande anche sui dispositivi di 1a generazione e l'FPS è tornato di nuovo a 60 ... quindi deve essere il fatto che sto cercando di apporre trame grandi e trasparenti.

Il problema è che non so come farlo in un altro modo ...

Dovrei disegnare solo la prima nebulosa come una trama opaca e quindi provare a emulare il livello stella centrale e superiore con piccoli punti che si muovono sullo schermo?

Esiste un altro approccio al problema della fusione? Come posso accelerare il processo di rendering? Una grande trama (set di tessere) è la risposta?

Per favore, aiutatemi perché sono bloccato qui e non posso uscire.

È stato utile?

Soluzione

Non so come vuoi che siano le tue stelle, ma potresti voler provare a spostarle da una trama alla geometria usando GL_POINTS in DrawElements o DrawArrays potrebbero semplicemente sostituire i primi due livelli con strati di geometria. Puoi manipolare i punti usando PointSize , PointSizePointerOES e PointParameter per modificare il rendering dei punti.

Altri suggerimenti

Potresti voler usare il multi-texturing per vedere se questo accelera. A ogni fase multi-trama può essere assegnata una matrice di trasformazione unica, quindi dovresti essere in grado di tradurre ogni livello a velocità diverse.

Credo che tutti i modelli di iPhone supportino due livelli di trama, quindi dovresti essere in grado di combinare due livelli in una singola chiamata di disegno. Potrebbe essere ancora necessario ricorrere alla fusione per il terzo livello.

Nota anche che l'alfa test potrebbe essere più veloce dell'alfa miscelazione .

Buona fortuna!

La nebulosa posteriore dovrebbe essere sicuramente opaca; tutto il resto viene attirato su di esso e suppongo che l'unica cosa dietro sia nera. Inoltre, l'orgoglio ha un punto: supponendo che i tuoi livelli stellari possano avere effettivamente alpha a 1 bit, è sicuramente qualcosa che puoi provare. In caso contrario, anche la tecnica GL_POINTS menzionata da Harald avrebbe funzionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top