2010-02-10 17 views
5

Ho bisogno di antialias in iPhone 3G (OpenGL ES1.1), NON iPhone 3G con OpenGL ES.2.0. Ho disegnato il modello 3d e ho il prossimo: i pixel sui bordi del modello sembrano denti.antialiasing iPhone OpenGLES

Ho provato a impostare i filtri per la trama, ma questo filtro rende SOLO la trama INSIDE aspetto meglio.

Come posso fare una buona antializzazione? Forse dovrei usare qualsiasi superficie liscia per disegnare triangoli? Se sì, allora come è possibile in OpenGL ES1.1?

grazie.

risposta

4

È possibile eseguire il rendering in un FBO più grande e quindi utilizzarlo come una trama su un quadrato.

Dai un'occhiata all'articolo this per una spiegazione.

+0

Puoi spiegarci più dettagliatamente? grazie. –

+0

Grazie mille per questo link! E proverò a "renderizzare in un FBO più grande". –

+0

Ho pubblicato una nuova risposta: il concetto è lo stesso, ma c'è un modo più semplice per farlo nelle versioni più recenti di iOS. – benzado

2

Controllare i parametri EGL_SAMPLE_BUFFERS e EGL_SAMPLES su eglChooseConfig() e su glEnable(GL_MULTISAMPLE).

MODIFICA: Hrm, apparently sei sfortunato, almeno per quanto riguarda gli approcci standardizzati. Come menzionato in quella discussione, è possibile eseguire il rendering su una grande trama fuori schermo e ridimensionarla su un quadrante più piccolo sullo schermo o far oscillare la matrice di visualizzazione più volte.

+0

Grazie, ma openGL su iPhone non ha supporto eglChooseConfig(). O mi sbaglio? Ma quando ho impostato GL_LINE_SMOOTH e uso glDrawArrays con GL_LINE_STRIP ho una linea antialiasing SUPER. Ma quando ho impostato GL_TRIANGLES, questo effetto scompare. –

+0

Sembra che tu abbia ragione. Dispari. Comunque, ho trovato una discussione con alcuni approcci alternativi e ho modificato la risposta. – genpfault

+0

genpfault, può essere. ho cercato su Google più siti e ho sentito che esiste un solo modo: prova a utilizzare questo http://www.gamedev.net/community/forums/topic.asp?topic_id=548956 o simile. –

8

A partire da iOS 4.0, l'anti-aliasing a schermo intero è direttamente supportato tramite un'estensione Apple in OpenGL. Il concetto di base è simile al suggerimento di epatel: rendere la scena su un framebuffer più grande, quindi copiarla su un framebuffer di dimensioni dello schermo, quindi copiare quel buffer sullo schermo. La differenza è, invece di creare una texture e renderla su un quad, l'operazione di copia/campione viene eseguita da una singola chiamata di funzione (in particolare, glResolveMultisampleFramebufferAPPLE()).

Per i dettagli su come impostare i buffer e modificare il codice del disegno, è possibile leggere a tutorial on the Gando Games blog che è scritto per OpenGL ES 1.1; c'è anche a note on Apple's Developer Forums che spiega la stessa cosa.

Grazie a Bersaelor per pointing this out in another SO question.

2

Abbiamo trovato un altro modo per raggiungere questo obiettivo. Se si modificano le trame e si aggiunge ad esempio una cornice a 2 pixel di pixel trasparenti, i pixel colorati nella trama vengono miscelati con i pixel trasparenti, se necessario, dando un fondamentale effetto anti-alias. Puoi leggere l'intero articolo qui in our blog.

Il vantaggio di questo approccio è che non si esegue il rendering di un'immagine più grande, né si copia un buffer o, peggio ancora, si crea una trama da un buffer, quindi non c'è alcun impatto sulle prestazioni.

+0

Questo link a [il nostro blog] (http://agileroute.com/blog/how-to-emulate-anti-aliasing-in-opengl-es-1-1) è rotto –

Problemi correlati