Java 3D - Xavier`s Web CV

publicité
Java 3D
DESS TNI 2000-2001
Xavier ANDREANI
Université MONTPELLIER II
Plan
• Introduction
• Objets pour la 3D
– Scène 3D
– Univers virtuel
• Transformations
• Méchanisme interne
– Affichage
– Compilation
• Animations
• Interactions
• Structure d’un objet 3D
– Apparence
• Textures
• Lumières
– Material
– Géométrie
• Créer ses propres objets
– Retour sur les lumières
• Conclusion
• Bibliographie
Introduction
• Java 3D est destiné à l’affichage 3D sous
java.
• Conçu dans le but de faciliter la
programmation.
Très bon modèle de hiérarchie objet générique pour
représenter un univers 3D.
• Justifié par la portabilité de java:
Java 3D est disponible sous Windows, Solaris, SPARC,
Linux, HP-UX, SGI Irix.
Objets Pour La 3D
Univers virtuel
VirtualUniverse
– Scène 3D à afficher
BranchGroup
• Oeil de l’observateur
ViewPlatForm
• Ecran sur lequel est projeté la scène
canvas3d
• Les autres objets
Scène 3D
• Représentée sous la forme
d’un arbre (graphe) d’objets.
• Les feuilles de l’arbre sont les
objets à afficher.
• Les autres noeuds définissent
des regroupements d’objets
(pour y appliquer des
transformations...).
• Le groupe englobant
(BranchGroup pour la racine)
est à passer en référence à
l’univers virtuel.
Univers Virtuel
Définit la partie view du graphe de la scène
– L’oeil de l’observateur
ViewPlatform
– L’écran de projection
canvas3d
Transformations
• Tous les objets du graphe scénique sont crées à l’origine du
repère (0,0,0), d’où l’utilité des transformations pour les
positionner.
• On associe à chaque noeud TransformGroup, une
transformation: transform3d.
• Les transformations élémentaires disponibles sont:
– Rotations.
• Rotation selon l’axe X.
• Rotation selon l’axe Y.
• Rotation selon l’axe Z.
– Translation.
– Retaillage (zoom).
• Autres transformations obtenues par composition par la
méthode mul de Transform3d.
Attention à l’ordre du produit!!!
• Pour 1 objet, équivalence entre une transformation
appliqué à cet objet, et une transformation appliqué à
l’objet ViewPlatform (déplacement de l’observateur dans le
monde).
Affichage
• L’affichage effectue un parcours de graphe,
de bas en haut, des feuilles vers la racine.
• Chaque branche de l’arbre détermine
entièrement les propriétés de sa feuille. Pour
chaque feuille, Java 3D parcours donc les
parents jusqu’à la racine.
Compilation
•
•
•
•
Possibilité d’accélérer l’affichage grâce à la méthode compile de BranchGroup.
C’est une transformation du graphe scénique en une structure interne rapidement
manipulable.
Les propriétés des noeuds doivent donc être précisées avant la compilation:
accessible en lecture, écriture (animation...)...
La compilation peut effectuer des optimisations (non documentées) dans le graphe
scénique (composition de plusieurs transformations, regroupement d’objets qui
subissent la même transformation, ...).
Animations
•
•
Il s’agit d’appliquer en boucle une
transformation, une fois l’affichage effectué.
Pour celà, il suffit d’ajouter à l’objet
TransformGroup en question un enfant
Interpolator qui contient:
– Une fonction de rotation au cours du temps
alpha (nombre de répétitions de la
transformation ou -1 si infini, et intervalle de
temps entre 2 transformations).
– Le comportement à appliquer périodiquement.
– Une zone d’influence BoundingSphere, en
dehors de laquelle l’animation ne sera plus
effectuée.
•
•
Les Interpolator correspondant aux 3
transformations élémentaires sont fournis
(RotationInterpolator,
PositionPathInterpolator, ScaleInterpolator).
Attention: ne pas oublier avant la compilation
de donner le droit en écriture au noeud de la
transformation!!!
Interactions
• Il s’agit de provoquer un effet de bord
(modification) sur graphe scénique, en
fonction d’un événement (clavier,
souris...).
• L’objet qui sert à ça est Behavior, toujours
à ajouter comme enfant du
TransformGroup associé, et contient:
– Les événements à détecter (définis dans
initialize par des wakeupOn(AWTEvent)).
– L’action à effectuer.
– Une zone d’influence BoundingSphere à
l’intérieur de laquelle est récupéré
l’événement.
• Attention: rappellez initialize pour
réenregistrer les événements à détecter
après l’exécution de l’action.
Structure D’un Objet 3D
Un objet 3D (Shape3d) se compose de 2 parties
distinctes:
– Son apparence qui précise comment il doit être affiché
Appearance
– Sa géométrie qui détaille sa forme
Geometry
Apparence
Pour rendre nos objets visibles, il faut leur
associer une Appearence qui définit plusieurs
choses:
–
–
–
–
–
La couleur de l’objet
La texture de l’objet (la couleur est ignorée)
Sa transparence (couche alpha, cf TP Photoshop)
Le type de rendu (plein, filaire...)
Le comportement de l’objet quand il est éclairé (la
couleur ci-dessus est alors ignorée)
– …
Textures
Il s’agit d’habiller un
objet en lui appliquant
une image sur chacune
de ces faces.
• Pour cela, sur chaque
face il faut définir un
repère (qui par défaut
sera le repère unitaire).
Lumières
• Il existe différents types de lumières pour éclairer
vos objets:
– Lumières ambiantes éclairant indifféremment toute la
scène (éclairage global ne donnant pas d’effet de volume)
AmbiantLight
– Lumière directionnelle selon un vecteur (éclairage calculé
en fonction des normales aux surfaces, une surface
orthogonale à ce vecteur sera uniforméménet éclairée)
DirectionalLight
– Lumière ponctuelle, émettant à partir d’une source
(vecteurs directionnels concentriques)
PointLight
• La même, réduite à un cône d’émission
SpotLight
• Les lumières ont une couleur, que l’on choisit blanche pour
reproduire la lumière naturelle (celle du soleil) ou la lumière
d’une lampe
Material
Afin qu’un objet soit sensible aux rayons lumineux, il faut
fournir à son Appearance, un objet Material qui décrit:
– La couleur renvoyée par l’objet lorsqu’il est éclairé par une lumière
ambiante blanche
ambiantColor
– La couleur émise par l’objet (utile pour une lampe, noir sinon)
emissiveColor
– La teinte de l’objet éclairé (proche de notre définition « naturelle » de la
couleur d’un objet)
diffuseColor
– La couleur des tâches de lumières (brillance sur un métal par exemple:
c’est le reflet de la source lumineuse)
specularColor
– La brillance de l’objet
shininess
Géométrie
• Les primitives de Java3D sont toutes définies
à partir de triangles 2D rassemblés pour
former un volume.
• En effet, le calcul 3D au niveau d’un
processeur se fait sur des triangles. Il n’y a
donc pas au préalable à décomposer l’objet
en triangles.
• Plus généralement, la géométrie d’un objet
3D, se compose d’objets points, lignes,
triangles, quadrilatères, et constructions
géométriques utiles: LineStripArray,
TriangleStripArray, TriangleFanArray
Créer Ses Propres Objets
• Comme expliqué précédemment, il
s’agit donc d’assembler des objets 2D
représentant les faces de notre objet
3D.
• Le principe de placage des textures sur
ces nouvelles formes reste strictement
le même.
Retour sur les lumières
• Les calculs pour l’éclairage d’un objet se font
par rapport aux vecteurs normaux des faces,
et aux vecteurs incidents des rayons
lumineux.
• Pour les primitives de Java3D, il suffisait de
préciser un paramètre pour que les normales
soient calculées.
• Ici, il va falloir définir chacun de ces
vecteurs. (un pour chaque sommet de chaque
face)
Conclusion
• Grâce à son modèle objet, Java3D permet de développer
rapidement et efficacement, la plupart des fonctionnalités étant
automatisées.
• Niveau rapidité, le Java 1.3 qui est sorti a corrigé la lenteur du
Java 1.2 sous Linux (la version Windows était beaucoup plus
rapide), et en ajoutant à ça l’utilisation des optimisations pour
DirectX et OpenGL, Java3d est crédible.
• La grande généricité du modèle objet de Java3D lui permet
d’ajouter tous types d’objets à notre monde, comme par exemple
des sons 3D. Je n’ai trouvé aucune doc, à part les classes
abstraites dans l’api.
• Ce document avait pour but de vous introduire les bases de
l’utilisation de Java3D dans les domaines les plus importants,
maintenant c’est à vous de « continuer l’aventure »…
Bibliographie
• En français:
– Mon site web Java3d http://charon/~xandrean/java3d (intranet Université
Montpellier 2 / LIRMM uniquement, non maintenu à jour)
http://xandrean.free.fr/java3d
– Le tutoriel de l‘API Java 3D, traduction en français (incomplet: 3
chapitres sur 7) http://www.latelier-virtuel.com/2armel/tutj3d/
– jCosmos http://www.jcosmos.claranet.fr/
• En anglais:
– Java 3D API tutorial
http://developer.java.sun.com/developer/onlineTraining/java3d/
– Java 3D API documentation http://java.sun.com/products/javamedia/3D/forDevelopers/J3D_1_2_API/j3dapi/index.html
– Java 3D API Specification http://java.sun.com/products/javamedia/3D/forDevelopers/J3D_1_2_API/j3dguide/index.html
– The java 3D Community http://www.j3D.org
Téléchargement