Upload
emmanuel-gilles
View
103
Download
0
Embed Size (px)
Citation preview
Copyright © 2001 Laurent Deruelle 2
L ’API JAVA3D
• API JAVA3D– ensemble d ’interfaces pour des applications 3D
à haute performance– gestion de l ’accélération matérielle (Open GL
et Direct3D)– compression des modèles 3D pour un
téléchargement rapide (Web 3D).
Copyright © 2001 Laurent Deruelle 3
L ’API JAVA3D
• L ’API Java3D– Intègre le son 3D : immersion – LOD (level of Detail) : la résolution des objets
dépend de leur proximité.
• Localisation :– import com.sun.j3d.utils.universe.*;– import javax.media.j3d.*;– import javax.vecmath.*;
Copyright © 2001 Laurent Deruelle 4
Utilisations de Java3D
• Java3D peut être utilisé dans les cas suivants:– Web : navigation en 3D (applets), logos 3D– Systèmes de réalité virtuelle : monde complexe
3D– Jeux 3D– Systèmes CAO/DAO
Copyright © 2001 Laurent Deruelle 5
Exemple en Java 3D
Copyright © 2001 Laurent Deruelle 6
Modélisation d ’une Scène
• L ’API Java3D est basée sur un modèle de graphes pour la représentation d ’une scène.
• Le graphe décrit entièrement la scène (monde virtuel) :– Les données géométriques ,– les attributs pour le rendu,– les points de vues.
Copyright © 2001 Laurent Deruelle 7
Modélisation d ’une Scène
• Le graphe d ’une scène consiste en une structure de composants :– un univers virtuel représente un univers nommé
Java 3D peut créer plusieurs univers dans une application
– un objet local, qui définit l’origine de l ’univers: coordonnées de ses sous graphes (0.0, 0.0, 0.0)
– un ensemble de sous graphes décrivant les objets, leurs comportements, etc.
Copyright © 2001 Laurent Deruelle 8
Le nœud BranchGroup • Ce type de nœud est la racine des sous graphes du
monde virtuel.
• Il consiste en – un nœud Behavior qui contient le code Java pour
manipuler l ’objet (matrices)– un nœud TransformGroup qui spécifie la position,
l ’orientation, l échelle de l ’objet.– Un nœud ViewPlatform définit la vue utilisateur de
l ’objet dans l ’univers (rendu)• compile() permet d ’optimiser la scène (cache).
Copyright © 2001 Laurent Deruelle 9
Le nœud Behavior
• Il permet l ’animation des objets, la gestion des événements claviers, souris ainsi que de sélection des objets dans l ’univers.
• Ces interactions permettent de changer l ’état de l ’objet et d ’exécuter des traitements sur l ’objet.
Copyright © 2001 Laurent Deruelle 10
Le nœud Behavior
• Il contient un objet de gestion d ’une région du monde virtuel et deux méthodes :– initialize() définit l ’état interne de l ’objet et ses
conditions de réveil. Elle doit être redéfinie dans les sous classes, et est appelée automatiquement par le gestionnaire.
– processStimulus() doit être redéfinie dans une sous classe pour gérer des événements lorsque la région est visualisée par l ’utilisateur (ViewPlatform) . Elle est appelée par le gestionnaire.
Copyright © 2001 Laurent Deruelle 11
Le gestionnaire
• Le gestionnaire (scheduler) de l’API Java 3D réalise les fonctions suivantes:
– Trouver tous les objets Behavior dont les régions coupent le volume d ’activation de l’objet ViewPlatform.
– Pour chaque objet Behavior qui est dans le volume d’activation du ViewPlatform, vérifier le WakupCondition de l ’objet Behavior.
– Ordonnancer l ’objet Behavior pour son exécution si sa WakupCondition est true.
• La Condition de réveil est gérée par la méthode processStimulus().
Copyright © 2001 Laurent Deruelle 12
Les comportements• Il existe des comportements prédéfinis :
– Billboard – Interpolator
• ColorInterpolator (modification de la couleur)
• PositionInterpolator (translation d ’un objet)
• RotationInterpolator (rotation d ’un objet)
• ScaleInterpolator (mise à l ’échelle)
• TransparencyInterpolator (attribut de transparence)
– LOD -> DistanceLOD
Copyright © 2001 Laurent Deruelle 13
Le BillBoard
• Il opère sur un nœud TransformeGroup pour spécifier une transformation qui alignera toujours l ’objet de façon perpendiculaire au point de vue de l ’utilisateur.
• Exemple :des arbres dans une scène.
Copyright © 2001 Laurent Deruelle 14
La Caméra
• Les API de bas niveau (Direct3D et Open GL) utilise des caméras pour définir le point de vue de l ’utilisateur:– position dans le monde– son orientation
Copyright © 2001 Laurent Deruelle 15
Structure d ’un Univers
Copyright © 2001 Laurent Deruelle 16
Structure d ’un Univers
Copyright © 2001 Laurent Deruelle 17
La hiérarchie de classe Java3D
Copyright © 2001 Laurent Deruelle 18
Le Rendu
• L ’API Java3D gère une double buffer d ’affichage true color, et un Z-buffer pour le calcul des positions des objets.
• Il dispose des modes de rendu suivant:– Immediate mode :le programmeur donne les
détails des méthodes d ’affichage– Retained mode et Retained mode compilé :
construction du graphe, des animations, etc.
Copyright © 2001 Laurent Deruelle 19
Le Rendu
• L ’objet View spécifie les attributs de rendu. Il effecue le rendu des caméras.
• L ’objet Canvas3D conteint toutes les informations relatives à la fenêtre de rendu.
Copyright © 2001 Laurent Deruelle 20
Le Rendu
• L ’objet Screen3D associe les paramètres relatifs à l’écran physique (monieur, casque, etc.)
• les objets PhysicalBody et Phyical Environment contienent les paramètres de calibration (périphériques 6 degrés de libertés, etc.)
Copyright © 2001 Laurent Deruelle 21
Pipeline de Rendu
Copyright © 2001 Laurent Deruelle 22
Les groupes d ’objets
• L ’objet GroupNode regroupe un ensemble de nœuds, sur lesquels des opérations de rendu seront réalisées.
• Les opérations sont :– ajout d ’un nœud – suppression d ’un nœud,– énumération des nœuds
Copyright © 2001 Laurent Deruelle 23
Les groupes d ’objets
• Les nœuds sont :– BranchGroup – OrderedGroup : rendu suivant l ’ordre d ’ajout– SharedGroup : les sous graphes sont partagés– Swicth : choix de sous graphes dynamiquement– TransformGroup : transformation qui spécifie
la position, l ’orientation, l ’échelle des nœuds du sous graphes.
Copyright © 2001 Laurent Deruelle 24
Hiérarchie des groupes d ’objet
Copyright © 2001 Laurent Deruelle 25
Les objets feuilles
• Les objets feuilles spécifient les lumières, la géométrie et les sons et le partage d ’objets dans une scène (SharedGroup)
Copyright © 2001 Laurent Deruelle 26
Les objets feuilles
• L ’objet BackGround spécifie la couleur ou une image utilisée pour remplir la fenêtre à chaque début d ’image.
• L ’objet BoundingLeaf spécifie une région limite, pour définir une région d ’activation, ou une région du gestionnaire.
• L ’objet ClipNode définit un zone pour éliminer des objets.
Copyright © 2001 Laurent Deruelle 27
Les objets feuilles
• L ’objet Fog spécifie les attributs pour effectuer un brouillard.
• Les objets Light et AmbientLight définissent les propriétés des lumières (couleur, état on/off)
• L ’objet Link permet de référencer un sous graphes partagés
Copyright © 2001 Laurent Deruelle 28
Les objets feuilles
• L ’objet Morph permet un morphing entre de multiples géométries (GeometyArrays)
• L ’objet Shape3D spécifie les géométries de l ’objet et contient deux composants :– une référence sur la forme de l ’objet,– une référence sur son apparence.
Copyright © 2001 Laurent Deruelle 29
Copyright © 2001 Laurent Deruelle 30
Les attributs des nœuds
• Les objets attributs décrivent des informations concernant l ’apparence de l ’objet (matériaux, textures, images).
• Ils implémentent des propriétés telles que les zones limites (bounding box), etc.
Copyright © 2001 Laurent Deruelle 31
Copyright © 2001 Laurent Deruelle 32
Le nœud Appearance
• Il définit l ’apparence d ’une forme 3D (Shape3D).
• Il définit les méthodes suivantes :– Material getMaterial() : l ’objet fil de fer
– RenderingAttributes getRenderingAttributes() : les attributs de rendu
– Texture getTexture() : la texture de l ’objet
– TransparencyAttributes getTransparencyAttributes() : options de transparence
– idem avec set
Copyright © 2001 Laurent Deruelle 33
Le nœud ColoringAttributes
• Il définit une couleur à mettre sur une forme (remplace la texture) et les options de lissage.
• Les méthodes sont:– setColor(float r, v ,b)
– setShadeModel(int model)• ColoringAttributes.FASTEST• ColoringAttributes.SHADE_FLAT• ColoringAttributes.FASTEST_GOURAUD
Copyright © 2001 Laurent Deruelle 34
Le nœud LineAttributes• Il permet de définir les attributs de rendu
des lignes d ’une forme 3D (taille, style de ligne, antialiasing)
• Les méthodes sont :– setLineAntialiasingEnable(boolean etat)– setLineWidth(float taille)– setLinePattern(int modele)
• LineAttributes.PATTERN_DASH, LineAttributes.PATTERN_DOT, LineAttributes.PATTERN_SOLID
Copyright © 2001 Laurent Deruelle 35
Le nœud RenderingAttributes
• Il définit toutes les propriétés de rendu des formes 3D.
• Les méthodes sont :– setAlphaTestValue (float valeur)– setAlphaTestFunction (int fonction)
• ALWAYS : toujours afficher le pixel
• EQUAL : l ’alpha du pixel = la valeur alpha test
• GREATER, GREATER_OR_EQUAL, LESS, LESS_OR_EQUAL, NOT_EQUAL
• NEVER : pixel jamais dessiné.
Copyright © 2001 Laurent Deruelle 36
Le nœud TextureAttributes
• Il définit tous les effets à appliquer à un objet 3D.
• Les constantes pour le mode sont :– BLEND : applique l ’alpha blending– MODULATE : modulation de la couleur de l ’objet
avec la couleur de la texture– FASTEST : la plus rapide (interne)– NICEST : la plus belle (interne)– REPLACE : remplace la couleur de l ’objet
Copyright © 2001 Laurent Deruelle 37
Le nœud Texture
• Il définit les attributs à appliquer à la texture d ’un objet 3D. (import com.sun.j3d.utils.image.TextureLoader)
• Il est spécialisé en Texture2D et Texture3D
• Le chargement des textures est réalisé parTextureLoader tex = new TextureLoader(URL Image, new String("RGB"), this);
TextureLoader tex = new TextureLoader(String Image, this);
ImageComponent2D img = tex.getImage(); //existe tex.getTexture();
Texture2D t =new Texture2D();
t.setImage(0, img);
Appearance ap = new Appearance()
ap.setTexture(t);
Copyright © 2001 Laurent Deruelle 38
Le nœud TransparencyAttributes
• Il définit tous les effets de transparence appliqués à un objet 3D par les méthodes setTransparency(float valeur) et setTransparencyMode(int mode)
• Les constantes pour le mode sont :– BLENDED : transparence par alpha blending– FASTEST : la plus rapide (interne)– NICEST : la plus belle (interne)– NONE : objet opaque
Copyright © 2001 Laurent Deruelle 39
Le nœud Material
• Il est utilisé par l ’objet Appearance et spécifie les polygones qui constituent l ’objet. Il est utilisé lorsque l ’objet est soumis à une lumière.
• Material(Color3f ambientColor, Color3f emissiveColor, Color3f diffuseColor, Color3f specularColor, float brillance)
Par défaut :
lighting enable : trueambient color : (0.2, 0.2, 0.2)emmisive color : (0.0, 0.0, 0.0)diffuse color : (1.0, 1.0, 1.0)specular color : (1.0, 1.0, 1.0)brillance: 64
Copyright © 2001 Laurent Deruelle 40
Le nœud Bounds
• Il définit deux types de volumes pour la sélection des objets :– BoundingBox : boîte englobante– BoundingSphere : sphère englobante (centre et
un rayon)
Copyright © 2001 Laurent Deruelle 41
Le nœud Transform3D
• Il définit une matrice 4x4 pour effectuer des transformations des objets 3D définis dans l ’univers.
• Il définit des opérations de multiplications, de transpositions, d ’inversions, de normalisation, etc.
• Il définit des méthodes rotX(), rotY(), rotZ().
Copyright © 2001 Laurent Deruelle 42
Le nœud Text3D
• Il permet de dessiner du texte dans un environnement en 3D :– setString(String texte);
• Il est possible de spécifier une fonte :– setFont3D(Font3D fonte);
• Il est possible de donner une position:– setPosition(Point3f position);
Copyright © 2001 Laurent Deruelle 43
Développement d ’un monde 3DGraphicsConfiguration config =SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
add("Center", c);
// createSceneGraph est une méthode à définir
BranchGroup scene = createSceneGraph();
u = new SimpleUniverse(c);
// Modifie la position de la vue pour que
// les objets dans la scène puissent être visualisé.
u.getViewingPlatform().setNominalViewingTransform();
TransformGroup viewTrans =
u.getViewingPlatform().getViewPlatformTransform();
GestionComportement();
scene.compile();
u.addBranchGraph(scene);
Copyright © 2001 Laurent Deruelle 44
Gestion des interactions Souris(com.sun.j3d.utils.behaviors.mouse)
// Créer le nœud de comportement Behavior pour la rotation
MouseRotate behavior1 = new MouseRotate(viewTrans);
scene.addChild(behavior1);
behavior1.setSchedulingBounds(bounds);
//Créer le nœud de comportement Behavior pour le zoom
MouseZoom behavior2 = new MouseZoom(viewTrans);
scene.addChild(behavior2);
behavior2.setSchedulingBounds(bounds);
//Créer le nœud de comportement Behavior pour la translation
MouseTranslate behavior3 = new MouseTranslate(viewTrans);
scene.addChild(behavior3);
behavior3.setSchedulingBounds(bounds);
Copyright © 2001 Laurent Deruelle 45
Création de la scène
public BranchGroup createSceneGraph() {
// création du nœud racine du graphe
BranchGroup objRoot = new BranchGroup();
// ajouter les transformations ex: objScale
objRoot.addChild(objScale);
// ajouter les objets 3d avec leurs transformations, textures
// définir les lumières
return objRoot;
}
Copyright © 2001 Laurent Deruelle 46
Liens Utiles
• API de Java3D :– http://java.sun.com/products/java-media/3D/
forDevelopers/j3dapi/javax/media/j3d/ package-summary.html