10
votes

Écrire une application Java portable à l'aide de Jogl et Android OpenGL

Je prévois d'écrire un jeu Java 3D qui fonctionnera à la fois sur PC et Android. Malheureusement, il semble qu'il n'y ait pas d'API Common OpenGL pour les deux plates-formes.

Les API diffèrent-elles de manière significative? Y a-t-il une façon de pouvoir utiliser le même code 3D dans les deux versions? Est-ce une bonne idée?


2 commentaires

Nice Question - La portabilité sur les plates-formes mobiles n'est toujours pas une réalité.


Essayez d'utiliser qt. Il est multiplate-forme et fonctionne dans Windows, Mac OSX, Linux, IOS, Android, BlackBerry, Windows RT et (Bientôt) Windows Phone. Il fournit le jeu minimal de fonctions OpenGL compatibles avec toutes les plates-formes, mais vous pouvez également utiliser des fonctions OpenGL spécifiques à chaque plate-forme (par exemple, OpenGL complète OpenGL sur des ordinateurs de bureau).


4 Réponses :


1
votes

Il y a en fait un peu de différence entre Java3D et l'API Android OpenGL. Premier Java3D est une abstraction de niveau supérieur sur 3D. Et même si vous deviez utiliser quelque chose comme Jogl, il y aurait des différences dans l'API. Votre meilleur pari serait de résumer l'implémentation de dessin en réalité 3D dans la base de code, vous pouvez partager le reste de la logique, mais ensuite avoir un code spécifique à la plate-forme pour gérer le dessin OpenGL / 3D.


0 commentaires

11
votes

Android prend en charge OpenGL ES 1.0 qui chevauche avec OpenGL 1.3, cela devrait donc être possible, mais il n'est pas aussi simple de remplacer les fichiers JAR au moment de l'exécution.

C'est une bonne idée d'essayer de réutiliser autant que possible de votre application sur les deux plates-formes. Quoi qu'il en soit, il est généralement pratique d'isoler le reste de votre code des dépendances externes telles que OpenGL, même si vous n'avez pas spécifiquement besoin de support OpenGL ES. Vous ne savez jamais ce que l'API / Platform vous souhaiterez peut-être porter votre application à l'avenir.

Il y a 2 options disponibles.

Le premier consiste à masquer l'implémentation OpenGL derrière une interface que le reste de votre application utilise, puis fournissez des implémentations distinctes JOGL et Androide. En fonction de la plate-forme que vous utilisez, vous pouvez ensuite choisir d'instancier la bonne implémentation à l'exécution à l'aide du motif d'usine.

As OpLowGL ES et OpenGL sont très similaires, l'effort nécessaire pour le maintenir ne doit pas être trop élevé, vous devez vous tenir au courant des fonctions communes.

L'autre option consiste à essayer d'utiliser JOGL2 qui prend en charge les profils. Celles-ci semblent fournir exactement ce dont vous avez besoin, mais JOGL2 est toujours en version bêta.

Le bas de cette page parle un peu sur les profils: http://kenai.com/projects/ Jogl / Pages / FAQ

Les profils permettent d'écrire des applications Java d'une manière qui permet la compatibilité avec plusieurs versions OpenGL en même temps. Étant donné que OpenGL ES (GL pour les systèmes embarqués) a des fonctionnalités qui se chevauchent avec OpenGL lui-même, il a ouvert la possibilité d'ajouter même des profils qui pontent des positions de bureau et des implémentations intégrées.

Vous voudrez peut-être lire ce http://michael-bien.com/mbien/ientry/ jogl_2_opengl_profiles_explait pour plus d'informations sur les profils.


1 commentaires

Très bien étudié Réponse. Il y a une belle application OS Jogl appelée Worldwind, que je travaille et je paierais pour le voir courir sur Android.



4
votes

Le projet est terminé. Il s'est avéré que les API diffèrent quelque peu, mais fonctionnellement, il y a une partie partagée. Nous avons fini par écrire un préprocesseur simple qui convertit le code JOGL en version ES et a automatisé la conversion avec Eclipse.


3 commentaires

Souhaitez-vous partager le préprocesseur?


S'il vous plaît partager le préprocesseur. Je suis confronté au même problème


Je ne sais pas si cela aide, vous pouvez probablement vous procurer avec le CPP de GCC. Quoi qu'il en soit, voici notre projet (Netacka 3D): étudiants.mimuw.edu.pl/~pm262952 / Netacka Voici le préprocesseur (en Python): Pastebin.com/ipjdhitr et un exemple de fichier source : Pastebin.com/vwhgcyc0



2
votes

Comme Jogl-es a été fusionné dans Jogl 2.x il y a plusieurs années, vous pouvez maintenant utiliser JOGL à la fois dans les environnements de bureau et mobiles (Android).


0 commentaires