Tutoriel java3D Projet tutore.

Slides:



Advertisements
Présentations similaires
Chaîne de Synthèse Réel Modélisation Rendu Image Fichier Scène
Advertisements

Spécialisation/généralisation Héritage Polymorphisme
Le mécanisme des exceptions
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
(Classes prédéfinies – API Java)
Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
PHP5 poo.
LE GRAPHISME AVEC JAVA 3D
VI50 – TP3 Introduction à Virtools. Virtools Virtools Media Design 3DS, Maya, Lightwave… Sound Design wav, mp3… Texture, 2D interface jpg, bmp… Specific.
Introduction à Virtools
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
12 novembre 2012 Grégory Petit
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !
Simulation 3D d’un dispositif de fourchette électronique
Programmation orientée objet
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Langage Oriente Objet Cours 4.
IFT3730: Infographie 3D Transformations Géométriques
1 Transformations affines But: fixer le positionnement et lorientation des objets de la scène.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
DESS CCI POO-JAVA TD n°7 exercice n°1
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Cours 4 Héritage (suite).
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
CSI1502 Principes fondamentaux en conception des logiciels
IFT3355: Infographie Transformations Géométriques
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
Conception et développement d ’une interface entre un environnement de réalité virtuelle et un périphérique d ’interaction.
4 Introduction des objets. Les chaînes et tableaux
Java 3D DESS TNI Université MONTPELLIER II Xavier ANDREANI.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
MAMAMAMA 2-6 mai ‘11. Introduction Les 5 parties de l'interface utilisateur sont : arborescence - contient la liste des objets dans le monde actuel.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Cours NOMBRES COMPLEXES ET TRANSFORMATIONS.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
14 La gestion d’événements
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
Entrées / Sorties.
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Programmation Système et Réseau
Les sockets.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
GRAPHISME PAR ORDINATEUR
Guillaume Collombet Ulysse Mensa Sylvain Chambe
Généricité.
Premières notions de la 3D
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
Flash MX – Séance 2 Interactions & ActionScript David Rapin Si28 P06.
LES CLASSES ET LES OBJETS
Java, open GL et la mobilité
Transcription de la présentation:

Tutoriel java3D Projet tutore

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

Repère 3D y x z

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

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

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

Exemple 1 : colorcube centre

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

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

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

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 …

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 …

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 …

Fin tut1 Résultat : Réponse : la camera par defaut : Mettre à jour 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( ) ; y x z

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

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

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

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

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

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

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

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

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); Universe locale BG TG View Vue BG TG colorcube

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) Universe locale BG TG View Vue BG colorcube TG

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 Universe locale BG TG View Vue BG colorcube TG

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);

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

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

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

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 translation rotation BG colorcube TG rotation translation

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

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);

Tut 5 : Objets reels On fait comme le tut3 Resultat : 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

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

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

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 …

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

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 ?

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

Tut7 : simuler une voiture Classe voiture de base public 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;

Tut7 : simuler une voiture 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); Classe voiture 3D Hérite de voiture Connaît TG Génère modèle 3D Modifie la scène

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);

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); }

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();

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);

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

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