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?
- Pasar atributos personalizados a un shader de fragmentos personalizado
- Pasar variables entre el renderizador y otra clase con queueEvent ()
- Construyendo un juego en Mobile. ¿Nativo o motor?
- Android GLSurfaceView
- Limitación del tamaño de la textura? Android Open GL ES 2.0
- Conversión de YUV a RGB por fragment shader
- ¿Cuál es el parámetro "offset" en GLES20.glVertexAttribPointer / glDrawElements, y de dónde proviene ptr / indices?
- Texturas OpenGL de Android: crearlas y borrarlas al vuelo
- ¿Por qué la muestra de documentación se divide por 2 para calcular inSampleSize para la carga de mapa de bits?
- Voltear eje Y en OpenGL ES?
- ¿Por qué eclipsar mi textura con el color?
- Android OpenGL Renderizar a un frameBuffer en la resolución original (pequeña) y luego escalarla (viewPort) al tamaño de la pantalla
- GLES10.glGetIntegerv devuelve 0 sólo en Lollipop
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).
- Cómo obtener correos gmail mediante programación en android
- ¿Cuál es la diferencia entre Display.getRotation () y Display.getOrientation () aparte del hecho de que Display.getOrientation () está obsoleto?