Exporter un programme utilisant JOGL en Jar auto-éxécutable (ou sinon en JNLP). [Résolu]

Signaler
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012
-
cs_loloof64
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012
-
Bonjour :)

J'ai développé un application JOGL, depuis Eclipse, en ayant crée ma User Library pour JOGL (avec les librairies natives pour WIndows, Mac et Linux i586).

Mon os de développement est Xubuntu 11.04, i586

Le problème que je rencontre, et je sais que beaucoup ont déjà essayé avant moi (certains ont déjà réussi je pense) mais je n'arrive pas à trouver une référence qui m'est utile sur le web, c'est pour exporter l'application en Jar auto-éxécutable qui puisse tourner sur les 3 OS les plus répandus.

1ere méthode essayée
Menu Export -> Runnable Jar File
[list]
[*] J'ai essayé les deux 1eres options : intégrer la librairie JOGL directement dans le Jar, et l'autre option compacter la librairie dans le Jar.
[*] J'ai même essayé en décompressant Jogl.jar et Gluegen-rt.jar avant de les recompresser en jar et les intégrer à nouveau dans le Jar de mon projet, afin de resigner le tout (par keytools) de manière cohérente => Rien n'y fait
/list

2e méthode essayée

Par JNLP

Je me suis inspiré du JNLP trouvé sur un autre site (progx.org) afin de rendre mon code auto-éxécutable par JavaWebStart, mais je rencontre des problèmes de sécurité.

A noter, je n'ai pas accès aux fichiers apaches de mon hébergeur (je suis hébergé gratuitement chez byethost22.com) afin d'ajouter le mime de jnlp : ceci explique peut-être cela.


Quelqu'un pourrait-il m'aider ?

Merci d'avance :)




Loloof64 : Programmer pour le plaisir et pour progresser :)

52 réponses


Bonjour

Il y a pas mal de tutoriels pour JOGL ici :
http://jogamp.org/wiki/index.php/Jogl_Tutorial

Tu peux t'inspirer de mon jeu (cf. ma signature tout en bas), j'utilise Java Web Start, il est sous licence libre GPL version 2. J'explique ici comment configurer l'environnement de développement pour TUER sous Eclipse et Netbeans :
http://tuer.sourceforge.net/download.php

Il y a plusieurs choses importantes à savoir. Déjà, tu n'as pas besoin de déployer JOGL toi-même, tu as juste à ajouter une ligne dans ton fichier JNLP pour que ça marche (comme je l'ai fait dans le mien). Ensuite, tous tes JARs doivent être signées avec le même certificat. J'ai tout automatisé pour ne pas me prendre le chou quand je déploye mon jeu, j'ai juste à lancer ANT puis copier les fichiers sur mon serveur FTP et ça roule.

En tapant juste JOGL dans la barre de recherche de javafr.com, tu tombes assez vite sur une vieille version de mon code donc tu ne peux pas dire que la réponse ne se trouvait pas sur Internet et tu aurais dû te tourner vers le principal forum de JOGL ici : http://forum.jogamp.org/jogl-f782158.html

Cordialement.


T.U.E.R yeah! vive java

En fait, pour utiliser les transformations non eulériennes, tu as besoin des quaternions. Prends garde, utiliser les quaternions avec des transformations eulériennes classiques ne résoud pas le problème, c'est une erreur que j'ai vue très souvent sur Internet. Beaucoup de programmeurs convertissent les angles d'Euler en matrices ou en quaternions pensant que cela suffit à règler le problème ce qui est faux.

Pour les singularités, regarde dans Ardor3D, elles sont utilisées dans les transformations eulériennes. Disons que c'est moins linéaire et précis que la solution basée sur les transformations non eulériennes mais c'est plus facile à comprendre et à implémenter.

Oui c'est une bonne idée de séparer les problèmes en plusieurs sous-problèmes plus simples.







T.U.E.R yeah! vive java

Ta solution est fausse, elle revient à créer un quaternion à partir de 3 angles d'Euler quand même. J'ai déjà évoqué les seules solutions valables, des tests unitaires avaient été appliqués pour les tester. Avec ta "solution", tu réduis juste le risque de tomber sur les combinaisons d'angles singulières qui posent problème. L'explication est là :
http://jeux.developpez.com/faq/math/index.php?page=transformations#Q34b




T.U.E.R yeah! vive java

Bonjour

Pour utiliser la formule de la FAQ, il faut absolument des quaternions. Il existe peut-être un moyen de faire ça avec des matrices mais certaines parties de la formule sont inutilement compliquées à implémenter par ce biais. J'ai un exemple de code en C++ là-dedans :
http://membres.lycos.fr/javalution/download/gimballock.zip

Tiens-moi au courant si certaines choses t'échappent encore. Cordialement.

(Bon, il faut que je passe à Mageia 1)



T.U.E.R yeah! vive java

C'est ça :
if(recompute_pitch==true)
      m_qPitch.createFromAxisAngle(m_PitchRadians,1.0f,0.0f,0.0f);
if(recompute_yaw==true)
      {UnitQuaternion qYawAxis(0.0f,0.0f,1.0f,0.0f);
       qYawAxis=m_qPitch*qYawAxis*m_qPitch.conjugate();
       m_qYaw.createFromAxisAngle(m_YawRadians,qYawAxis.getX(),qYawAxis.getY(),qYawAxis.getZ());     
      }
if(recompute_roll==true)
      {UnitQuaternion qRollAxis(0.0f,0.0f,0.0f,1.0f);
       UnitQuaternion qtmp=m_qYaw*m_qPitch;
       qRollAxis=qtmp*qRollAxis*qtmp.conjugate();
       m_qRoll.createFromAxisAngle(m_RollRadians,qRollAxis.getX(),qRollAxis.getY(),qRollAxis.getZ());
      }
UnitQuaternion q=m_qRoll*m_qYaw*m_qPitch;



T.U.E.R yeah! vive java

Pour l'hébergement, tourne-toi plutôt vers TuxFamily, Sourceforge, Google Code ou Github, tu auras moins de problèmes.







T.U.E.R yeah! vive java
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

Salut,

merci pour ta réponse :)

Je vais essayer de m'inspirer de ton application T.U.E.R
et du forum principal de JOGL.

Pour le serveur byethost22.com il me semble avoir trouvé : il faut éditer le fichier .htaccess de mon site.


Je vous tiens au courant si j'ai réussi.

Merci, a+


Programmons oui, mais le plus proprement possible.
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

Salut Gouessej

J'ai essayé ton programme sur ma machine mais il crash avant même d'avoir démarré

=> Mon système : Kubuntu 11.04, ma carte video ATI Radeon HD4330
=> Mes jre java/javaws : celui de Sun
=> Voici le verbose du lancement de l'application avec javaws

Java(TM) Web Start 1.6.0_24 Launching: /usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/java
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/java
 -Xbootclasspath/a:/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/javaws.jar:/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/deploy.jar:/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/plugin.jar
 -classpath
 /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/deploy.jar
 -Djava.security.policy=file:/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/security/javaws.policy
 -DtrustProxy=true
 -Xverify:remote
 -Djnlpx.home=/usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin
 -Dsun.awt.warmup=true
 -Djnlpx.origFilenameArg=tuer.jnlp
 -Djnlpx.remove=true
 -Dsun.java2d.noddraw=true
 -Xms32m
 -Xmx256m
 -Djnlpx.heapsize=32m,256m
 -Djnlpx.splashport=53891
 -Djnlpx.jvm=/usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/java
 -Djnlpx.vmargs=-Dsun.java2d.noddraw=true
 com.sun.javaws.Main
 /tmp/javawqS5KcA


Voilà, donc si tu as une idée sur la source du problème, pourrais-tu m'en faire part ?

A+

Programmons oui, mais le plus proprement possible.

Bonjour

Certaines captures d'écran de mon jeu ont été faites sur une configuration très proche de la tienne, la seule différence majeure était que la personne en question était sous Fedora.

Lance l'outil de configuration Java Web Start en tapant en ligne de commande "javaws -viewer". Dans les options de configuration, active la console Java par défaut et les logs.

A mon avis, il est fort probable qu'il y ait un conflit avec une version de JOGL traînant sur ta machine et mal installée. Je rappelle qu'environ 200 personnes utilisent mon jeu chaque semaine dont environ 40% de linuxiens. Je suis moi-même exclusivement sous Linux (Mandriva 2010 et bientôt Mageia 1).

La version alpha du jeu utilise encore une vieille version de JOGL, il se peut aussi qu'elle ne soit plus disponible sur java.net (ce qui me pendait au nez depuis longtemps). Je n'arrive plus à relancer mon jeu pour le moment.

Néanmoins, cela ne remet pas en question ma méthode de déploiement. Elle a fonctionné pendant des années. Cordialement.








T.U.E.R yeah! vive java

J'ai testé sous Cent OS Linux 5.3 avec le JDK 1.6 update 26 à l'instant et ça marche sans aucun problème. Par contre, NetX (Java Web Start pour l'OpenJDK) ne marche plus, il ne veut plus rien lancer, ni mon jeu ni d'autres applications Java Web Start. En conséquence, je suppose que le souci vient de chez toi. Me voilà rassuré.









T.U.E.R yeah! vive java
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

Salut,

Pour le programme je ne comprends pas ce qu'il se passe, vu que je ne dépends plus de NetX, mais bien de la version Sun tant pour la JRE standard que pour JWS.

En ce qui concerne le tutoriel, je pense qu'il n'est plus indispensable que je rédige un tutoriel sur la configuration dans Eclipse et le déploiement en JWS :
=> il y a déjà ce qu'il faut (avec de superbes captures d'écran ^^ sur votre wiki), c'est juste que je n'y avais pas fait un tour. Et il sera bien difficile pour le débutant que je suis d'apporter vraiment ma pierre à l'édifice par un x-ième tutoriel.
=> pour java web start, j'y fais à peine mes débuts, et je ne m'en sors pas (ça doit être un problème avec ma config xubuntu).

Sur le fond, plutôt que de rédiger un x-ième tutoriel sur l'apprentissage de JOGL : pourquoi pas "compiler" un ensemble des difficultés que j'ai été amené à rencontrer :
=> tant par ma précipitation, à cause de laquelle je me suis souvent bien mal renseigné (ex : le volume de vue ne se définit pas dans la MODELVIEW, et la caméra ne se définit pas dans la PROJECTION)
=> que par mon manque de logique / de connaissances : le Gimbal Lock, même si je ne l'ai pas encore résolu moi-même.

Je pense que, même si on n'apprend que par l'expérience, profiter des erreus d'autrui peut parfois faire gagner un temps précieux. Par conséquent, je pense toujours avoir un objectif "réel" pour rédiger un "tutoriel".

(Mon rêve serait de disposer d'une sorte d'un "recueils des erreurs stupides/peu évidentes", à l'instar de ce qu'est la FAQ pour les points peu évidents.)

Voilà, j'espère que mon idée n'est pas trop farfelue. ^^

Programmons oui, mais le plus proprement possible.

Sous Ubuntu, il faut utiliser update-alternatives ou un truc de ce genre pour indiquer la version de Java à utiliser par défaut. Si tu as plusieurs JVM, il se peut que l'OpenJDK soit sélectionné par défaut ce qui explique que ça ne marche pas.

J'ai déjà résolu le problème de verrou de Cardan, je connais 2 solutions connues pour ça, j'ai étudié les concepts mathématiques sur lesquels il repose. J'utilise soit les transformations non eulériennes soit les singularités. Toutes les autres solutions évoquées sur Internet ne sont que du pipo. J'ai travaillé là-dessus pendant 6 mois en licence d'informatique.

Ton idée n'est pas farfelue mais une série de tutoriels clairs en français ferait l'affaire bien que je trouve qu'un informaticien devrait maîtriser l'anglais. Dans tous les cas, beaucoup plus de documents sont disponibles dans la langue de Shakespeare. Bon courage.



T.U.E.R yeah! vive java
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

Salut :),

pour le problème du verrou de Cardan, je vais regarder du côté des singularités et des quaternions (car je pense que c'est de cela que tu voulais parler en citant les systèmes non eulériens => c'est qu'en math je me suis arrêté aux calculs de matrices).

Pour le document, je repars donc sur un tutoriel : il est vrai que la plupart des ressources que l'on trouve sur le web sont anglophones. Après, peut-être devrais-je publier une première version où je ne parle pas encore de la méthode pour exporter l'application.

Enfin pour le choix des JRE, c'est déjà fait : la jre Java est configurée sur celle de Sun grâce à la commande update-alternatives; et une commande similaire pour régler la JRE de javaws.

Merci

Programmons oui, mais le plus proprement possible.
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

Salut :)

J'étais justement en train d'essayer la solution des quaternions : et je pense avoir jusqu'ici échoué pour la raison que tu as citée (la simple conversion des angles eulériens en quaternion => matrice ou "axis angle").
Et il est vrai que la majorité des références sur internet que j'ai vues se basent sur cette solution de facilité.

Aussi, aurais-tu un lien vers la solution correcte en passant par les quaternions ? Car je pense que ma classe quaternion est correcte => c'est sûrement l'utilisation que j'en fait qui est mauvaise. Je pense que je vais privilégier les quaternions aux singularités.

Je vais publier le tutoriel que j'avais rédigé sans traiter de la question de l'exportation de l'application.

Programmons oui, mais le plus proprement possible.

Bonjour

La formule se trouve sur Developpez.net, c'est un enseignant-chercheur de l'université de Reims, Pascal Mignot, qui me l'avait proposée. L'ancètre de TUER écrit en C++ s'en servait. Je pense qu'une fois que tu as compris la formule, si tu as déjà implémenté les quaternions, ça ne sera pas bien difficile.

Pour information, bien que la solution de Pascal mignot ait mes faveurs, je dois reconnaitre que même la NASA se sert des singularités et qu'elles sont souvent suffisantes surtout pour les besoins de visualisation 3D non scientifique (pour les jeux vidéo par exemple).









T.U.E.R yeah! vive java
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

J'ai finalement résolu le problème du Gimbal Lock

Mes références :
Post sur developpez.net décrivant comment utiliser les quaternions dans le programme JOGL Attentions, du coup les 3 variables qui stockaient les angles d'Euler ne sont plus incrémentées à chaque fois, mais [list]
[*] attribuées à chaque passage dans le gestionnaire d'évènements
[*] réinitialisées dans la boucle de rendu, une fois que le quaternion temporaire a été crée à partir d'eux.
/list
Théorie sur les quaternions Site très enrichissant sur la théorie des quaternions et que j'ai trouvé très simple comparé à beaucoup d'autres sites.

Programmons oui, mais le plus proprement possible.

Le tutoriel de Gamedev que tu cites est dans l'erreur, il fait ce dont je t'avais parlé et qu'il ne faut pas faire avec les quaternions.






T.U.E.R yeah! vive java
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

D'accord.

Existe-t-il sinon une matrice de transformation équivalente à la formule de rotation qui figure sur la faq de developpez.com ?
=> Pour simplifier le codage
=> Eventuellement pour optimiser le calcul.

(J'aime bien le calcul matriciel "à la main", mais ici cela me parait bien compliqué).

Si elle est impossible à transcrire en une matrice, je me débrouillerais sans.

Composer deux rotations : A[B(X)] revient à faire : A * B * X, où X est le vecteur, A et B les matrices de transformations : je ne me trompe pas ?
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

Salut,

Comment interpréter le calcul R[R[Ox,a]Oy,b] dans la formule ? Car d'après ce que j'ai cru comprendre, il ne s'agit pas juste de multilplier R[0x,b] par R[0y,b].

Cela veut-il dire que l'axe de rotation de la transformation globale (R[R[Ox,a]Oy,b]) est constitué de la multiplication de R[0x,a] par le vecteur (Oy), l'angle restant toujours b ?


Programmons oui, mais le plus proprement possible.
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012

Salut,

je n'arrive pas à implémenter la formule que tu as donnée avec les quaternions : notament au niveau des rotations composées (R[R[Ox,a]Oy,b]).

Si je définis le quaternion représentant R[Ox,a] = Qa, comment représenter le quaternion représentant R[R[Ox,a]Oy,b] = R[Qa Oy,b] ? (Je ne pense pas me tromper en disant qu'il ne s'agit pas d'une simple multiplication).

Programmons oui, mais le plus proprement possible.
1 2 3