Cortar un cuadrado translúcido en una textura

Cómo quitar (recorte) un rectángulo transparente en una textura, de modo que el agujero sea translúcido.

En Android usaría el enfoque de Xfermodes:

Cómo utilizar máscaras en android

Pero en libgdx tendré que usar opengl. Hasta ahora casi logré lo que estaba buscando, mediante el uso de la glBlendFunc Desde esta página agradable y muy útil que learend que

glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 

Debería solucionar mi problema, pero lo probé, y no funcionó como esperaba:

 batch.end(); batch.begin(); //Draw the background super.draw(batch, x, y, width, height); batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_ONE_MINUS_SRC_ALPHA); //draw the mask mask.draw(batch, x + innerButtonTable.getX(), y + innerButtonTable.getY(), innerButtonTable.getWidth(), innerButtonTable.getHeight()); batch.end(); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); batch.begin(); 

Es sólo hacer la zona de la máscara de negro llano, mientras que yo estaba esperando la transparencia, las ideas.

Esto es lo que obtengo:

La máscara se dibujará en negro

Esto es lo que esperaba:

El área de la máscara debe ser transparente

One Solution collect form web for “Cortar un cuadrado translúcido en una textura”

He resuelto mi problema mediante el uso del búfer de plantilla:

 Gdx.gl.glClear(GL_STENCIL_BUFFER_BIT); batch.end(); //disable color mask Gdx.gl.glColorMask(false, false, false, false); Gdx.gl.glDepthMask(false); //enable the stencil Gdx.gl.glEnable(GL20.GL_STENCIL_TEST); Gdx.gl.glStencilFunc(GL20.GL_ALWAYS, 0x1, 0xffffffff); Gdx.gl.glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); batch.begin(); //draw the mask mask.draw(batch, x + innerButtonTable.getX(), y + innerButtonTable.getY(), innerButtonTable.getWidth(), innerButtonTable.getHeight()); batch.end(); batch.begin(); //enable color mask Gdx.gl.glColorMask(true, true, true, true); Gdx.gl.glDepthMask(true); //just draw where outside of the mask Gdx.gl.glStencilFunc(GL_NOTEQUAL, 0x1, 0xffffffff); Gdx.gl.glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); //draw the destination texture super.draw(batch, x, y, width, height); batch.end(); //disable the stencil Gdx.gl.glDisable(GL20.GL_STENCIL_TEST); 
  • Android Canvas o Open GL ES para el juego 2d?
  • EGLImages con renderbuffer como hermano de origen y textura como hermano objetivo
  • Android OpenGLRenderer error "sucio"
  • Error de EGL al intentar ejecutar mapsActivity en el emulador de Android
  • ¿Es OpenGL en Android un asesino de la batería?
  • Procesamiento de vídeo en Android 3.x / Google TV / SDK: Marco de vídeo a SurfaceTexture / OpenGL / GLSL
  • Android OpenGL Renderizar a un frameBuffer en la resolución original (pequeña) y luego escalarla (viewPort) al tamaño de la pantalla
  • Cómo medir y mejorar el uso de la batería en el iPhone / iPad juego (Android también)
  • Rotar la vista de anuncio con API 8
  • Uso de FBO para grabar la pantalla en Android
  • Cómo dibujar círculo básico en OpenGL ES 2.0 Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.