java 3d xavier andreani dess tni 2000-2001 université montpellier ii

21
Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

Upload: veillantif-ly

Post on 05-Apr-2015

111 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

Java 3D

Xavier ANDREANI

DESS TNI 2000-2001

Université MONTPELLIER II

Page 2: Java 3D Xavier ANDREANI DESS TNI 2000-2001 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

Page 3: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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.

Page 4: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

Objets Pour La 3DUnivers virtuelVirtualUniverse– Scène 3D à afficher

BranchGroup• Oeil de l’observateur

ViewPlatForm• Ecran sur lequel est projeté la scène

canvas3d• Les autres objets

Page 5: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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.

Page 6: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

Univers VirtuelDéfinit la partie view du graphe de la scène– L’oeil de l’observateur

ViewPlatform

– L’écran de projectioncanvas3d

Page 7: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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

Page 8: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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.

Page 9: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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

Page 10: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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!!!

Page 11: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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.

Page 12: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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 formeGeometry

Page 13: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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)– …

Page 14: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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

Page 15: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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’émissionSpotLight

• 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

Page 16: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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 blancheambiantColor

– 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’objetshininess

Page 17: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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

Page 18: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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.

Page 19: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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)

Page 20: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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 »…

Page 21: Java 3D Xavier ANDREANI DESS TNI 2000-2001 Université MONTPELLIER II

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/java-media/3D/forDevelopers/J3D_1_2_API/j3dapi/index.html

– Java 3D API Specification http://java.sun.com/products/java-media/3D/forDevelopers/J3D_1_2_API/j3dguide/index.html

– The java 3D Community http://www.j3D.org