2009-10-24 14 views
9

Planeo escribir un juego Java 3D que funcione tanto para PC como para Android. Desafortunadamente, parece que no hay una API de OpenGL común para ambas plataformas.Escribo una aplicación Java portátil usando JOGL y Android OpenGL

¿Las API difieren significativamente? ¿Hay alguna manera de que pueda usar el mismo código 3D en ambas versiones? ¿Es una buena idea?

+0

Buena pregunta: la portabilidad en las plataformas móviles todavía no es una realidad. – whatnick

+0

Intenta usar Qt. Es multiplataforma y funciona en Windows, Mac OSX, Linux, iOS, Android, BlackBerry, Windows RT y (pronto) Windows Phone.Proporciona el conjunto mínimo de funciones de OpenGL compatibles en todas las plataformas, pero también puede usar funciones de OpenGL específicas para cada plataforma (por ejemplo, OpenGL completo en equipos de escritorio). – trusktr

Respuesta

10

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

Es una buena idea intentar reutilizar tanto como sea posible su aplicación en ambas plataformas. De todos modos, en general es una buena práctica aislar el resto del código de las dependencias externas, como OpenGL, incluso si no necesita específicamente el soporte de OpenGL ES. Nunca se sabe en qué API/plataforma desea portar 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 su aplicación y luego proporcionar implementaciones Jogl y Androide separadas. Dependiendo de la plataforma en la que se esté ejecutando, 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 todavía está en versión beta.

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

perfiles permiten que las aplicaciones Java que se escriben de una manera que permite la compatibilidad con múltiples versiones de OpenGL al mismo tiempo. Dado que OpenGL ES (GL para sistemas integrados) tiene una funcionalidad solapada con OpenGL, abrió la oportunidad de agregar perfiles uniformes que unen las implementaciones de escritorio e integradas.

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

+0

Muy bien investigado respuesta. Hay una buena aplicación OS JOGL llamada worldwind, en la que trabajo y pagaría para verla ejecutar en Android. – whatnick

1

En realidad, existe una gran diferencia entre java3d y la api de Android OpenGL. Primero, java3d es una abstracción de nivel superior en 3D. E incluso si tuviera que usar algo como JOGL, habría algunas diferencias en las API. Su mejor opción sería abstraer la implementación del dibujo en 3D en la base del código, podría compartir el resto de la lógica, pero luego tener un código específico de la plataforma para manejar el dibujo opengl/3d.

4

El proyecto ha finalizado. Resultó que las API difieren un poco, 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.

+2

¿compartirías el preprocesador? – Rom1

+0

Por favor comparta el preprocesador. Me enfrento al mismo problema – jmishra

+2

No estoy seguro de si ayuda, probablemente pueda usar el cpp de GCC. De todos modos, aquí está nuestro proyecto (Netacka 3D): http://students.mimuw.edu.pl/~pm262952/netacka/ Aquí está el preprocesador (en Python): http://pastebin.com/iPjDHiTR Y un archivo fuente de ejemplo: http://pastebin.com/vwHGcyC0 – hmp

1

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

Cuestiones relacionadas