46
Copyright © 2001 Laurent Deruelle 1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle [email protected] littoral.fr

Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle [email protected]

Embed Size (px)

Citation preview

Page 1: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 1

LE GRAPHISME AVECJAVA 3D

Laurent Deruelle

[email protected]

Page 2: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 3: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.*;

Page 4: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 5: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 5

Exemple en Java 3D

Page 6: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 7: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 8: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 9: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 10: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 11: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 12: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 13: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 14: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 15: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 15

Structure d ’un Univers

Page 16: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 16

Structure d ’un Univers

Page 17: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 17

La hiérarchie de classe Java3D

Page 18: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 19: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 20: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 21: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 21

Pipeline de Rendu

Page 22: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 23: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 24: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 24

Hiérarchie des groupes d ’objet

Page 25: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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)

Page 26: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 27: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 28: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 29: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 29

Page 30: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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.

Page 31: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 31

Page 32: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 33: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 34: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 35: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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é.

Page 36: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 37: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 38: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 39: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 40: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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)

Page 41: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 42: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 43: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 44: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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

Page 45: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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;

}

Page 46: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 3D Laurent Deruelle deruelle@lil.univ-littoral.fr

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