Afficher des géométries 3D |
Les informations qui suivent fournissent brièvement des indications sur les procédures à suivre pour insérer un objet 3D dans une scène 3D.Reportez-vous, si nécessaire, à la documentation Sun de l'API Java3D pour les termes suivants:
L'obtention d'un objet (cube, sphère, ou plus compliqué) dans une scène construite avec Java3D peut s'accomplir de 2 manières différentes:
Prenons l'exemple d'un simple cube à visualiser dans une scène 3D. Le premier cas consiste à utiliser un logiciel spécialisé pour modéliser ce cube puis à le sauvegarder dans un format de fichier reconnaissable par un "loader" Java3D. Le loader est un objet Java réalisant au minimum la construction de la géométrie du cube à partir du fichier issu d'un modeleur. Il esiste de nombreux "loaders". Plus de détails sont founis un peu plus bas.
La seconde technique consiste à construire directement la géométrie du cube par programme. Le package d'utilitaires de Java3D (com.sun.j3d.utils.geometry) contient des classes utilitaires pour les géométries de base que sont les sphères, boîtes, cylindres et cônes.
Un "loader" implémente l'interface Loader du package com.sun.j3d.loaders. Il réalise la lecture d'un fichier d'un type donné et permet de récupérer une Scene qui elle aussi est une interface à partir de laquelle il est possible de récupérer toutes les caractéristiques de la scène 3D (géométrie de tous les objets, points de vue, lumières, sons, ...).
La class Lw3dLoader du package com.sun.j3d.loaders.lw3d est un loader pour Lightwave3D de Newtek. Si vous possédez ce fantastique logiciel vous voilà en mesure d'intégrer vos créations dans une applet ou un programme Java3D. Dans le cas contraire, de nombreux fichiers gratuits sont disponibles sur internet.
La classe ObjectFile du package com.sun.j3d.loaders.objectfile est un loader de fichiers Wavefront qui est aussi un grand classique des logiciels 3D.
D'autres loaders, plus ou moins efficaces et complets, peuvent être récupérés sur Internet. Les plus courants permettent de charger des fichiers Lightwave3D, Wavefront, VRML, 3DS, ou encore DEM. Vous trouverez des liens sur la plupart d'entre-eux sur le site de Bill Day. Si vous en avez développé vous-même je serais trés intéressé de pouvoir les essayer.
Tous les loaders que l'on peut trouver réalisent généralement correctement le chargement de la géométrie des objets 3D décrits dans un fichier. Attention toutefois, le chargement des comportements, d'un point de vue ou d'autres caractéristiques de la scène n'est pas toujours correctement assuré, donc méfiez vous !
Le but ici est de construire la géométrie (classe Geometry du package javax.media.j3d.Geometry) à fournir à un objet de classe Shape3D. Pour rappel, un objet Shape3D est une terminaison du "Scene Graph" qui référence une géométrie et son apparence. Donc contrairement à l'utilisation des loaders, la géométrie de l'objet à dessiner est construite par vos propres soins par votre programme ou applet.
Le package com.sun.j3d.utils.geometry contient des classes de création de primitives basiques comme une sphère, une boîte, un cylindre ou un cône. Vous pouvez ne vouloir qu'un demi cylindre par exemple. Dans ce cas, il est nécessaire d'écrire vous même vos fonctions de création de géométrie.
Les objets 3D sont composés de facettes. Voici donc 2 exemples trés simples de classes permettant de créer un objet Shape3D avec une géométrie ne comportant qu'une seule facette. Il est alors possible de s'en inspirer pour écrire des géométries plus compliquées, le principe sera le même.
import javax.media.j3d.*; public class JoColoredFace extends
Shape3D for (i=0;
i<numVertex; i++) // Attribution de la
couleur à chaque point de la géométrie |
Fichier : JoColoredFace.java Création d'une face colorée (carré ou rectangle) dans le plan XY. La couleur est directement fournie avec la géométrie. Le passage d'un objet Appearance permettra de contrôler des caractéristiques comme la transparence par exemple. |
import javax.media.j3d.*; public class JoLightedFace extends
Shape3D public JoLightedFace(Appearance
app) // Calcul de la normale
au triangle v1.sub(vert[1],
vert[0]); public JoLightedFace() |
Fichier: JoLightedFace.java Création d'une face triangulaire dans le plan XY. |