IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Java Discussion :

[Java3D] Succession de transformations


Sujet :

3D Java

  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 15
    Par défaut [Java3D] Succession de transformations
    Bonjour, c'est encore moi!

    J'ai décidément des problèmes avec les transformations dans l'API.

    Je veux insérer un .OBJ dans ma scène.
    J'aimerai qu'il soit positionner dans le cube suivant : [0, 0, 0], [Max, Max, Max]

    J'utilise la méthode suivante pour l'insérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		FileReader reader = DataManager.getBattleObjReader( objPath );
    		ObjectFile objfile = new ObjectFile( ObjectFile.LOAD_ALL | ObjectFile.RESIZE );
    		BranchGroup branch = objfile.load( reader).getSceneGroup();
    		branch.setName( "ground" );
    D'après ce que j'ai compris, cela me positionne mon objet dans le cube [-1, -1, -1], [1, 1, 1]
    ( Flag ObjectFile.RESIZE )

    Je veux donc lui appliquer une homothétie et une translation

    Je crée donc mes deux transformations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		Transform3D translate = new Transform3D();
    		translate.set(new Vector3d( 1.0f, 1.0f, 1.0f));
     
    		Transform3D scale = new Transform3D();
    		scale.setScale( scalecoeff );

    La ou j'ai besoin d'une confirmation c'est pour la suite :

    J'aimerai appliquer a mon objet la translation puis homothétie.
    Mes souvenirs des matrices de transformation étant loin, je ne me rappelle plus exactement comment il faut procéder :

    - Manifestement, il ne faut pas faire une addition des matrices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scale.add( translate );
    Renvoie une erreur : Non-affine transformation

    - Si mes souvenirs sont bons, il faut faire une multiplication des deux matrices
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scale.mul( translate );
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    translate .mul( scale);
    Le truc c'est que je ne me rappelle plus dans quel ordre il faut le faire.
    Dans mon code, les deux me donnent le même résultat. ( Ce qui ne me rassure pas )

    Donc, je voulais bien m'assurer que c'est la bonne méthode pour le faire.

    Merci d'avance !

    PS :
    J'ai aussi essayer d'utiliser un MultiTranformGroup mais je n'ai pas su comment l'insérer comme BranchGroup par la suite

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Salut,

    Il y pas de différence Niveau rendu!
    Déjà tu as remarqué que les deux donnent le même résultat.
    Par contre, dans le cas où tu veux combiner une translation avec une rotation, tu auras deux rendus différents :



    Premier cas : rotation effectuée avant la translation
    Deuxième cas : translation effectuée avant la rotation.

    Revenons à ton code :

    scale.add( translate );
    Ici, la translation est effectuée en premier lieu, puis en effectue un changement d'échelle après la translation de l'objet, par contre dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    translate .mul( scale);
    le changement d'échelle est effectué avant la translation.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 15
    Par défaut
    Salut!

    C'est justement ce qui me pose probleme :

    Normalement, dans le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scale.add( translate );
    - Je commence par bouger l'objet --> [0,0,0] [2,2,2]
    - Puis je fais une homothétie --> [0,0,0] [2X,2X,2X]

    Dans le deuxième cas, je devrais :
    - Faire l'homothétie --> [-X,-X,-X] [X,X,X]
    - Faire bouger l'objet --> [-X +1,-X + 1,-X + 1] [X + 1,X + 1,X + 1]

    Pourtant, l'objet a l'aire d'être au même endroit

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Est ce que tu as testé le déplacement sans appliquer homothétie ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 15
    Par défaut
    Bon, j'ai fait quelques test en créant des tas de petits cube de partout pour pouvoir mieux me repérer et ...

    C'est moi qui me foirait, désolé.

    Les deux transformations dites plus haut ne font pas la même chose et la bonne est bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scale.add( translate );
    Je m'étais donc auto embrouillé, merci d'avoir dissipé mes doutes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JAVA3D]coordonnée apres transformation
    Par _mkup dans le forum 3D
    Réponses: 0
    Dernier message: 05/07/2012, 14h31
  2. Transformée XSL successive avec Javascript
    Par softkiller dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/07/2009, 14h23
  3. [Java3D] Gestion des transformations
    Par eternalcm dans le forum 3D
    Réponses: 0
    Dernier message: 18/02/2009, 10h05
  4. [XSLT]Transformation successives
    Par reeda dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/01/2008, 08h30
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo