Tutoriel java3D
description
Transcript of Tutoriel java3D
![Page 1: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/1.jpg)
Tutoriel java3D
Projet tutore
![Page 2: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/2.jpg)
Java3D c’est quoi ?
• API haut niveau 3D– Construire– Interagir
• Un ensemble de classes– Structure arborescente– java3D utilise des librairies natives
• directX, openGL
![Page 3: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/3.jpg)
Repère 3D
y
x
z
![Page 4: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/4.jpg)
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
![Page 5: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/5.jpg)
Scene graph
Universe
locale
BG
Shape
BG
TG
View
Scene 3D Vue
…
![Page 6: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/6.jpg)
Scene graph
Universe
locale
BG
Shape
BG
TG
View
Scene 3D Vue
…
simpleUniverse
![Page 7: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/7.jpg)
Exemple 1 : colorcube centre
![Page 8: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/8.jpg)
Exemple : colorcube centre
Universe
locale
BG
colorcube
BG
TG
View
Scene 3D Vue
…
![Page 9: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/9.jpg)
Exemple : colorcube centre
• 1) créer un SimpleUniverse– SimpleUniverse su = new SimpleUniverse();
Universe
locale
BG
TG
View
Vue
…
![Page 10: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/10.jpg)
Exemple : colorcube centre
• 1) créer un SimpleUniverse
• 2) creer le colorcube– ColorCube c = new ColorCube();
Universe
locale
colorcube
BG
TG
View
Vue
…
![Page 11: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/11.jpg)
Exemple : colorcube centre
• 1) créer un SimpleUniverse
• 2) creer la sphere
• 3) créer un Branchgroup– BranchGroup BG=new BranchGroup()
Universe
locale
BG
colorcube
BG
TG
View
Vue
…
![Page 12: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/12.jpg)
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
locale
BG
colorcube
BG
TG
View
Vue
…
![Page 13: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/13.jpg)
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
locale
BG
colorcube
BG
TG
View
Scene 3D Vue
…
![Page 14: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/14.jpg)
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 à jourunivers.getViewingPlatform( ).setNominalViewingTransform( ) ;
y
x
z
![Page 15: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/15.jpg)
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
![Page 16: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/16.jpg)
Les transformations
• Deux classes– transformGroup : un noeud de transformation– transform3D : une transformation
• Utilisation
TG
colorcube
BG
Construit avec transform3D
![Page 17: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/17.jpg)
BG
colorcube
TG
BG
TG
View
Vue
Colorcube decale
Universe
locale
Graph scene voulu
![Page 18: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/18.jpg)
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers• simpleUniverse su= …
![Page 19: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/19.jpg)
colorcube
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers
2. créer colorcube• ColorCube c=new ColorCube()
![Page 20: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/20.jpg)
colorcube
TG
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers
2. créer colorcube
3. créer transformgroup• TransformGroup Tg
= new TransformGroup()
![Page 21: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/21.jpg)
colorcube
TG
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers
2. créer colorcube
3. créer transformgroup
4. ajouter sphere au TG• Tg.addChild(s)
![Page 22: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/22.jpg)
BG
colorcube
TG
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers
2. créer colorcube
3. créer transformgroup
4. ajouter sphere au TG
5. créer branchgroup• BranchGroup bg=
new Branchgroup()
![Page 23: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/23.jpg)
BG
colorcube
TG
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers
2. créer colorcube
3. créer transformgroup
4. ajouter sphere au TG
5. créer branchgroup
6. ajouter transformgroup au BG• Bg.addChild(tg);
![Page 24: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/24.jpg)
BG
colorcube
TG
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers
2. créer colorcube
3. créer transformgroup
4. ajouter sphere au TG
5. créer branchgroup
6. ajouter transformgroup au BG
7. ajouter BG à la scène• Su.addGraphChild(Bg)
![Page 25: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/25.jpg)
BG
colorcube
TG
BG
TG
View
Vue
Colorcube decale
Universe
locale
1. créer univers
2. créer colorcube
3. créer transformgroup
4. ajouter sphere au TG
5. créer branchgroup
6. ajouter transformgroup au BG
7. ajouter BG à la scène
8. Modifier la transformation
![Page 26: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/26.jpg)
Changer la transformation
1. Créer un objet transform3D– Transform3D tr = new Transform3D();
2. Modifier l’objet transform– Translation
• Tr.setTranslation(new Vector3f(0f,0f,1f));
– Rotation• Tr.rotY(angle);
3. Mettre à jour le transformgroup– Tg.setTransform(tr);
![Page 27: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/27.jpg)
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
![Page 28: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/28.jpg)
Tutoriel 3
• Raisonner de manière hiérarchique– Avec des branchgroup
• Exemple faire un carrelage …
![Page 29: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/29.jpg)
Scene graphe…
Universe
locale
BG
cube
BG
TG
View
Vue
…
cube cube cube
TG TG TG TG
TG
Position globale du sol
Carreau
![Page 30: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/30.jpg)
Tutorial 4 : composition des transformations
• On peut mettre des transformations – Les unes au dessus des autres
• Mais attention à l’ordre– Un exemple
BG
colorcube
TG
TG
rotation
translation
BG
colorcube
TG
TG
translation
rotation
![Page 31: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/31.jpg)
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
![Page 32: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/32.jpg)
Exemple …• J’ai Tg avec une certaine rotation
• Je fais tourner de Pi/4 en plus
//modifier la transformationTransform3D tr2=new Transform3D();tr2.rotY(Math.PI/4);//mise à jour de tgtg.setTransform(tr2);
//recuperation du trTransform3D trDeTg=new Transform3D();tg.getTransform(trDeTg);//cretion de la seconde transfoTransform3D t2=new Transform3D();t2.rotY(Math.PI/4);//compositiontrDeTg.mul(t2);//je remet le transformtg.setTransform(trDeTg);
![Page 33: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/33.jpg)
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
![Page 34: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/34.jpg)
Modification des propriétés
• Classe Appearance– Couleur
• Methode setColoringAttributes( ) ;
– Texture, etc …
• Classe Material– Gestion de la reaction à lumiere
![Page 35: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/35.jpg)
Juste modification de la couleur
• Reste (texture, etc …) allez voir API
//creation apparenceAppearance SphereApp= new Appearance ( ) ;ColoringAttributes ca;ca= new ColoringAttributes(1, 0, 0,ColoringAttributes.SHADE_GOURAUD); SphereApp.setColoringAttributes(ca) ;
//affectation apparencesphere.setAppearance( SphereApp) ;
RGBChaque composante entre 0 et 1
![Page 36: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/36.jpg)
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…
![Page 37: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/37.jpg)
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
![Page 38: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/38.jpg)
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 ?
![Page 39: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/39.jpg)
Tut7 : simuler une voiture
• Scene tres simple …
BG
TG
rectangle
Voiture
Modèle de la voitureÉventuellement un BG
Translation dans le monde
![Page 40: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/40.jpg)
Tut7 : simuler une voiture
• Classe voiture de basepublic static final int NORD=0;public static final int EST=1;public static final int SUD=2;public static final int OUEST=3;
int x;int y;
public voiture(){x=0;y=0;}
public void deplace(int action){switch(action){case NORD : y=y-1; break;case SUD : y=y+1; break;case EST : x=x+1; break;case OUEST: x=x-1; break;}}
![Page 41: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/41.jpg)
Tut7 : simuler une voiture
• Classe voiture 3D– Hérite de voiture
• Connaît TG
– Génère modèle 3D
– Modifie la scène
public class Voiture3D extends voiture {TransformGroup tg;
public void 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);}
public void deplace(int action){ super.deplace(action); Transform3D tr=new Transform3D(); tr.setTranslation(new Vector3f(x,y,0)); tg.setTransform(tr);}
}
![Page 42: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/42.jpg)
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);
![Page 43: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/43.jpg)
Tut 7 :main
public class mainVoiture {
/** * @param args */public static void 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);}
}
![Page 44: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/44.jpg)
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();
![Page 45: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/45.jpg)
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);
![Page 46: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/46.jpg)
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
![Page 47: Tutoriel java3D](https://reader030.fdocument.pub/reader030/viewer/2022033013/568143a0550346895db02027/html5/thumbnails/47.jpg)
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