Java3D-MouseRotate-Mémoire

Signaler
Messages postés
5
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
26 mai 2004
-
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007
-
Bonjour,

Je dois pour un projet insérer plusieurs objets 3D (lus à partir d'un fichier obj) dans un Panel. Ca marche pour un petit nombre d'objets, mais à partir d'une trentaine (variable suivant les machines) les derniers objets chargés ne s'affichent plus (je n'ai que le fond). A priori ça vient de la mémoire ; quelqu'un pourrait-il me le confirmer ?

De plus, j'aimerais qu'en appliquant une transformation sur un des objets (via MouseRotate ou MouseTranslate), cette transformation soit appliquée en même temps sur un deuxième objet (ou même plus). Je dois donc (je pense) récupérer la matrice de transformation, mais comment faire ? Existe-t-il un événement du type "On_MouseRotate" ??

C'est pour un projet de fin d'année, alors merci d'avance !!!

Grégory

8 réponses

Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

---pour la premiere question: qu'entends tu par je n'ai que le fond?
Ils sortent des limits de vison?
Aggrandis les...
---pour la deuxieme, qd tu dis rotation ou translation, tu veux dire a partir d'une origine differente? Car sinon, tout dependre de la facon d'accrocher tes objets avec le transformgroup ou il y a les translation rotation

c quoi ton projet?
---------------------------------------------
>:) dams >:)
...en dansant la javanaise ...
---------------------------------------------
Messages postés
5
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
26 mai 2004

Salut

1) quand je dis je n'ai que le fond, c'est que l'objet en lui-même n'apparaît pas : je n'ai que la couleur de fond (cf l'exemple objLoad fourni avec Java3D) (mais c'est vraisemblablement lié à un manque de RAM au bout d'un certain nombre d'objets chargés)

2) Pour mon deuxième problème, ce que j'aimerais faire, c'est : avoir deux objets côte à côté mais dans deux Panel DISTINCTS (donc pas dans le même TransformGroup), et faire en sorte que quand je fais tourner l'un (ou bien que je zoome, etc) la même transformation soit appliquée en même temps sur le second objet.
Je ne sais pas si c'est très clair :)

Merci d'avance !

Grégory
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

1) tu es sur que ton obj loade ne sors pas des bounds de ta vue?
tu as fait un setBackClipDistance suffisamment grand?
Car si c'etait un manque de Ram, tu aurais un java lang outofmemory exception
dans tout les cas, qd tu aas des pb de ram, tu peux deja specifie plus de ram a l'execution de ta machine virtuelle
java -Xms128m -Xmx512m
128Mo min, 512Mo max,
par defaut ce dernier est a 256 je crois

2)Je vois ce que tu veux dire, et oui il faut en fait 2 TG differents, l'un ayant les comportements, plus un ecouteur de mouvement de souris, pour catcher un event et recuperer la transformation a ppliquer sur l'autre...
Apres, tu peux mettre ca dans 2 canvas differents si tu veux, avec la meme view... ou bien dans le meme canvas...

BisRepetita: c quoi ton proj? tu fais quoi comme etude?

---------------------------------------------
>:) dams >:)
...en dansant la javanaise ...
---------------------------------------------
Messages postés
5
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
26 mai 2004

OK merci déjà pour ces renseignements.
Je suis en Licence Info. et mon projet consiste à pouvoir charger plusieurs objets au format OBJ, en choisir un de référence par Glisser-Deposer, lui appliquer les transformations (rotation, translation, homothétie) et que simultanément les autres subissent les mêmes translations. C'est une partie du projet, mais quand je saurais faire ça, je pense que le reste ira...(le reste consiste à établir un classement des objets).

Par contre j'ai fait un test dans un premier temps avec Behavior qui regarde si on appuie sur deux touches du clavier (d ou g) pour faire tourner le cube donc évidemment à l'intérieur du processStimulus de cette class je vois la transform3D, mais c'est pour l'appliquer aux autres que je bute. T'aurais pas un morceau de code ?
Désolé, je me suis mis à Java3D y'a très peu de temps, et je patauge un peu...J'ai bien demandé à mes encadrants mais malheureusement ils ne connaissent pas Java3D...

En tout cas, merci pour ce qui précéde, et merci pour ce qui arrive :o))

Grégory
Messages postés
5
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
26 mai 2004

Pour mon premier problème, au fait, ce n'est qu'avec la version DirectX qu'à partir d'un certain nombre les objets ne s'affichent plus (Pour mes essais, je charge toujours le même fichier, donc pas de problème de distance), et j'obtenais un message : fail to lock Vertex Buffer D3D_INTERNAL_ERROR (en gros).

J'ai changé pour une version OpenGL de DirectX et voici ce que j'obtiens à partir d'un certain nombre de fichiers chargés :
java.lang.InternalError
at javax.media.j3d.MasterControl.getCanvasBit(MasterControl.java:1049)
at javax.media.j3d.Canvas3D.addNotify(Canvas3D.java:1324)
at java.awt.Container.addNotify(Container.java:2049)
at javax.swing.JComponent.addNotify(JComponent.java:4291)
at java.awt.Container.addNotify(Container.java:2049)
at javax.swing.JComponent.addNotify(JComponent.java:4291)
at java.awt.Container.addNotify(Container.java:2049)
at java.awt.Panel.addNotify(Panel.java:71)
at java.awt.Container.addNotify(Container.java:2049)
at javax.swing.JComponent.addNotify(JComponent.java:4291)
at java.awt.Container.addNotify(Container.java:2049)
at javax.swing.JComponent.addNotify(JComponent.java:4291)
at java.awt.Container.addNotify(Container.java:2049)
at java.awt.ScrollPane.addNotify(ScrollPane.java:518)
at java.awt.Container.addNotify(Container.java:2049)
at javax.swing.JComponent.addNotify(JComponent.java:4291)
at java.awt.Container.addNotify(Container.java:2049)
at javax.swing.JComponent.addNotify(JComponent.java:4291)
at java.awt.Container.addNotify(Container.java:2049)
at javax.swing.JComponent.addNotify(JComponent.java:4291)
at javax.swing.JRootPane.addNotify(JRootPane.java:676)
at java.awt.Container.addNotify(Container.java:2049)
at java.awt.Window.addNotify(Window.java:418)
at java.awt.Frame.addNotify(Frame.java:482)
at java.awt.Window.pack(Window.java:436)
at com.borland.jbuilder.runtime.applet.AppletTestbed.startApplet(Unknown Source)
at com.borland.jbuilder.runtime.applet.AppletTestbed.main(Unknown Source)

donc je pense qu'il y a dépassement de capacité quelque part, mais je ne sais pas à quel niveau...

Grégory
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

1)pour ton dernier post:
essai de ne pas mettre ton appli dans un applet, et enleve ton frame.pack() dans ton code...
met lui une size dans ton code et c'est tout pour voir...
si tu es sous windows, directX est mieux adaptes,
mais bien souvent, OpenGl est mieux...
continue a tester les deux...

2)Pour appliquer ton transform3d aux autres obj,:
TransformGroup tgdetonobj. = bgdetonobj.getTransformGroup();
tgdetonobj.setTransform(tontransform3drecupere);

---------------------------------------------
>:) dams >:)
...en dansant la javanaise ...
---------------------------------------------
Messages postés
10
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
10 juin 2008

salut,
aidez moi


j'en sais pas comment cree des dossier avec java
merci
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

Regarde sur la classe java.io.File, tu y trouveras ton bonheur.

Mais soit disant passant, tu a mis ce poste n'importe ou...

pense d'abord a chercher sur le forum,

et surtout sur internet (Google est ton ami...)

ou bien cree un nouveau post...