Tutoriel java3D - PowerPoint PPT Presentation

booker
tutoriel java3d n.
Skip this Video
Loading SlideShow in 5 Seconds..
Tutoriel java3D PowerPoint Presentation
Download Presentation
Tutoriel java3D

play fullscreen
1 / 47
Download Presentation
153 Views
Download Presentation

Tutoriel java3D

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Tutoriel java3D Projet tutore

  2. Java3D c’est quoi ? • API haut niveau 3D • Construire • Interagir • Un ensemble de classes • Structure arborescente • java3D utilise des librairies natives • directX, openGL

  3. Repère 3D y x z

  4. Graphe de scène • C’est une structure arborescente • Contient une scene 3D • Organise une scene 3D • Se charge du rendu de la scene • Deux éléments (tous implements Node) • Feuilles : shape : objet 3D • Nœuds : • BranchGroup : ensemble de formes • TransformGroup : transformations

  5. Scene graph Universe locale Vue Scene 3D BG BG TG Shape View …


  6. Scene graph simpleUniverse Universe locale Vue Scene 3D BG BG TG Shape View …

  7. Exemple 1 : colorcube centre

  8. Exemple : colorcube centre Universe locale Vue Scene 3D BG BG TG colorcube View …

  9. Exemple : colorcube centre • 1) créer un SimpleUniverse • SimpleUniverse su = new SimpleUniverse(); Universe Vue locale BG TG View …

  10. Exemple : colorcube centre • 1) créer un SimpleUniverse • 2) creer le colorcube • ColorCube c = new ColorCube(); Universe Vue locale BG TG colorcube View …

  11. Exemple : colorcube centre • 1) créer un SimpleUniverse • 2) creer la sphere • 3) créer un Branchgroup • BranchGroup BG=new BranchGroup() Universe Vue locale BG BG TG colorcube View …

  12. Exemple : colorcube centre • 1) créer un SimpleUniverse • 2) creer la sphere • 3) créer un Branchgroup • 4) ajouter la sphere au BG • Bg.addChild(c) Universe Vue locale BG BG TG colorcube View …

  13. Exemple : colorcube centre • 1) créer un SimpleUniverse • 2) creer la sphere • 3) créer un Branchgroup • 4) ajouter la sphere au BG • 5) ajouter le Bg à la scene • su.addBranchGraph(bg) Universe Scene 3D Vue locale BG BG TG colorcube View …

  14. y x z Fin tut1 • Résultat : • Rien n’est affiché • Réponse : • On se trouve au centre du colorcube • Les surfaces ont un exterieur/interieur • la camera par defaut : • Elle doit etre en 0,0,0 • Regarde dans l’axe des z>0 • Mettre à jour univers.getViewingPlatform( ).setNominalViewingTransform( ) ;

  15. Tut2 : déplacer le colorcube • En java3D • On n’accède pas directement aux coordonnées • Tout fonctionne par transformation • Translations • Rotations • Comment ca marche • On cree un objet  centre du repere • On décale l’objet en y ajoutant des transformations

  16. Les transformations • Deux classes • transformGroup : un noeud de transformation • transform3D : une transformation • Utilisation BG TG Construit avec transform3D colorcube

  17. Universe Vue locale BG BG TG TG colorcube View Colorcube decale Graph scene voulu

  18. Universe Vue locale BG TG View Colorcube decale • créer univers • simpleUniverse su= …

  19. Universe Vue locale BG TG View Colorcube decale • créer univers • créer colorcube • ColorCube c=new ColorCube() colorcube

  20. Universe Vue locale BG TG View Colorcube decale • créer univers • créer colorcube • créer transformgroup • TransformGroup Tg= new TransformGroup() TG colorcube

  21. Universe Vue locale BG TG View Colorcube decale • créer univers • créer colorcube • créer transformgroup • ajouter sphere au TG • Tg.addChild(s) TG colorcube

  22. Universe Vue locale BG TG View Colorcube decale • créer univers • créer colorcube • créer transformgroup • ajouter sphere au TG • créer branchgroup • BranchGroup bg=new Branchgroup() BG TG colorcube

  23. Universe Vue locale BG TG View Colorcube decale • créer univers • créer colorcube • créer transformgroup • ajouter sphere au TG • créer branchgroup • ajouter transformgroup au BG • Bg.addChild(tg); BG TG colorcube

  24. Universe Vue locale BG BG TG TG colorcube View Colorcube decale • créer univers • créer colorcube • créer transformgroup • ajouter sphere au TG • créer branchgroup • ajouter transformgroup au BG • ajouter BG à la scène • Su.addGraphChild(Bg)

  25. Universe Vue locale BG BG TG TG colorcube View Colorcube decale • créer univers • créer colorcube • créer transformgroup • ajouter sphere au TG • créer branchgroup • ajouter transformgroup au BG • ajouter BG à la scène • Modifier la transformation

  26. Changer la transformation • Créer un objet transform3D • Transform3D tr = new Transform3D(); • Modifier l’objet transform • Translation • Tr.setTranslation(new Vector3f(0f,0f,1f)); • Rotation • Tr.rotY(angle); • Mettre à jour le transformgroup • Tg.setTransform(tr);

  27. Important • Différence entre • Déplacer la camera • Déplacer l’objet • Avec un seul objet on ne s’en rend pas compte • Mais … déplacer un objet • Deplacer par rapport à la camera • Deplacer par rapport aux autres objets

  28. Tutoriel 3 • Raisonner de manière hiérarchique • Avec des branchgroup • Exemple faire un carrelage …

  29. Scene graphe… Universe Position globale du sol locale Vue TG BG BG TG TG TG TG TG Carreau View … cube cube cube cube

  30. BG BG rotation translation TG TG TG TG rotation translation colorcube colorcube Tutorial 4 : composition des transformations • On peut mettre des transformations • Les unes au dessus des autres • Mais attention à l’ordre • Un exemple

  31. Composition de transformation • Tg.setTransform • Associe au tg le transform3D • On « repart de 0 » • Le faire de manière incrémentale • Je fais une translation • J’ajoute une autre translation, etc… • Utiliser la methode mul de transform3D • Multiplication de matrice

  32. Exemple … • J’ai Tg avec une certaine rotation • Je fais tourner de Pi/4 en plus • //modifier la transformation • Transform3D tr2=new Transform3D(); • tr2.rotY(Math.PI/4); • //mise à jour de tg • tg.setTransform(tr2); //recuperation du tr Transform3D trDeTg=new Transform3D(); tg.getTransform(trDeTg); //cretion de la seconde transfo Transform3D t2=new Transform3D(); t2.rotY(Math.PI/4); //composition trDeTg.mul(t2); //je remet le transform tg.setTransform(trDeTg);

  33. Tut 5 : Objets reels • On fait comme le tut3 • Mais au lieu d’un colorcube, on met une sphere • Resultat : • On ne voit rien •  Il faut modifier les propriétés de l’objet

  34. Modification des propriétés • Classe Appearance • Couleur • Methode setColoringAttributes( ) ; • Texture, etc … • Classe Material • Gestion de la reaction à lumiere

  35. Juste modification de la couleur • Reste (texture, etc …) allez voir API //creation apparence Appearance SphereApp= new Appearance ( ) ; ColoringAttributes ca; ca= new ColoringAttributes(1, 0, 0,ColoringAttributes.SHADE_GOURAUD); SphereApp.setColoringAttributes(ca) ; //affectation apparence sphere.setAppearance( SphereApp) ; RGB Chaque composante entre 0 et 1

  36. Tut6 : accès à la camera • La camera est dans le ViewPlatform… • Structure de la manière suivante : • Acces au tg de la camera… • TransformGroup view = simpleU.getViewingPlatform().getViewPlatformTransform(); BG TG View …

  37. Tut7 : simuler une voiture • On arrive dans le vif du sujet … • Je veux controler une voiture qui bouge • Deux choses • Modele reel • position de la voiture, attributs de voiture, etc … • Le modele3D • position du cube de la voiture dans le repere • Les deux doivent être traités !!! • On ne se concentrera que sur le modele3D • Le reste c’est du java classique

  38. Tut7 : simuler une voiture • Comment faire … • Classe voiture avec une methode • deplacer • Dans ces methodes • Gerer la modification des attributs • Gerer la scene3D • Premiere question • Comment organiser la scene ?

  39. Tut7 : simuler une voiture • Scene tres simple … Voiture BG Translation dans le monde TG Modèle de la voiture Éventuellement un BG rectangle

  40. Tut7 : simuler une voiture • Classe voiture de base publicstaticfinalintNORD=0; publicstaticfinalintEST=1; publicstaticfinalintSUD=2; publicstaticfinalintOUEST=3; int x; int y; public voiture() { x=0;y=0; } publicvoid deplace(int action) { switch(action) { caseNORD : y=y-1; break; caseSUD : y=y+1; break; caseEST : x=x+1; break; caseOUEST: x=x-1; break; } }

  41. Tut7 : simuler une voiture publicclass Voiture3D extends voiture { TransformGroup tg; publicvoid createModel(SimpleUniverse u) { if (tg == null) { BranchGroup bg = new BranchGroup(); tg = new TransformGroup(); bg.addChild(tg); BranchGroup voiture = shapeVoiture(); tg.addChild(voiture); u.addBranchGraph(bg); } } public BranchGroup shapeVoiture() { BranchGroup bg=new BranchGroup(); bg.addChild(new ColorCube()) return (bg); } publicvoid deplace(int action) { super.deplace(action); Transform3D tr=new Transform3D(); tr.setTranslation(new Vector3f(x,y,0)); tg.setTransform(tr); } } • Classe voiture 3D • Hérite de voiture • Connaît TG • Génère modèle 3D • Modifie la scène

  42. Tut7 : déplacement • Juste des appels à la méthode déplace • De voiture 3D • Pour le clavier • Regarder les classes behaviour (cf suite) • Attention, • Lorsqu’on ajoute un TG à une scène il n’est pas modifiable par défaut • Exception : javax.media.j3d.CapabilityNotSetException • Besoin de changer ses capacités • tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

  43. Tut 7 :main publicclass mainVoiture { /** * @param args */ publicstaticvoid main(String[] args) { Voiture3D v=new Voiture3D(); //créer univers SimpleUniverse su=new SimpleUniverse(); TransformGroup camera=su.getViewingPlatform( ).getViewPlatformTransform(); //decale camera Transform3D position=new Transform3D(); position.setTranslation(new Vector3f(0,0,10)); Camera.setTransform(position); //ajoute la voiture et la deplace v.createModel(su); v.deplace(voiture.NORD); v.deplace(voiture.EST); } }

  44. Tut8 : déplacement de camera • Presque pareil … • Sauf que … • Modifier la position de la camera • A partir du clavier • Pour récupérer le Tg de la camera • camera=su.getViewingPlatform( ).getViewPlatformTransform();

  45. Tut 8 : juste la rotation • Faire une rotation de angle à partir TG • Récupérer le Tranfsorm3D du TG • Tg.getTransform(tr); • Le multiplier par un transform3D qui rotate • TrRotate=new Transform3D(); • TrRotate.rotY(angle); • Tr.mul(TrRotate); • Modifier le TG • TG.setTransform(tr);

  46. Tut 8 :les behaviours • Pour le clavier, on ajoute un behaviour • S’ajoute au TG • Permet de gérer les événements claviers • Créer une classe qui étend behaviour • Recupere les evenement clavier • Exécute les bonnes transformations en fonction de l’evenement

  47. Tut 8 :deplacements subjectifs • On suppose qu’on a un TG avec un TR • Pour une rotation • On cree la rotation R • on fait R avant TR pour la rotation locale • R.TR • Pour une translation (avancer reculer dans la bonne direction) • On cree la translation trans (0,0,1) • On fait la translation apres TR pour etre dans repere local • TR.trans