Escribir una aplicación Java portátil utilizando JOGL y Android OpenGL

Planeo escribir un juego Java 3D que funcionará tanto en PC como en Android. Desafortunadamente parece que no hay una API OpenGL común para ambas plataformas.

¿Las APIs difieren significativamente? ¿Hay una manera que podría utilizar el mismo código 3D en ambas versiones? ¿Es una buena idea?

Android soporta OpenGL ES 1.0, que se superpone con OpenGL 1.3, por lo que esto debería ser posible, pero no es tan sencillo simplemente reemplazar los archivos jar en tiempo de ejecución.

Es una buena idea tratar de reutilizar tanto como sea posible de su aplicación en ambas plataformas. De todos modos es generalmente una buena práctica para aislar el resto de código de dependencias externas tales OpenGL incluso si usted no necesita específicamente soporte de OpenGL ES. Nunca se sabe a qué API / plataforma puede asignar su aplicación en el futuro.

Hay 2 opciones disponibles.

El primero es ocultar la implementación de OpenGL detrás de una interfaz que utiliza el resto de la aplicación y luego proporcionar implementaciones de Jogl y Androide independientes. Dependiendo de la plataforma en la que esté ejecutándose, puede elegir instanciar la implementación correcta en tiempo de ejecución utilizando el patrón de fábrica.

Como OpenGL ES y OpenGL son muy similares, el esfuerzo requerido para mantener esto no debería ser demasiado alto, siempre que se adhiera a las funciones comunes.

La otra opción es probar y usar Jogl2 que tiene soporte para perfiles. Estos parecen proporcionar exactamente lo que necesita, pero Jogl2 sigue en fase beta.

En la parte inferior de esta página se habla un poco acerca de los perfiles: http://kenai.com/projects/jogl/pages/FAQ

Los perfiles permiten que las aplicaciones Java se escriban de una manera que permita la compatibilidad con múltiples versiones de OpenGL al mismo tiempo. Dado que OpenGL ES (GL para sistemas embebidos) tiene una funcionalidad superpuesta con OpenGL, abrió la oportunidad de agregar perfiles pares que puentean implementaciones de escritorio e incrustadas.

Es posible que desee leer este http://michael-bien.com/mbien/entry/jogl_2_opengl_profiles_explained para obtener más información sobre los perfiles.

El proyecto está terminado. Resultó que las APIs difieren algo, pero funcionalmente hay una parte compartida. Terminamos escribiendo un preprocesador simple que convirtió el código JOGL a la versión ES, y automatizamos la conversión con Eclipse.

En realidad hay un poco de diferencia entre java3d y el api opengl de Android. Primero java3d es una abstracción de nivel superior en 3d. E incluso si tuvieras que usar algo como JOGL, habría algunas diferencias en los api. Su mejor apuesta sería abstraer la implementación de dibujo 3d en realidad en la base de código, podría compartir el resto de la lógica, pero luego tener código de plataforma específica para manejar el dibujo opengl / 3d.

Como JOGL-ES se fusionó en JOGL 2.x hace varios años, ahora puede utilizar JOGL tanto en entornos de escritorio y móviles (Android).

  • Threading proceso de carga de texturas para el juego opengl android
  • Cómo ocultar la barra de estado de Android en el juego nativo escrito con gomobile
  • Parallax XY y cálculo de la rotación
  • Error de EGL al intentar ejecutar mapsActivity en el emulador de Android
  • La mejor manera de hacer el bucle del juego para Android usando OpengGLSurface
  • OpenGL ES 2 no funciona en Android API23
  • La textura de OpenGL no sigue la geometría
  • Zero-copia de procesamiento de la cámara y la prestación de tuberías en Android
  • Manera recomendada de cargar (no interactivo) animaciones (hechas usando Maya) en OpenGL ES en iOS y Android
  • Cómo crear una textura OpenGL de matriz de bytes en Android
  • El método onFrameAvailable () de SurfaceTexture siempre se llama demasiado tarde
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.