¿Los OpenGL Point Sprites funcionan en Android?

Estoy desarrollando en un Droid, versión 2.1-update1. Mis extensiones GL soportadas incluyen GL_OES_point_sprite y GL_OES_point_size_array.

Soy incapaz de conseguir sprites de punto para hacer. El código siguiente arroja UnsupportedOperationException de GLWrapperBase en la llamada glTexEnvi. Si deshabilito las texturas y comento el glTexEnvi todo, arroja la misma excepción más abajo, en glPointSizePointerOES ().

¿Están los sprites puntuales correctamente soportados en Android? ¿Alguien los ha conseguido trabajando? ¿O hay un problema con mi código de abajo?

// Note that gl is cast to GL11 gl.glEnable(GL11.GL_TEXTURE_2D); gl.glEnable(GL11.GL_BLEND); gl.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); gl.glDepthMask(false); gl.glEnable(GL11.GL_POINT_SPRITE_OES); gl.glTexEnvi( GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE ); gl.glEnableClientState(GL11.GL_VERTEX_ARRAY); gl.glVertexPointer(2, GL11.GL_SHORT, 0, .vertBuffer); gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_OES); gl.glPointSizePointerOES(GL11.GL_FLOAT, 0, pointSizeBuffer); 

Gracias

Tengo este trabajo, aquí está mi función de dibujo

Inicializar todo

  gl.glEnable(GL10.GL_TEXTURE); TextureManager.activateTexture(gl, R.drawable.water1); //Don't look for this, it's not public api, just looks upd texture id for android resource if loaded, and then activates it. it's the gl.glBindTexture() call replacement gl.glEnable(GL11.GL_POINT_SPRITE_OES); gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES); gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_OES); gl.glEnableClientState(GL11.GL_POINT_SPRITE_OES); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 

Establezca el entorno de textura para usar sprites de puntos

  gl.glTexEnvf(GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE); 

Establecer punteros a los datos (Primera matriz es 2d establecidos [x, y, x2, y2, …] segundo es 1d [s1, s2, ..])

  gl.glVertexPointer(2,GL11.GL_FLOAT,0,PosData); ((GL11)(gl)).glPointSizePointerOES(GL10.GL_FLOAT, 0, SizeData); 

Dibujar

  gl.glDrawArrays(GL10.GL_POINTS,0,MAX); 

Desactivar las cosas

  gl.glDisableClientState(GL11.GL_VERTEX_ARRAY); gl.glDisableClientState(GL11.GL_POINT_SIZE_ARRAY_OES); gl.glDisableClientState(GL11.GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES); gl.glDisableClientState(GL11.GL_POINT_SIZE_ARRAY_OES); gl.glDisable(GL10.GL_TEXTURE); 

En mi inicializador sólo tengo mi configuración de proyección y GL_BLEND habilitado para mezclar. Creo que necesitarías GL_COLOR_MATERIAL si quisieras colorear tu sprite.

Tengo el punto sprites trabajando con ES 1.1 y 2 en un nexo uno. Utilizo un tamaño de punto fijo así que no tuve que usar un almacenador intermediario del tamaño pero usted puede utilizar mi código conseguirlo primero el trabajar y después agregar el almacenador intermediario del tamaño.

En mi método de dibujo:

 gl.glEnable(GL11.GL_POINT_SPRITE_OES); gl.glTexEnvf(GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 2 dimensional array, (x1,y1, x2, y2, ...). gl.glVertexPointer(2, GL10.GL_FLOAT, 0, mVerticesBuffer); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureId); gl.glPointSize(32); // Fixed point size for all points // This only worked with GLES11 & GLES20. GLES11.glDrawArrays(GLES11.GL_POINTS, 0, vertices.length); gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glDisable(GL10.GL_TEXTURE_2D); gl.glDisable(GL11.GL_POINT_SPRITE_OES); 

Si como yo estás usando MatrixTrackingGL tienes que usar glTexEnvf en lugar de glTexEnvi (no f al final) y necesitas ir a MatrixTrackingGL y cambiar glPointSizePointerOES:

 public void glPointSizePointerOES(int type, int stride, Buffer pointer) { mgl11.glPointSizePointerOES(type, stride, pointer); //throw new UnsupportedOperationException(); } 

Estoy seguro de que hay una buena razón por la que no es compatible en el primer lugar, pero no lo sé y funciona para mí en un ZTE Blade ejecutando android 2.1


Para cualquiera que se pregunte, MatrixTrackerGL viene de C: \ Archivos de programa \ android-sdk-windows \ samples \ android-7 \ ApiDemos \ src \ com \ ejemplo \ android \ apis \ graphics \ spritetext

Se utiliza al configurar su GLSurface View:

 // GraphicsRenderer is my implementation of Renderer Graphics Renderer graphicsRenderer = new GraphicsRenderer(this); GLSurfaceView mGLView = (GLSurfaceView) findViewById(R.id.graphics_glsurfaceview1); mGLView.setGLWrapper(new GLSurfaceView.GLWrapper() { public GL wrap(GL gl) { return new MatrixTrackingGL(gl); }}); mGLView.setEGLConfigChooser(true); mGLView.setRenderer(graphicsRenderer); 

Y significa que puedes usar GLU.gluUnProject para hacer picking !:

  MatrixGrabber matrixGrabber = new MatrixGrabber(); matrixGrabber.getCurrentModelView(gl); matrixGrabber.getCurrentProjection(gl); float[] vector = new float[4]; GLU.gluUnProject(x, y, 0f, matrixGrabber.mModelView, 0, matrixGrabber.mProjection, 0, new int[]{mGLView .getTop(),mGLView .getLeft(),mGLView .getWidth(),mGLView .getHeight()}, 0, vector, 0); 
  • Android: ¿Hay alguna manera de acelerar canvas.drawBitmap?
  • Sprite.setImage () en andengine
  • Chase cámara con sprite en andengine
  • Cómo cargar sprite hoja con 5 filas y 5 columnas vista superior en android?
  • LibGDX 1.5 girando sprite alrededor de su centro
  • No se puede encontrar el ejemplo adecuado para la clase de sprite de OpenGL 2d que no usa GL11Ext para dibujar
  • Mover sprite en Andengine
  • AndEngine Sprite / Box2D La eliminación del cuerpo bloquea mi programa sin información de error / excepción?
  • Animación de sprites en Cocos2d android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.