M0286_Libro Curso

2: Avanzado en Android

Para continuar con nuestra aplicación debemos detenernos un poco, y hablar de la iluminación. OpenGL nos permite definir hasta ocho fuentes de luz en su escena. En la iluminación tenemos dos partes, la luz y el objeto que queremos iluminar. Comencemos hablando de la luz. Las bibliotecas son compatibles con tres tipos: ■ Difusa : es una iluminación suave, parecida a la que da la luz fluorescente. ■ Ambiental: es un resplandor general de luz tenue que ilumina la escena completa. ■ Especular (o de espejo ): es una luz reluciente, procedente de fuentes brillantes direccionales. Estos valores se incluyen en la ecuación que se define en el método GLRenderer. onSurfaceCreated() : public void onSurfaceCreated(GL10 gl, EGLConfig config) { // … //Definimos la iluminación float lightAmbient[] = new float [] { 0.2f, 0.2f, 0.2f, 1 }; float lightDiffuse[] = new float [] { 1, 1, 1, 1 }; float [] lightPos = new float [] { 1, 1, 1, 1 }; gl.glLightfv(GL10. GL_LIGHT0 , GL10. GL_AMBIENT , lightAmbient, 0); gl.glLightfv(GL10. GL_LIGHT0 , GL10. GL_DIFFUSE , lightDiffuse, 0); gl.glLightfv(GL10. GL_LIGHT0 , GL10. GL_POSITION , lightPos, 0); Hemos definido la fuente de iluminación en la posición (1,1,1). Será una luz blanca con una única dirección, con un componente difuso brillante y uno más ambiental tenue. En nuestro ejemplo dejamos de usar la iluminación especular. A continuación, vamos a añadir los materiales con los que estará fabricado nuestro cubo. Añadimos este código al método onSurfaceCreated() así definimos la reacción del material con los tres tipos de iluminación: // Definimos materiales con los que esta echo float matAmbient[] = new float [] { 1, 1, 1, 1 }; float matDiffuse[] = new float [] { 1, 1, 1, 1 }; gl.glMaterialfv(GL10. GL_FRONT_AND_BACK , GL10. GL_ gl.glMaterialfv(GL10. GL_FRONT_AND_BACK , GL10. GL_ DIFFUSE , matDiffuse, 0); Hasta este punto hemos realizado ya la iluminación de la escena y los materiales con los que hemos construido el cubo. Ahora vamos a animarlo un poco. Para ello debemos modificar los métodos onSurfaceCreated() y onDrawFrame() dentro de la clase GLRenderer . AMBIENT , matAmbient, 0); gl.glEnable(GL10. GL_LIGHTING ); gl.glEnable(GL10. GL_LIGHT0 );

111

Made with FlippingBook - Online catalogs