74
Java 3D Concepts de base Licence Professionnelle : M´ etiers de l’Informatique Image et Vid´ eo Patrick Reignier Universit´ e Joseph Fourier 2000 – 2001 Java 3D P. Reignier

Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Embed Size (px)

Citation preview

Page 1: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Java 3DConcepts de base

Licence Professionnelle : Metiers de l’Informatique

Image et Video

Patrick ReignierUniversite Joseph Fourier

2000 – 2001

Java 3D P. Reignier

Page 2: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Plan

• Generalites

• Presentation de Java3D

• Graphe de scenes

• Exemple

Java 3D P. Reignier

.1

Page 3: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

A

Generalites sur la synthese d’imagestemps reel

Java 3D P. Reignier

Page 4: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Synthese d’images temps reel

• Aspect materiel : facultatif mais fortement conseille.

– Stations specialisees :

SGI, Sun, HP, IBM

– Cartes acceleratrices :

PC, Mac dans une moindre mesure.

• Aspect logiciel :

– APIs

Java 3D P. Reignier

A.1

Page 5: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

APIs

• Grande variete.

• Deux grandes categories :

– Les APIs bas niveau

– Les APIs haut niveau

Java 3D P. Reignier

A.2

Page 6: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

APIs bas niveau

• Interface avec le materiel.

• Emule le materiel inexistant.

• Tres bas niveau d’abstraction :

– Sommets, faces

– Processus de rendu

• Exemples :

– OpenGL : Standard multi OS, multi machines.

– Direct3D IM : Windows.

Java 3D P. Reignier

A.3

Page 7: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

APIs haut niveau

• S’appuient sur les APIs bas niveau.

• Haut niveau d’abstraction :

– Objets par opposition a sommets

– Contenu par opposition a processus de rendux

• Graphe de scenes (voir transparents suivants)

• Exemples

– Open Inventor, Performer, OpenGL Optimizer, Java3D . . .

– Direct3D RM

Java 3D P. Reignier

A.4

Page 8: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes

• Univers 3D ;

– Un ensembles d’objets 3D.

– Une ou plusieurs cameras.

• Objet 3D :

– Formes eux-memes d’un ensemble d’objets 3D.

– Exemple :

Un Avion = un fuselage + des ailes.

Java 3D P. Reignier

A.5

Page 9: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes

• Scene 3D = hierarchie d’objets

⇒ notion de graphe de scenes

• Exemple : elements constituantsa

aextrait de JavaOne 99, Sun

Java 3D P. Reignier

A.6

Page 10: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes

• On commence a grouper les elements de base

Java 3D P. Reignier

A.7

Page 11: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes

• On finit l’avion.

Java 3D P. Reignier

A.8

Page 12: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes

Java 3D P. Reignier

A.9

Page 13: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes

Java 3D P. Reignier

A.10

Page 14: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

B

Presentation

Java 3D P. Reignier

Page 15: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Java 3D

• API 3D developpee par SUN en 1998

• Base sur la notion de graphe de scenes.

• Classes Java pour :

– la creation

– la manipulation des scenes 3D

• Acces a tous les packages Java

Java 3D P. Reignier

B.1

Page 16: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Rendu 3D

• Rendu haute performance.

• Utilisation de l’acceleration 3D materielle si disponible.

• Base sur :

– OpenGL.

– Direct3D.

Java 3D P. Reignier

B.2

Page 17: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Applications

• Visualisation scientifique.

• Visualisation d’informations.

• Entraınement medical.

• Systeme d’information geographique.

• CAO.

• etc. . .

Java 3D P. Reignier

B.3

Page 18: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Visualisation scientifique

Java 3D P. Reignier

B.4

Page 19: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Visualisation medicale

Java 3D P. Reignier

B.5

Page 20: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Conception Assistee par Ordinateur

Java 3D P. Reignier

B.6

Page 21: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

C

Graphe de scenes

Java 3D P. Reignier

Page 22: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes

• Java3D repose sur la notion de graphe de scenes

– Feuilles : formes 3D, lumieres, sons, comportements . . .

– Parents : groupes d’enfants, transformations 3D . . .

⇒ groupement hierarchique de formes.

Java 3D P. Reignier

C.1

Page 23: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Application Java3D

• Developpeur :

– Construction et mise a jour d’un graphe a l’aide des

classes et des methodes Java3D

• Service assure par Java3D :

– Rendu a l’ecran du contenu du graphe

Java 3D P. Reignier

C.2

Page 24: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Rendu

• Ordre de parcours du graphe :

– Choisi par Java 3D

• Rendu via des threads independants et asynchrones

– Graphique.

– Son.

– Comportement (animation).

– Peripheriques d’entree-sortie.

– Evenements (detection de collisions).

Java 3D P. Reignier

C.3

Page 25: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Vocabulaire

Node : un noeud du graphe de scenes

• Leaf node : une feuille

– Formes, sons, lumieres

– Comportement (animation)

• Group node : un noeuds avec enfants

– Transformations, switch . . .

Node component : les attributs d’un noeud

• La description geometrique d’une forme

• La couleur d’une forme

• Un son a jouer.

• . . .

Java 3D P. Reignier

C.4

Page 26: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Classes Java3D

Java 3D P. Reignier

C.5

Page 27: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Univers : terminologie

• Univers Virtuel (Virtual Universe)

– Collection de graphes de scene

∗ Un par application

∗ C’est le sommet du graphe

• Repere (Locale)

– Generalement un par univers

• Graphe de scenes (Branch Graph)

– generalement, plusieurs graphes par repere

Java 3D P. Reignier

C.6

Page 28: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scenes : terminologie

• Branches de scenes :

– Formes, lumieres . . .

• Branche de visualisation

– Generation d’images

– Generalement une par univers

Java 3D P. Reignier

C.7

Page 29: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scene : representation graphique

Java 3D P. Reignier

C.8

Page 30: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Graphe de scene : representation graphique

Java 3D P. Reignier

C.9

Page 31: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Background

Java 3D P. Reignier

C.10

Page 32: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Background

• Definit une couleur ou une image de fond

• Un ou plusieurs par graphe de scene :

– Zone d’activation

– Aucun fond actif ⇒ fond noir

• javax.media.j3d.Background

Java 3D P. Reignier

C.11

Page 33: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Exemple

BoundingSphere bounds =

new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);

Color3f bgColor = new Color3f(0.05f, 0.05f, 0.7f);

Background bgNode = new Background(bgColor);

bgNode.setApplicationBounds(bounds);

• Il reste a mettre le noeud dans le graphe.

Java 3D P. Reignier

C.12

Page 34: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Lights

Java 3D P. Reignier

C.13

Page 35: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Lights

• Classe abstraite :

– AmbientLight

– DirectionalLight

– PointLight

∗ Spotlight

• Couteux

• OpenGL : au plus 7 lumieres.

• javax.media.j3d.Light

Java 3D P. Reignier

C.14

Page 36: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Exemple

Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);

Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);

Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);

AmbientLight ambientLightNode = new AmbientLight(ambientColor);

ambientLightNode.setInfluencingBounds(bounds);

DirectionalLight light1

= new DirectionalLight(light1Color, light1Direction);

light1.setInfluencingBounds(bounds);

• Il reste a mettre le noeud dans le graphe.

Java 3D P. Reignier

C.15

Page 37: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Shape 3D

Java 3D P. Reignier

C.16

Page 38: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Shape 3D

• Shape 3D :

– Noeud feuille.

– Deux attributs :

∗ Geometrie

∗ Apparence

Java 3D P. Reignier

C.17

Page 39: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Geometrie

• De maniere tres generale :

Java 3D P. Reignier

C.18

Page 40: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Geometrie

Java 3D P. Reignier

C.19

Page 41: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Geometrie

Java 3D P. Reignier

C.20

Page 42: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Appparence

• Controle l’aspect de l’objet

– Couleur.

– Materiaux (eclairage).

– Transparence.

– Texture

– . . .

Java 3D P. Reignier

C.21

Page 43: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Exemple

Java 3D P. Reignier

C.22

Page 44: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Classes Java

Java 3D P. Reignier

C.23

Page 45: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Chargement

• Shape3D ⇒ construction de la forme par programme

• Possibilite de chargement de fichiers de donnees

• Par defaut :

– format OBJ

– format Lightwave

• Sur internet :

– vrml 97

– 3DS Max

– ac3d

– . . .

Java 3D P. Reignier

C.24

Page 46: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Exemple

import com.sun.j3d.loaders.objectfile.ObjectFile ;import com.sun.j3d.loaders.* ;import java.io.FileNotFoundException ;

public Node loadObject(){

ObjectFile f = new ObjectFile() ;

try {s = f.load("maison.obj") ;

} catch (FileNotFoundException error){

System.err.println(error) ;System.exit(1) ;

}return s.getSceneGroup() ;

}

Java 3D P. Reignier

C.25

Page 47: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Transform Group

• Noeud groupe :

– Plusieurs fils possibles

• Noeud Transform :

– Positionne les fils dans l’espace

– Possede une Matrice 4x4 de positionnement Transform3D

• javax.media.j3d.TransformGroup

Java 3D P. Reignier

C.26

Page 48: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Transform3D

Java 3D P. Reignier

C.27

Page 49: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Transform3D

• Represente :

– Une translation

– Une rotation

– Un changement d’echelle

• Methodes principales :

– setTranslation(Vector3d trans)

– setRotation(Quat4f q1) ;

∗ Quaternion = axe + angle de rotation.

– setScale(Vector3d scale) ;

• javax.media.j3d.Transform3D

Java 3D P. Reignier

C.28

Page 50: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

BranchGroup

Java 3D P. Reignier

C.29

Page 51: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

BranchGroup

• Noeud groupe :

– Contient un ou plusieurs fils

• Quelques methodes (heritees de Group):

– addChild(Node child)

– insertChild(Node child, int index)

– removeChild(int index)

• Seul noeud pouvant etre insere dans un noeud Locale.

• javax.media.j3d.BranchGroup

Java 3D P. Reignier

C.30

Page 52: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

ViewPlatform

Java 3D P. Reignier

C.31

Page 53: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

ViewPlatform

• Noeud feuille.

• Camera a travers laquelle on navigue dans l’univers.

• Navigation en changeant le noeud Transform pere de ViewPlat-

form

• javax.media.j3d.ViewPlatform

Java 3D P. Reignier

C.32

Page 54: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

View

Java 3D P. Reignier

C.33

Page 55: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

View

• Passage d’une scene 3D a une image 2D

• Affichage de l’image 2D dans un Canvas3D

• Canvas3D

– Extension du Canvas d’awt

• Classes :

– javax.media.j3d.View

– javax.media.j3d.Canvas3D

Java 3D P. Reignier

C.34

Page 56: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

SimpleUniverse

Java 3D P. Reignier

C.35

Page 57: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

SimpleUniverse

• Objectif :

– Simplifier la creation d’une application Java3D

– Prend en charge une partie du graphe de scene

Java 3D P. Reignier

C.36

Page 58: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

SimpleUniverse

• ViewingPlatform :

– ViewPlatform

– Geometrie associee :

∗ Tableau de bord de voiture

∗ etc

• ViewPlatform getViewPlatform()

Java 3D P. Reignier

C.37

Page 59: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

SimpleUniverse

• Viewing :

– View (Canvas3D)

– ViewerAvatar

– etc

• View getView()

Java 3D P. Reignier

C.38

Page 60: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

SimpleUniverse

• Creation :

– new SimpleUniverse() :

∗ cree une Frame awt compose d’un canvas 3D.

– new SimpleUniverse(Canvas3D c) :

∗ Permet d’inserer une vue 3D dans une IHM complete

Java 3D P. Reignier

C.39

Page 61: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

SimpleUniverse

• Quelques methodes :

– void addBranchGraph(BranchGroup g)

– ViewingPlatform getViewingPlatform()

– ViewerPlatform getViewer()

• com.sun.j3d.utils.universe.SimpleUniverse

Java 3D P. Reignier

C.40

Page 62: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Terminologie

• Un noeud peut etre :

– Vivant (Live)

– Compile (Compiled)

Java 3D P. Reignier

C.41

Page 63: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Vivant

• Noeuds d’un BranchGroup lors de son ajout a un noeud Locale

(participent au rendu)

• Exemple :

myBranch = new BranchGroup( );myBranch.addChild( myShape );myLocale.addBranchGraph( myBranch ); // make live!

• Les noeuds ne sont plus vivants lors du retrait :

myLocale.removeBranchGraph( myBranch );// not live

• Verification si le noeud est vivant :

boolean isLive() ;

Java 3D P. Reignier

C.42

Page 64: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Compile

• Optimisation du rendu

• Methode de BranchGroup :

void compile() ;

• Les noeuds doivent etre compiles avant d’etre rendus vivants :

BranchGroup myBranch = new BranchGroup( );myBranch.addChild( myShape );myBranch.compile( );myLocale.addBranchGraph( myBranch );

Java 3D P. Reignier

C.43

Page 65: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Attributs des noeuds

• Lecture ou ecriture des attributs :

– Avant d’etre vivant ou compile.

• Apres :

– Doit etre autorise

⇒ Capacites d’un noeud

• Peu de capacites ⇒ plus d’optimisation a la compilation.

Java 3D P. Reignier

C.44

Page 66: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Capacites

• Methodes de SceneGraphObject

void setCapability( int bit )void clearCapability( int bit )boolean getCapability( int bit )

Java 3D P. Reignier

C.45

Page 67: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

Exemple : Shape3D

• Capacites :

– ALLOW APPEARANCE READ

– ALLOW APPEARANCE WRITE

– ALLOW GEOMETRY READ

– ALLOW GEOMETRY WRITE

– . . .

Java 3D P. Reignier

C.46

Page 68: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

D

Exemple

Java 3D P. Reignier

Page 69: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

import java.awt.* ;import java.awt.BorderLayout;import java.awt.event.*;import java.awt.GraphicsConfiguration;import com.sun.j3d.utils.applet.MainFrame;import com.sun.j3d.utils.geometry.ColorCube;import com.sun.j3d.utils.universe.*;import javax.media.j3d.*;import javax.vecmath.*;import com.sun.j3d.loaders.objectfile.ObjectFile ;import com.sun.j3d.loaders.* ;import java.io.FileNotFoundException ;

Java 3D P. Reignier

D.1

Page 70: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

public class Beethoven extends Frame {

protected BranchGroup scene ;protected SimpleUniverse u ;

public BranchGroup createSceneGraph() {// Create the root of the branch graphBranchGroup objRoot = new BranchGroup();

// Create a bounds for the background and lightsBoundingSphere bounds =

new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);// Set up the background ColorColor3f bgColor = new Color3f(0.05f, 0.05f, 0.7f);Background bgNode = new Background(bgColor);bgNode.setApplicationBounds(bounds);objRoot.addChild(bgNode);

Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);Color3f light2Color = new Color3f(0.3f, 0.3f, 0.4f);Vector3f light2Direction = new Vector3f(-6.0f, -2.0f, -1.0f);Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);

Java 3D P. Reignier

D.2

Page 71: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

// Second, define the ambient light, and insert it in the branchAmbientLight ambientLightNode = new AmbientLight(ambientColor);ambientLightNode.setInfluencingBounds(bounds);objRoot.addChild(ambientLightNode);

// Lastly, define the directional lights and insert itDirectionalLight light1

= new DirectionalLight(light1Color, light1Direction);light1.setInfluencingBounds(bounds);objRoot.addChild(light1);

DirectionalLight light2= new DirectionalLight(light2Color, light2Direction);

light2.setInfluencingBounds(bounds);objRoot.addChild(light2);

Java 3D P. Reignier

D.3

Page 72: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

TransformGroup objTrans = new TransformGroup();objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);objRoot.addChild(objTrans);

Scene s ;// Create a simple Shape3D node; add it to the scene graph.ObjectFile f = new ObjectFile() ;

try {s = f.load("beethoven.obj") ;objTrans.addChild(s.getSceneGroup()) ;

} catch (FileNotFoundException error){

System.err.println(error) ;System.exit(1) ;

}

// allows to read the bounding sphereobjRoot.setCapability(BranchGroup.ALLOW_BOUNDS_READ) ;

// Have Java 3D perform optimizations on this scene graph.objRoot.compile();

return objRoot;}

Java 3D P. Reignier

D.4

Page 73: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

public Beethoven() {super("Beethoven") ;setLayout(new BorderLayout());

GraphicsConfiguration config =SimpleUniverse.getPreferredConfiguration();

Canvas3D c = new Canvas3D(config);add("Center", c);

// Create a simple scene and attach it to the virtual universescene = createSceneGraph();u = new SimpleUniverse(c);

// This will move the ViewPlatform back a bit so the// objects in the scene can be viewed.

u.getViewingPlatform().setNominalViewingTransform();viewAll() ;

u.addBranchGraph(scene);

pack() ;setSize(300,300) ;

}

Java 3D P. Reignier

D.5

Page 74: Java 3D Concepts de base - maverick - inriamaverick.inria.fr/Members/Emmanuel.Turquin/enseignement/3id/java3d.… · Java 3D Concepts de base Licence Professionnelle : M etiers de

public void viewAll(){

BoundingSphere mybounds = (BoundingSphere) scene.getBounds() ;double t[] = new double[3] ;Point3d center=new Point3d() ;mybounds.getCenter(center) ;center.get(t) ;

// on positionne la camera de facon a voir la sphereTransformGroup cameraPosition = u.getViewingPlatform().

getViewPlatformTransform() ;

Transform3D trans = new Transform3D() ;trans.setTranslation(new Vector3f((float)t[0],

(float)t[1],(float)t[2]+(float) mybounds.getRadius()*3));

cameraPosition.setTransform(trans) ;}

//// The following allows Beethoven to be run as an application// as well as an applet//public static void main(String[] args) {

new Beethoven().show() ;}

}Java 3D P. Reignier

D.6