Domanda

La compressione delle trame PVR funziona in modo soddisfacente nel mio gioco per iPhone, ma ho problemi con la piastrellatura di più trame insieme. Fondamentalmente, ho uno sfondo molto grande che è diviso in più tessere 512x512, tutte compresse in PVR. Quindi vengono disegnati insieme per apparire come una grande immagine di sfondo. Il modo in cui funziona il PVR, perché non sa che dovrebbe comprimere la trama come se fosse una trama davvero grande, ovvero utilizzare le informazioni piastrellate di un vicino per determinare come eseguire la compressione PVR.

Mi viene in mente forse un paio di modi per farlo.

1) In qualche modo dire al programma da riga di comando texturetool di adattarsi ad altre immagini che saranno adiacenti.
2) Utilizzare il programma da riga di comando per generare un'enorme trama PVR che rappresenti l'intera immagine, quindi in qualche modo suddividere i byte in più immagini - probabilmente impossibile.
3) Fai una sorta di inganno OpenGL ES che fonde bene i bordi.
4) Fai un po 'di complicità quando ho informazioni ridondanti in ogni tessera e quindi ritaglia quelle aree quando viene disegnata la trama (per favore no).

Spero di poter fare 1, 2 o 3, oppure esiste un'altra soluzione ben nota.

È stato utile?

Soluzione

Ho finito con l'opzione 4. Non penso che questa sia stata una situazione in cui PVRTC non è appropriato - in realtà è quasi una necessità. Quando ho un totale di 24 trame 512x512 in memoria contemporaneamente (che rappresentano uno sfondo e un primo piano molto grandi), mettere quelli in decompressione è un suicidio. Quindi ho semplicemente usato la compressione PVR come di consueto, quindi ho modificato alcune righe di codice nel mio algoritmo di piastrellatura in modo che si sovrapponessero e tagliassero su 15 pixel su ciascuna estremità. Voila, sta benissimo. Ci sono voluti un paio di giorni ed è stato piuttosto fastidioso, ma penso che questa sia una buona opzione per le persone che hanno bisogno di sfondi piastrellati molto grandi su iPhone.

Altri suggerimenti

Il mio miglior consiglio, ma non quello che hai chiesto, è sapere quando PVRTC non è appropriato. Di gran lunga la soluzione più semplice è quella di non usare PVRTC per quelle piastrelle. Ho trascorso molto tempo cercando di piegare PVRTC per lavorare in situazioni per le quali non è adatto.

Detto questo,

Quando si utilizza PVRTC, si presume sempre che la trama sia piastrellata (con se stessa), quindi i pixel sul bordo destro influiscono sui pixel sul bordo sinistro (lo stesso con la parte superiore e inferiore). Quindi le scelte 1 o 2 probabilmente non funzioneranno.

Una possibilità è quella di aggiungere un canale alfa alle tessere e consentire loro di svanire attorno ai bordi in modo che quando le si sovrappongono, si dissolvono l'una nell'altra. Tieni presente che PVRTC tende a funzionare meglio con graduali dissolvenze alfa. I bordi alfa duri spesso presentano artefatti in PVRTC.

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