M0286_Libro Curso
2: Avanzado en Android
static void loadTexture(GL10 gl, Context context, int resource) { Bitmap bmp = BitmapFactory. decodeResource (context. resource); GLUtils. texImage2D (GL10. GL_TEXTURE_2D , 0, bmp, 0); gl.glTexParameterx(GL10. GL_TEXTURE_2D , GL10. GL_ GL10. GL_LINEAR ); gl.glTexParameterx(GL10. GL_TEXTURE_2D , GL10. GL_ } Una vez realizado esto, tenemos que indicarle a OpenGL las coordenadas de textura, añadiendo el siguiente código al comienzo del método draw() : gl.glEnable(GL10. GL_TEXTURE_2D ); // solucion de bugs 3623 gl.glTexCoordPointer(2, GL10. GL_FIXED , 0, mTextureBuffer ); y, tenemos que llamar por último al método loadTexture() en GLRenderer , añadiendo las siguientes líneas al final del método onSurfaceCreated() : // Activamos las texturas gl.glEnableClientState(GL10. GL_TEXTURE_COORD_ARRAY ); gl.glEnable(GL10. GL_TEXTURE_2D ); // cargamos la textura del cubo a partir de nuestra imagen GLCube. loadTexture (gl, context, R.drawable. seas ); Con esto hemos activado primero las texturas y las coordenadas, para después llamar al método loadTexture() , pasándole el contexto Activity y el ID del recurso, para que pueda cargar la imagen de textura. R.drawable. seas es un archivo PNG de 128 píxeles que se copia al directorio res/drawable-nodpi/ . Nosotros hemos usado esa imagen corporativa, pero se puede usar cualquier archivo PNG del tamaño que desee. Llegados a este punto y con el código ya casi terminado, vamos a hacer que el cubo se vuelva parcialmente transparente. Añadiremos el siguiente código a GLRenderer. onSurfacedCreated() : public void onSurfaceCreated(GL10 gl, EGLConfig config) { // ... boolean SEE_THRU = true ; // ... if (SEE_THRU) { gl.glDisable(GL10. GL_DEPTH_TEST ); gl.glEnable(GL10. GL_BLEND ); gl.glBlendFunc(GL10. GL_SRC_ALPHA , GL10. GL_ONE ); } getResources(), TEXTURE_MIN_FILTER , TEXTURE_MAG_FILTER , GL10. GL_LINEAR ); bmp.recycle(); }
113
Made with FlippingBook - Online catalogs