Point sprite desaparece en el borde de la pantalla en mi Galaxy S4 (no en el Nexus 7)

Estoy experimentando con un emisor de partículas basado en este código: https://code.google.com/p/sravan-work/source/browse/trunk/OpenGL+ES2/es2particles/src/es2/learning/ParticleRenderer.java

Actualmente, el emisor de partículas funciona muy bien en mi Nexus 7; los sprites de puntos se generan en el centro de la pantalla y 1) se desvanecen o 2) pasan por el borde de la pantalla.

Por desgracia, en mi Galaxy S4, los sprites de punto desaparecen de la pantalla tan pronto como su punto medio llega al borde de la pantalla. Esto causa un efecto visual realmente desagradable.

Ambos dispositivos ejecutan Android 4.3

Pregunta: ¿Por qué es que los sprites se deslizarán fuera de la pantalla en el (Asus) Nexus 7, pero en el Galaxy S4 de repente desaparecen? ¿Hay algo que se pueda hacer para prevenir la repentina desaparición?

Notas adicionales:

Para el Galaxy S4 lo siguiente está impreso en logcat:

12-03 00:29:15.288: I/Adreno-EGL(31137): <qeglDrvAPI_eglInitialize:316>: EGL 1.4 QUALCOMM build: (CL4169980) 12-03 00:29:15.288: I/Adreno-EGL(31137): OpenGL ES Shader Compiler Version: 17.01.10.SPL 12-03 00:29:15.288: I/Adreno-EGL(31137): Build Date: 09/26/13 Thu 

Para el Nexus 7, se imprimirá lo siguiente en logcat:

 12-03 00:14:38.144: D/libEGL(25303): loaded /system/lib/egl/libEGL_tegra.so 12-03 00:14:38.154: D/libEGL(25303): loaded /system/lib/egl/libGLESv1_CM_tegra.so 12-03 00:14:38.174: D/libEGL(25303): loaded /system/lib/egl/libGLESv2_tegra.so 12-03 00:14:38.194: D/OpenGLRenderer(25303): Enabling debug mode 0 

Los sprites se basan en un solo punto en su centro, alrededor del cual se dibuja una textura. Si este punto sale del área de representación, se recortan, ya que toda su geometría está técnicamente fuera de la vista.

Puede haber algunas soluciones para evitar el repentino desaparecimiento:

  1. Se desvanecen manualmente los sprites cuando se aproximan al borde de la pantalla.
  2. Extienda el área de vista / render para que quede "fuera" de la pantalla (no está seguro si esto es posible).
  3. Utilice cuadrados con cuatro vértices en lugar de sprites (siempre y cuando un vértice esté en la pantalla, los triángulos relacionados no se cortarán)

Para la opción 3:
Primero tendrá que definir un cuadrado en lugar de un solo punto por partícula:

 float verts[] = {-1, 1, 0, 1, 1, 0, 1,-1, 0, -1,-1, 0}; 

Dependiendo de cómo usted quiere que sus partículas se comporten, usted podría quitar la tercera coordenada de cada vértice y fijarlo a un valor apropiado en el sombreador del vértice también.

En segundo lugar, en lugar de dibujar GLES20.GL_POINTS , tendrás que dibujar triángulos, con la matriz que GLES20.GL_TRIANGLE_FAN , GLES20.GL_TRIANGLE_FAN creará un cuadrado.

También tendrá que establecer la posición y el tamaño de la partícula en el sombreado de vértices. Algo como esto a_Position*size*0.5 + translate debe hacer el truco. Por supuesto, puede evitar la reducción a la mitad del tamaño si utiliza tamaños más pequeños o hace que los valores de vértice sean más pequeños en la matriz verts[] . translate sería la posición calculada de la partícula.

Nota1: recuerde que glPointSize establece el tamaño en píxeles, pero en este ejemplo el tamaño está en unidades de espacio mundial. Un tamaño de 10 probablemente sería mayor que la pantalla en este ejemplo

Nota2: ya que está utilizando geometría real en lugar de puntos ahora, puede usar una perspective matrix para hacer que las partículas que están más lejos aparezcan más pequeñas.

  • OpenGL ES 2.0 vs OpenGL 3 - Similitudes y diferencias
  • Android OpenGL ES 2.0 sólo está limitado a 16 texturas en la memoria?
  • referencia indefinida glBindVertexArrayOES en eclipse
  • Textura negra de OpenGL ES en Nexus S
  • EGL vs GLES 2.0 en Android (por ejemplo, Java)
  • Usar el indicador de hardwareAcceleration con Canvas.clipPath
  • ¿Cuál es el parámetro "offset" en GLES20.glVertexAttribPointer / glDrawElements, y de dónde proviene ptr / indices?
  • Uso de SurfaceTexture en Android
  • Problemas con la cámara OpenGL ES 2.0
  • Carga rápida de texturas en OpenGL 2.0
  • Animación esférica con texto para el uso de la nube de etiquetas en la aplicación para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.