2010-04-08 12 views
7

Sulla base della mia lettura di Ch. 6 nel Libro Rosso, cambiando le cose che devono essere cambiate per ES, ho pensato che il seguente codice avrebbe dovuto farlo:Come si ottiene Polygon Antialiasing in OpenGL ES su Android 1.5?

gl.glEnable(GL10.GL_POLYGON_SMOOTH); 
gl.glBlendFunc(GL10.GL_SRC_ALPHA_SATURATE, GL10.GL_ONE); 
gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST); // no visible diff 
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
gl.glColor4f(1, 1, 1, 1); 
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);   // first and count 

ecc

Ma quanto sopra fallisce. Non vi è alcuna differenza visibile nell'output, gli artefatti di aliasing sono altrettanto dolorosamente evidenti di prima che venissero inserite le chiamate a glEnable ... glHint.

In realtà, quello che ho appena descritto era quando avevo GL_LINE_SMOOTH al posto di GL_POLYGON_SMOOTH. Quest'ultimo non è nemmeno stato trovato! Allora, dov'è, se non in GL10? O come potrebbe essere stato lasciato fuori da OpenGL ES? Come dovremmo disegnare i poligoni riempiti con antialiasing se non con GL_POLYGON_SMOOTH?

risposta

3

Senza provarlo, ciò che si sta facendo in precedenza non sembra errato. Tuttavia, molti telefoni non supportano effettivamente l'anti-aliasing nonostante l'API.

Si dovrebbe essere in grado di ottenere l'anti-aliasing a schermo intero disegnando lo schermo più volte mentre si agita la matrice perpective.

Vedi http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node63.html e this post per quanto riguarda lo stesso problema su iPhone

+1

Andres è sicuramente a qualcosa e la risposta è utile. Ma mi chiedo: l'emulatore non supporta l'anti-aliasing? Perché vedo l'errore anche sull'emulatore. A proposito: la prima cosa che ho notato sul secondo link di Andres è che la domanda è rimasta senza risposta anche lì! –