Le tutorial de l

Le tutorial de l'API Java 3D

-

Documents
37 pages
Lire
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

Initiation à l’API™Java 3DUn tutorial pour les débutantsChapitre 3Création facile de volumesDennis J Bouvier / K ComputingTraduction Fortun ArmelLe Tutorial de Java 3D v1.5 (API Java 3D v1.1.2)> traduction fr. version 0.1

Sujets

Informations

Publié par
Nombre de visites sur la page 71
Langue Slovak
Signaler un problème

Initiation à l’API
™Java 3D
Un tutorial pour les débutants
Chapitre 3
Création facile de volumes
Dennis J Bouvier / K Computing
Traduction Fortun Armel
Le Tutorial de Java 3D v1.5 (API Java 3D v1.1.2)
> traduction fr. version 0.1 <Initiation à Java 3D Chapitre 3. Table des matières
© 1999 Sun Microsystems, Inc.
2550 Garcia Avenue, Mountain View, California 94043-1100 U.S.A
All Rights Reserved.
The information contained in this document is subject to change without notice.
SUN MICROSYSTEMS PROVIDES THIS MATERIAL “AS IS” AND MAKES NO WARRANTY
OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. SUN
MICROSYSTEMS SHALL NOT BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR
INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING LOST PROFITS IN CONNECTION
WITH THE FURNISHING, PERFORMANCE OR USE OF THIS MATERIAL, WHETHER BASED
ON WARRANTY, CONTRACT, OR OTHER LEGAL THEORY).
THIS DOCUMENT COULD INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL
ERRORS. CHANGES ARE PERIODICALLY MADE TO THE INFORMATION HEREIN; THESE
CHANGES WILL BE INCORPORATED IN NEW EDITIONS OF THE PUBLICATION. SUN
MICROSYSTEMS, INC. MAY MAKE IMPROVEMENTS AND/OR CHANGES IN THE
PRODUCT(S) AND/OR PROGRAM(S) DESCRIBED IN THIS PUBLICATION AT ANY TIME.
Some states do not allow the exclusion of implied warranties or the limitations or exclusion of liability
for incidental or consequential damages, so the above limitations and exclusion may not apply to you.
This warranty gives you specific legal rights, and you also may have other rights which vary from state
to state.
Permission to use, copy, modify, and distribute this documentation for NON-COMMERCIAL purposes
and without fee is hereby granted provided that this copyright notice appears in all copies.
This documentation was prepared for Sun Microsystems by K Computing (530 Showers Drive, Suite 7-
225, Mountain View, CA 94040, 770-982-7881, www.kcomputing.com). For further information about
course development or course delivery, please contact either Sun Microsystems or K Computing.
Java, JavaScript, Java 3D, HotJava, Sun, Sun Microsystems, and the Sun logo are trademarks or registered
trademarks of Sun Microsystems, Inc. All other product names mentioned herein are the trademarks of
their respective owners.
Le Tutorial de Java 3D 3-iInitiation à Java 3D Chapitre 3. Table des matières
Table des matières
CHAPITRE 3
CRÉATION FACILE DE VOLUMES ................................................................................................ 3-1
3.1 Contenu de ce chapitre ................................................................................................................. 3-1
3.2 Les chargeurs ................................................................................................................................ 3-2
3.2.1 Exemple simple d’utilisation d’un chargeur. ..................................................................................... 3-2
3.2.2 Chargeurs du domaine publique ........................................................................................................ 3-4
3.2.3 Interfaces du package Loader et classes de base .............................................................................. 3-5
3.2.4 Écriture d’un Loader..................... 3-7
3.3 GeometryInfo ................................................................................................................................ 3-8
3.3.1 Exemple de GeometryInfo simple ....................................................................................................... 3-9
3.3.2 Classes pour GeometryInfo .............................................................................................................. 3-10
3.4 Text2D ........................................................................................................................................ 3-14
3.4.1 Exemple simple de Text2D ................................................................................................................ 3-15
3.4.2 Les classes utilisés dans la création d’objets Text2D...................................................................... 3-16
3.5 Text3D................... 3-17
3.5.1 Exemple de simple Text3D............... 3-17
3.5.2 Les classes utilisées dans la création d’objets Text3D .................................................................... 3-20
3.6 Background................................................................................................................................. 3-24
3.6.1 Exemples de Background .................................................................................................................. 3-25
3.6.2 La classe Background ....................................................................................................................... 3-26
3.7 BoundingLeaf (terminaison de limitation) ................................................................................. 3-28
3.7.1 Classe BoundingLeaf........................................................................................................................ 3-30
3.8 User Data .................................................................................................................. 3-30
3.9 Résumé du chapitre. ................................................................................................................... 3-31
3.10 Tests personnel ......................................................................................................................... 3-31
Le Tutorial de Java 3D 3-iiInitiation à Java 3D Chapitre 3. Table des matières
Blocs de références
La classe ObjectFile ................................................................................................................................. 3-3
Résumé de l’Interface com.sun.j3d.loaders .............................................................................................. 3-5
Résumé des classes de com.sun.j3d.loaders....... 3-5
Résumé des méthodes de l’interface de Loader ....................................................................................... 3-5
Résumé des constructeurs de LoaderBase................................................................................................ 3-6
Résumé des méthodes de SceneBase (liste partielle : méthodes pour l’utilisateur de chargeur) ............ 3-7
Résumé du constructeur de SceneBase .................................................................................................... 3-8
Résumé des constructeurs de GeometryInfo... 3-11
Résumé des méthodes de GeometryInfo (liste partielle) ........................................................................ 3-12
Résumé du constructeur Triangulator........ 3-13
Résumé de la méthode de T .................................................................................................. 3-13
Résumé du constructeur de Stripifier.......... 3-13
Résumé de la méthode Stripifier ............................................................................................................ 3-13
Résumé des constructeurs de NormalGenerator..................................................................................... 3-14
Résumé des méthodes de NormalGenerator ........................................................................................... 3-14
Résumé du constructeur de Text2D........................................................................................................ 3-17
Résumé de la méthode de Text2D .......................................................................................................... 3-17
Résumé des constructeurs de Text3D..................................................................................................... 3-20
Résumé des méthodes de Text3D ........................................................................................................... 3-21
Résume des aptitudes de T.......... 3-22
Résumé des constructeurs de Font3D....... 3-22
Résumé des méthodes de Font3D........ 3-23
Résume du constructeur de Font (liste partielle) ................................................................................... 3-23
Résumé des constructeurs de FontExtrusion ......................................................................................... 3-23
Résume des Méthodes de FontExtrusion............................................................................................... 3-24
Résume des constructeurs de Background ............................................................................................. 3-27
Résume des Méthodes de Background .................................................................................................. 3-27
Résume des aptitudes de Background .................................................................................................... 3-27
Résume des constructeurs de BoundingLeaf ......................................................................................... 3-30
Résume des Méthodes de BoundingLeaf ............................................................................................... 3-30
Méthodes de SceneGraphObject (Liste partielle - Méthodes d’User Data) ......................................... 3-31
Le Tutorial de Java 3D 3-iiiInitiation à Java 3D Chapitre 3. Table des matières
Figures et tableaux
Figure 3-1 Recette pour l’usage d’un chargeur. ....................................................................................... 3-3
Figure 3-2 Un polygone GeometryInfo et une triangulation possible...................................................... 3-8
Figure 3-3 Deux rendus de la voiture (présentés dans des directions opposées) crées en utilisant GeometryInfo.
........................................................................................................................................................ 3-9
Figure 3-4 Hiérarchie de classe de la classe utilitaire GeometryInfo, et des classes apparentées. ........ 3-10
Figure 3-5 La recette de Text2D. ............................................................................................................ 3-15
Figure 3-6 Image de Text2DApp.java. .................................................................................................... 3-16
Figure 3-7 Hiérarchie de la classe Text2D. ............................................................................................ 3-16
Figure 3-8 Recette pour la création d’un objet Text3D. ........................................................................ 3-17
Figure 3-9 Le points de référence et l’extrusion par défaut pour un objet 3DText. .............................. 3-18
Figure 3-10 Hiérarchie des classes pour Text3D. .................................................................................. 3-20
Figure 3-11 Recette pour les Backgrounds. ........................................................................................... 3-24
Figure 3-12 Vue de la « Constellation » dans l’arrière-plan de BackgroundApp.java. ......................... 3-26
Figure 3-13 Hiérarchie de classe pour Background. .............................................................................. 3-26
Figure 3-14 Un BoundingLeaf de déplaçant avec un objet visuel et indépendamment d’une source de lu-
mière....................... 3-28
Figure 3-15 Hiérarchie de la classe BoundingLeaf de l’API Java 3D.................................................... 3-30
Tableau 3-1 Chargeurs Java 3D publiques disponibles. .......................................................................... 3-4
Tableau 3-2 L’orientation du texte et le positionnement du point de référence par les combinaisons de
chemins et d’alignement de Text3D. ...................................................................................................... 3-19
Le Tutorial de Java 3D 3-ivInitiation à Java 3D Chapitre 3. Table des matières
Fragments de code
Fragment de code 3-1 Un extrait de jdk1.2/demo/java3d/ObjLoad/ObjLoad.java. ................................. 3-4
Fragment de code 3-2 Utilisation des utilitaires GeometryInfo, Triangulator, NormalGenerator,
et Stripifier.............................................................................................................................................. 3-10
Fragment de code 3-3 Création d’un objet Text2D (extrait de Text2DApp.java) 3-15
Fragment de code 3-4 Fabrication d’un objet Text2D à deux-cotés. .................................................... 3-16
Fragment de code 3-5 Création d’un objet visuel Text3D. .................................................................... 3-18
Fragment de code 3-6 Ajouter un arrière-plan coloré. ........................................................................... 3-25
Fragment de code 3-7 Ajout d’un arrière-plan géométrique. ................................................................. 3-25
Fragment de code 3-8 Ajout d’un BoundingLeaf à la plate-forme de visualisation pour une limite « toujours
en application ». ..................................................................................................................................... 3-29
Préface au chapitre 3
Ce document est la troisième partie d’un tutorial sur l’utilisation de l’API Java 3D. Les chapitres supplé-
mentaires, la préface et les annexes de cet ensemble sont présentés dans le Chapitre 0 disponible à :
Version originale de Sun Microsystems — http://java.sun.com/products/javamedia/3d/collateral
Version française — http://perso.wanadoo.fr/armel.fortun/
Le Tutorial de Java 3D 3-vInitiation à Java 3D Chapitre 3. Création facile de volumes
Chapitre 3
Création facile de volumes
Objectifs du chapitre
Après la lecture de ce chapitre, vous serez capable :
D’utiliser les classes de chargement pour importer des géométries depuis des fi-
chiers dans des mondes Java 3D.
D’utiliser le GeometryInfo pour déterminer la géométrie par des polygones arbi-
traires.
D’utiliser le Text2D pour ajouter du texte aux mondes Java 3D.ext3D pour ajouter du texte géométrique aux mondes Java 3D.
De déterminer les couleurs, images, ou géométries pour l’arrière-plan.
D’utiliser le BoundingLeaf pour spécifier les limites pour les arrières-plans, les
comportements, et les lumières.
D’utiliser le champ UserData de la classe SceneGraphObject pour des applications
diverses.
Comme troisième chapitre du module « Initiation à Java 3D », le Chapitre 3 présente des techniques plus
simples pour la création de volumes visuels. Les chapitres un et deux présentaient les méthodes de base
pour la création de mondes virtuels, incluant la création d’objets visuels depuis les classes de géométrie. Il
suffit de programmer un peu pour apprendre que la création de volumes visuels complexes, triangle par
triangle, est quelque peu rébarbative. Heureusement, il y a une variété de méthodes pratiques pour la pro-
duction de volumes visuels. Ce chapitre étudie une partie des méthodes de création de volume et aborde
thème du volume en allant plus loin que la création de géométries simples.
3.1 Contenu de ce chapitre
Si vous désirez créer un objet visuel de grande taille ou complexe, une grande quantité de programmation
sera nécessaire pour la seule spécification des coordonnées et des normales. Si vous êtes intéressé par la
performance, vous dépenserez plus de temps, et de programmation, à déterminer la géométrie par le plus
petit nombre possible de bandeaux de triangles. La programmation de géométries, exigeante en détails,
peut être un grand précipice pour votre temps de développement. Heureusement, il y a des méthodes pour la
création d’objets visuels qui requièrent moins de programmation, aboutissant à moins d’erreurs, et prenant
bien souvent moins de temps.
Le Tutorial de Java 3D 3-1






Initiation à Java 3D Chapitre 3. Création facile de volumes
La Partie 3.2 présente les classes de chargement de volume, ou « Loaders » (chargeurs) comme ils sont
communément nommés. Les chargeurs, alternative à la géométrie codé à la main, créent des objet visuels
Java 3D depuis des fichiers crées par un logiciel de modelage 3D. Les chargeurs existent aujourd’hui pour
les fichier Alias obj, les fichiers VRML, les fichiers Lightwave, les fichiers dfx d’Autocad, et une variété
d’autres formats de fichier 3D. De nouveaux chargeurs sont bien sûr en développement. La caractéristique
la plus importante étant de pouvoir écrire des chargeurs sur mesure pour Java 3D.
La Partie 3.3 présente la classe utilitaire GeometryInfo, une autre alternative au codage manuel de la géo-
métrie. GeometryInfo, avec les classes Triangulator, Stripifier, et NormalGenerator vous permettra de déter-
miner la géométrie d’un objet visuel par une polygonalisation arbitraire. Ces classes convertissent les
polygones en triangles, forment des bandeaux de triangles, et calculent les normales des triangles à l’exé-
cution, vous évitant potentiellement de passer trop de temps à coder.
Les trois parties suivantes présentent les techniques spécifiques de la création de volume. Les Parties 3.4 et
3.5 présentent respectivement les classe utilitaires Text2D et Text3D. Ces deux classes représentent deux
voies pratiques pour l’ajout de texte aux contenus de vos mondes virtuels. La Partie 3.6 présente la classe
Background. La classe Background vous permet de spécifier une couleur, une image ou une géométrie
comme arrière-plan d’un monde virtuel.
Les deux parties suivantes n’ont plus grand chose à voir avec le volume. Cependant, ce sont des sujets
importants. La Partie 3.7 présente la classe BoundingLeaf. Les objets BoundingLeaf sont utiles en combi-
naison avec les arrières-plans, les comportements, les lumières, le brouillard, et toutes les autres classes
Java 3D qui requièrent des spécifications de limites. La Partie 3.8 aborde l’usage du champ UserData de la
classe SceneGraphObject.
Bien sûr, le Chapitre se termine par un résumé et des exercices de Tests-personnels pour les audacieux.
3.2 Les chargeurs
Une classe de chargement lit des fichiers de scènes 3D (pas des fichiers Java 3D) et crée des représentations
Java 3D du contenu de ceux-ci, qui pourront être ajoutés de manière sélective à un monde Java 3D et
complétés par d’autre code Java 3D. Le package utilitaire com.sun.j3d.loaders fournit les moyens au
chargement de volumes depuis des fichiers crées dans d’autres applications 3D à l’intérieur d’une applica-
tion Java 3D. Les classes de chargement appliquent l’interface de chargement définie dans le package
com.sun.j3d.loaders.
Étant donné qu’il y a une grande variétés de formats de fichiers ayant pour but de représenter des scènes 3D
(e.g. ., *.obj, *.vrml, etc.) et qu’il y aura toujours plus de formats, le véritable code pour charger un
fichier ne fait pas partie de Java 3D ou du package Loader ; seule l’interface pour le mécanisme de charge-
ment est incluse. Avec la définition de cette interface, l’utilisateur de Java 3D peut développer des classes
de chargement ayant la même interface que les autre classes de chargement.
3.2.1 Exemple simple d’utilisation d’un chargeur.
Sans une classe effectuant la lecture d’un fichier, il n’est pas possible de charger le volume depuis celui-ci.
Avec une classe de chargement, c’est facile. La Figure 3-1 présente la recette d’utilisation d’un chargeur.
0. Trouver un chargeur (si il n’y en a pas de valable, en écrire un : voir la Partie 3.2.4).
1. Importer la classe de chargement pour votre format de fichier.(voir la Partie 3.2.2 pour trouver un
chargeur.)
2. Importer les autres classes nécessaires.
Le Tutorial de Java 3D 3-2Initiation à Java 3D Chapitre 3. Création facile de volumes
3. Déclarer une variable de Scene (ne pas utiliser le constructeur).
4. Créer un objet chargeur.
5. Charger le fichier dans un bloc de vérification, assigner le résultat à la variable de Scene.
6. Insérer la Scene dans le graphe scénique.
Figure 3-1 Recette pour l’usage d’un chargeur.
Un exemple de chargeur basé sur la classe ObjectFile est distribué avec le JDK1.2. Il se trouve dans le
répertoire jdk1.2/demo/java3d/ObjLoad. Le Fragment de code 3-1 présente un extrait du code de
cette exemple.
La classe ObjectFile est distribué dans le package com.sun.j3d.loaders comme un exemple de chargeur de
fichier. D’autres chargeurs sont disponibles (quelques uns sont listés dans le Tableau 3-1).
La classe ObjectFile
Package : com.sun.j3d.loaders
Implémente : Loader
La classe ObjectFile exécute l’interface de Loader pour le format de fichier Wavefront *.obj, un format de
fichier 3D standard crée pour utiliser avec le Wavefront’s Advanced Visualizer™. Les Objets Fichiers sont
des fichiers à base de texte maintenant à la fois des géométries polygonales et de formes-libres (courbes et
surfaces). Le chargeur Java 3D de fichier *.obj supporte un sous-ensemble du format de fichier, mais il est
assez complet pour charger presque tous les Fichiers Objet les plus communs. Les géométries en forme-
libre ne sont pas supportées.
Le Fragment de code 3-1 est annoté avec les nombres correspondant à l’usage de la recette de chargement
donnée à la Figure 3-1.
1. import com.sun.j3d.loaders.objectfile.ObjectFile;
2. import com.sun.j3d.loaders.ParsingErrorException;
3. import com.sun.j3d.loaders.IncorrectFormatException;
4. import com.sun.j3d.loaders.Scene;
5. import java.applet.Applet;
6. import javax.media.j3d.*;
7. import javax.vecmath.*;
8. import java.io.*;
9.
10. public class ObjLoad extends Applet {
11.
12. private String filename = null;
13.
14. public BranchGroup createSceneGraph() {
15. // Crée la racine de la branche du graphe
16. BranchGroup objRoot = new BranchGroup();
17.
18. ObjectFile f = new ObjectFile();
19. Scene s = null;
20. try {
21. s = f.load(filename);
22. }
23. catch (FileNotFoundException e) {
Le Tutorial de Java 3D 3-3Initiation à Java 3D Chapitre 3. Création facile de volumes
24. System.err.println(e);
25. System.exit(1);
26. }
27. catch (ParsingErrorException e) {
28.
29. System.exit(1);
30. }
31. catch (IncorrectFormatException e) {
32. System.err.println(e);
33. System.exit(1);
34. }
35.
36. objRoot.addChild(s.getSceneGroup());
37. }
Fragment de code 3-1 Un extrait de jdk1.2/demo/java3d/ObjLoad/ObjLoad.java.
Ce programme est complèté par l’ajout des comportements (la rotation par défaut, ou l’interactivité de la
souris - abordée au Chapitre 4) et des lumières (Chapitre 6) pour fournir un rendu illuminé du modèle de
l’objet. Bien sûr, vous pouvez beaucoup d’autres choses avec le modèle dans un programme Java 3D
comme des animations, l’ajout de géométries, la modification de la couleur du modèle, et ainsi de suite.
Un exemple de chargeur pour Lightwave est fournit avec la distribution du JDK 1.2 et ce trouve à jdk1.2/
demos/java3d/lightwave/Viewer.java. Ce chargeur effectuera le chargement des lumières et des
animations définies dans un fichier *.lws de Lightwave
3.2.2 Chargeurs du domaine publique
Il existe un variété de classes de chargement pour Java 3D. Le Tableau 3-1 liste les formats de fichier pour
lesquels les chargeurs sont disponibles au public. Au moment d’écrire ceci, au moins un chargeur est
disponible pour chaque formats de fichier listés au Tableau 3-1.
Format de fichier Description
3DS 3D-Studio
COB Caligari trueSpace
DEM Digital Elevation Map
DXF Fichier d’Échange de dessin AutoCAD
IOB Imagine
LWS Lightwave Scene Format
NFF WorldToolKit NFF format
OBJ Wavefront
PDB Protein Data Bank
PLAY PLAY
SLD Solid Works (fichiers prt et asm)
VRT Superscape VRT
VTK Visual Toolkit
WRL Virtual Reality Modeling Language
Tableau 3-1 Chargeurs Java 3D publiques disponibles.
Le Tutorial de Java 3D 3-4