|
Les attributs d'apparence |
Les différents attributs
Les attributs de couleur
Les attributs d'affichage des facettes
Les attributs de transparence et de
rendu
Les attributs de texture
Ce chapitre décrit comment modifier les attributs d'apparence des objets 3D que vous avez créés. Ceux-ci permettent de modifier les couleurs, la transparence, les paramètres de rendu et la texture des objets 3D.
A chaque forme 3D de classe Shape3D, peuvent être affectés des attributs d'apparence rassemblés dans une instance de la classe Appearance. Ces attributs permettent de modifier les aspects suivants d'un objet 3D :
- Attributs de couleur (via les classes ColoringAttributes et Material)
- Attributs d'affichage des facettes (via les classes PolygonAttributes, PointAttributes, LineAttributes)
- Attributs de transparence et de rendu (via les classes TransparencyAttributes et RenderingAttributes)
- Attributs de texture (via les classes Texture, TextureAttributes, TexCoordGeneration)
Le tableau suivant présente la liste détaillée de tous les attributs d'apparence décrits dans ce chapitre, avec leur valeur par défaut :
ATTRIBUT CLASSE PROPRIÉTÉ VALEUR
PAR DÉFAUTCouleur ColoringAttributes color noir (0,0,0) Modèle de nuance ColoringAttributes shadeModel SHADE_GOURAUD Couleur émise Material emissiveColor noir (0,0,0) Couleur d'ambiance Material ambientColor gris (0.2,0.2,0.2) Couleur de diffusion Material diffuseColor blanc (1,1,1) Couleur de spécularité Material specularColor blanc (1,1,1) Brillance Material shininess 64 Mode d'affichage PolygonAttributes polygonMode POLYGON_FILL Elimination des facettes PolygonAttributes cullFace CULL_BACK Taille des points PointAttributes pointSize 1 Antialiasing des points PointAttributes pointAntialiasingEnable false Epaisseur des arêtes LineAttributes lineWidth 1 Type de trait LineAttributes linePattern PATTERN_SOLID Antialiasing des arêtes LineAttributes lineAntialiasingEnable false Mode de transparence TransparencyAttributes transparencyMode NONE Transparence TransparencyAttributes transparency 0 Visibilité RenderingAttributes visible true Utilisation des couleurs des sommets RenderingAttributes ignoreVertexColors false Utilisation de la texture Texture enable true
Image de la texture Texture image null Mode d'application de la texture TextureAttributes textureMode REPLACE Couleur de mélange TextureAttributes textureBlendColor noir (0,0,0) Cette liste n'est pas exhaustive mais vous donne un aperçu des possibilités d'utilisation des attributs d'apparence en Java 3D et satisferont la plupart de vos besoins. Toutes ces classes dérivent des classes SceneGraphObject et NodeComponent.
La classe javax.media.j3d.Appearance
Cette classe dérive des classes SceneGraphObject et NodeComponent. La modification des attributs d'apparence d'une forme 3D s'effectue en passant en paramètre une instance de cette classe à la méthode setAppearance () de la classe Shape3D. Plutôt que de mémoriser directement tous les attributs d'apparence, la classe Appearance référence un ensemble d'instances de classes dérivant de la classe NodeComponent et représentant les différents attributs d'apparence. Ceci permet de partager certains attributs entre différentes formes. Les valeurs par défaut de ces attributs sont modifiés en appelant la méthode set... () correspondante.
Champs (constantes de capacité)
public static final int ALLOW_COLORING_ATTRIBUTES_READ public static final int ALLOW_COLORING_ATTRIBUTES_WRITE public static final int ALLOW_POLYGON_ATTRIBUTES_READ public static final int ALLOW_POLYGON_ATTRIBUTES_WRITE public static final int ALLOW_POINT_ATTRIBUTES_READ public static final int ALLOW_POINT_ATTRIBUTES_WRITE public static final int ALLOW_LINE_ATTRIBUTES_READ public static final int ALLOW_LINE_ATTRIBUTES_WRITE public static final int ALLOW_TRANSPARENCY_ATTRIBUTES_READ public static final int ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE public static final int ALLOW_RENDERING_ATTRIBUTES_READ public static final int ALLOW_RENDERING_ATTRIBUTES_WRITE public static final int ALLOW_MATERIAL_READ public static final int ALLOW_MATERIAL_WRITE public static final int ALLOW_TEXTURE_READ public static final int ALLOW_TEXTURE_WRITE public static final int ALLOW_TEXTURE_ATTRIBUTES_READ public static final int ALLOW_TEXTURE_ATTRIBUTES_WRITE public static final int ALLOW_TEXGEN_READ public static final int ALLOW_TEXGEN_WRITE public static final int ALLOW_TEXTURE_UNIT_STATE_READ public static final int ALLOW_TEXTURE_UNIT_STATE_WRITECes capacités permettent d'autoriser la lecture ou la modification des différentes instances d'attributs d'apparence.
Constructeur
public Appearance ()Crée une instance de la classe Appearance avec tous ses attributs initialisés à null.
Principales méthodes
Méthode
Capacité
public ColoringAttributes getColoringAttributes ()
public void setColoringAttributes
(ColoringAttributes coloringAttributes)ALLOW_COLORING_ATTRIBUTES_READ
ALLOW_COLORING_ATTRIBUTES_WRITEpublic Material getMaterial ()
public void setMaterial (Material material)
ALLOW_MATERIAL_READ
ALLOW_MATERIAL_WRITEpublic PolygonAttributes getPolygonAttributes ()
public void setPolygonAttributes
(PolygonAttributes polygonAttributes)ALLOW_POLYGON_ATTRIBUTES_READ
ALLOW_POLYGON_ATTRIBUTES_WRITEpublic PointAttributes getPointAttributes ()
public void setPointAttributes
(PointAttributes pointAttributes)ALLOW_POINT_ATTRIBUTES_READ
ALLOW_POINT_ATTRIBUTES_WRITEpublic LineAttributes getLineAttributes ()
public void setLineAttributes
(LineAttributes lineAttributes)ALLOW_LINE_ATTRIBUTES_READ
ALLOW_LINE_ATTRIBUTES_WRITEpublic TransparencyAttributes getTransparencyAttributes ()
public void setTransparencyAttributes
(TransparencyAttributes transparencyAttributes)ALLOW_TRANSPARENCY_ATTRIBUTES_READ
ALLOW_TRANSPARENCY_ATTRIBUTES_WRITEpublic RenderingAttributes getRenderingAttributes ()
public void setRenderingAttributes
(RenderingAttributes renderingAttributes)ALLOW_RENDERING_ATTRIBUTES_READ
ALLOW_RENDERING_ATTRIBUTES_WRITEpublic Texture getTexture ()
public void setTexture (Texture texture)
ALLOW_TEXTURE_READ
ALLOW_TEXTURE_WRITEpublic TextureAttributes getTextureAttributes ()
public void setTextureAttributes
(TextureAttributes textureAttributes)ALLOW_TEXTURE_ATTRIBUTES_READ
ALLOW_TEXTURE_ATTRIBUTES_WRITEpublic TexCoordGeneration getTexCoordGeneration ()
public void setTexCoordGeneration
(TexCoordGeneration texCoordGeneration)ALLOW_TEXGEN_READ
ALLOW_TEXGEN_WRITEpublic TextureUnitState [] getTextureUnitState ()
public void setTextureUnitState
(TextureUnitState [] stateArray)ALLOW_TEXTURE_UNIT_STATE_READ
ALLOW_TEXTURE_UNIT_STATE_WRITECes méthodes permettent d'interroger ou de modifier les différents attributs d'apparence. Les valeurs par défault des instances null d'attributs sont les mêmes que celles définies par le constructeur par défaut de leur classe d'attributs.
Exemples
Applets Clown, SphereConstruction, WaterGlass, SimpleTexturedObjects, LitPlane, LitApplet3D, Clock3D, SunEarthMoonMotion.
La couleur d'une forme 3D est déterminée à l'aide des critères suivants :
- Les couleurs des sommets attribuées pour les constructions géométriques de classe GeometryArray et l'attribut ignoreVertexColors de la classe RenderingAttributes.
- La couleur des attributs de la classe ColoringAttributes.
- Les normales des constructions géométriques de classe GeometryArray et les couleurs des attributs de la classe Material.
- L'utilisation de lumières pour éclairer la scène 3D.
Ces critères sont optionnels et la couleur affichée par Java 3D dépend de leur combinaison comme le montre le tableau suivant, qui teste toutes les combinaisons possibles :
CRITÈRES CRITÈRE
DOMINANTCouleurs
des sommets
+
ignoreVertexColors
= falseCouleur de
ColoringAttributesNormales
+
Couleurs de
MaterialLumières Chaque cellule des colonnes Critères contient ou non un symbole pour indiquer si ce critère est vrai ou faux. La colonne Critère dominant permet à chaque ligne du tableau de déduire la couleur qui sera choisie par Java 3D pour une combinaison donnée :
CRITÈRE
DOMINANTCOULEUR FINALE Couleurs des sommets Couleur des attributs de la classe ColoringAttributes Combinaison des couleurs des attributs de la classe Material actives sous la lumière Couleur d'émission des attributs de la classe Material Couleur des attributs d'apparence par défaut (blanche par défaut) Remarques
- Pour les versions < 1.2 de Java 3D, l'attribut ignoreVertexColors n'existe pas et est implicitement égal à false.
- Pour que l'éclairage prenne en compte les couleurs des attributs de la classe Material, les constructions géométriques de classe GeometryArray doivent contenir aussi leurs normales.
Conclusions
- Si l'attribut ignoreVertexColors est égal à true, la couleur des sommets est ignorée.
- La couleur des sommets attribuées pour les constructions géométriques est toujours utilisée si l'attribut ignoreVertexColors est égale à false (sa valeur par défaut). C'est le cas de la classe ColorCube qui définit une couleur pour chacune des facettes de sa construction géométrique.
- Sans lumière, la couleur d'une forme 3D ayant des attributs d'apparence de la classe Material est la couleur d'émission de l'instance de la classe Material. C'est le cas des classes Box, Sphere, Cylinder et Cone : l'exemple SimpleObjects utilise un fond blanc pour apercevoir ces formes dont la couleur d'émission est noire.
Voici l'applet Clown dérivant de la classe Applet3D et représentant un clown. Le clown est construit avec 8 formes de bases sphérique, cylindrique et conique sur lesquels sont appliqués des transformations. Chaque forme reçoit une couleur donnant le résultat suivant :
import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.applet.MainFrame; public class Clown extends Applet3D { // Méthode de la classe Applet3D outrepassée public BranchGroup createSceneTree () { // Racine de l'arbre des objets représentés dans la scène 3D BranchGroup root = new BranchGroup (); // Création du groupe représentant le clown Group clown = createClown (); // Création d'une rotation de PI / 4 autour de l'axe y Transform3D transform = new Transform3D (); transform.rotY (Math.PI / 4); // Création d'une déformation pour donner les bonnes proportions à l'écran Transform3D scale = new Transform3D (); scale.setScale (0.07); // Multiplication des deux transformations pour les cumuler transform.mul (scale); TransformGroup transformGroup = new TransformGroup (transform); // Construction de l'arbre de la scène transformGroup.addChild (clown); root.addChild (transformGroup); return root; } // Crée les différentes formes du clown public Group createClown () { final int defaultShade = ColoringAttributes.SHADE_GOURAUD; // Création du corps Cylinder body = new Cylinder (1.75f, 10f); Appearance shapeAppearance = new Appearance (); // Application d'une couleur bleue shapeAppearance.setColoringAttributes ( new ColoringAttributes (0.4f, 0.6f, 1f, defaultShade)); body.setAppearance (shapeAppearance); // Création du bras gauche Cylinder leftArm = new Cylinder (0.65f, 13f); shapeAppearance = new Appearance (); // Application d'une couleur peau shapeAppearance.setColoringAttributes ( new ColoringAttributes (1f, 0.8f, 0.6f, defaultShade)); leftArm.setAppearance (shapeAppearance); Transform3D leftArmTransformation = new Transform3D (); leftArmTransformation.setTranslation (new Vector3f (2.1f, -1.5f, 0)); // Création d'une rotation pour détacher le bras du corps Transform3D rotation = new Transform3D (); rotation.rotZ (Math.PI / 18); // Multiplication des deux transformations pour les cumuler leftArmTransformation.mul (rotation); TransformGroup leftArmTransformationGroup = new TransformGroup (leftArmTransformation); // Création du bras droit (on pourrait utiliser aussi de leftArm.cloneTree ()) Cylinder rightArm = new Cylinder (0.65f, 13f); rightArm.setAppearance (shapeAppearance); Transform3D rightArmTransformation = new Transform3D (); rightArmTransformation.setTranslation (new Vector3f (-2.1f, -1.5f, 0)); // Création d'une rotation pour détacher le bras du corps rotation = new Transform3D (); rotation.rotZ (-Math.PI / 18); // Multiplication des deux transformations pour les cumuler rightArmTransformation.mul (rotation); TransformGroup rightArmTransformationGroup = new TransformGroup (rightArmTransformation); // Création de la jambe gauche Cylinder leftLeg = new Cylinder (0.85f, 15f); shapeAppearance = new Appearance (); // Application d'une couleur violette shapeAppearance.setColoringAttributes ( new ColoringAttributes (0.4f, 0, 0.4f, defaultShade)); leftLeg.setAppearance (shapeAppearance); Transform3D leftLegTransformation = new Transform3D (); leftLegTransformation.setTranslation (new Vector3f (0.9f, -12.5f, 1)); // Création d'une rotation pour donner l'allure de la marche rotation = new Transform3D (); rotation.rotX (-Math.PI / 25); // Multiplication des deux transformations pour les cumuler leftLegTransformation.mul (rotation); TransformGroup leftLegTransformationGroup = new TransformGroup (leftLegTransformation); // Création de la jambe droite Cylinder rightLeg = new Cylinder (0.85f, 15f); rightLeg.setAppearance (shapeAppearance); Transform3D rightLegTransformation = new Transform3D (); rightLegTransformation.setTranslation (new Vector3f (-0.9f, -12.5f, -1)); // Création d'une rotation pour donner l'allure de la marche rotation = new Transform3D (); rotation.rotX (Math.PI / 25); // Multiplication des deux transformations pour les cumuler rightLegTransformation.mul (rotation); TransformGroup rightLegTransformationGroup = new TransformGroup (rightLegTransformation); // Création de la tête Sphere head = new Sphere (1.6f); shapeAppearance = new Appearance (); // Application d'une couleur peau shapeAppearance.setColoringAttributes ( new ColoringAttributes (1f, 0.8f, 0.6f, defaultShade)); head.setAppearance (shapeAppearance); Transform3D headTransformation = new Transform3D (); headTransformation.setTranslation (new Vector3f (0, 8, 0)); // Création d'une déformation pour allonger à la tête Transform3D scale = new Transform3D (); scale.setScale (new Vector3d (1, 2, 1)); // Multiplication des deux transformations pour les cumuler headTransformation.mul (scale); TransformGroup headTransformationGroup = new TransformGroup (headTransformation); // Création du nez Sphere nose = new Sphere (0.5f); shapeAppearance = new Appearance (); // Application d'une couleur rouge shapeAppearance.setColoringAttributes ( new ColoringAttributes (1, 0, 0, defaultShade)); nose.setAppearance (shapeAppearance); Transform3D noseTransformation = new Transform3D (); noseTransformation.setTranslation (new Vector3f (0, 7.4f, 1.7f)); TransformGroup noseTransformationGroup = new TransformGroup (noseTransformation); // Création du chapeau Cone hat = new Cone (2f, 4); shapeAppearance = new Appearance (); // Application d'une couleur orange shapeAppearance.setColoringAttributes ( new ColoringAttributes (1, 0.6f, 0, defaultShade)); hat.setAppearance (shapeAppearance); Transform3D hatTransformation = new Transform3D (); hatTransformation.setTranslation (new Vector3d (0, 11, 0)); TransformGroup hatTransformationGroup = new TransformGroup (hatTransformation); // Racine de l'arbre des objets représentant le clown Group clown = new Group (); // Construction de l'arbre leftArmTransformationGroup.addChild (leftArm); rightArmTransformationGroup.addChild (rightArm); leftLegTransformationGroup.addChild (leftLeg); rightLegTransformationGroup.addChild (rightLeg); headTransformationGroup.addChild (head); noseTransformationGroup.addChild (nose); hatTransformationGroup.addChild (hat); clown.addChild (body); clown.addChild (leftArmTransformationGroup); clown.addChild (rightArmTransformationGroup); clown.addChild (leftLegTransformationGroup); clown.addChild (rightLegTransformationGroup); clown.addChild (headTransformationGroup); clown.addChild (noseTransformationGroup); clown.addChild (hatTransformationGroup); return clown; } // Méthode main () pour permettre d'utiliser cette classe // comme applet ou comme application public static void main (String [] args) { new MainFrame (new Clown (), args, 200, 200); } }
Figure 14. Arbre de la scène ClownLa figure précédente représente l'arbre de la scène créée par la méthode createSceneTree () de la classe Clown. On y retrouve les 8 formes simples composant le clown auxquelles est appliquée une transformation.
La classe javax.media.j3d.ColoringAttributes
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe ColoringAttributes passée en paramètre à la méthode setColoringAttributes () de la classe Appearance permet de modifier les attributs de couleur et le mode de nuance (shade) applicables à une forme 3D. Consultez le tableau de choix des couleurs pour déterminer comment s'applique la couleur définie par cet attribut.
Champs
public static final int SHADE_FLAT public static final int SHADE_GOURAUD
public static final int FASTEST public static final int NICESTCes constantes représentent le mode utilisé pour colorer les facettes d'une forme 3D. SHADE_FLAT colore les facettes avec une couleur unie et SHADE_GOURAUD avec un dégradé résultat de l'interpolation des différentes couleurs de ses sommets.
public static final int ALLOW_COLOR_READ public static final int ALLOW_COLOR_WRITE public static final int ALLOW_SHADE_MODEL_READ public static final int ALLOW_SHADE_MODEL_WRITECes capacités permettent d'autoriser la lecture ou la modification de la couleur et du modèle de nuance.
Constructeurs
public ColoringAttributes () public ColoringAttributes (float red, float green, float blue, int shadeModel) public ColoringAttributes (Color3f color, int shadeModel)Ces constructeurs créent une instance de la classe ColoringAttributes initialisée avec la couleur (red, green, blue) ou color et le modèle de nuance shadeModel (par défaut égaux à la couleur blanche et à SHADE_GOURAUD).
Principales méthodes
public void getColor (Color3f color) (capacité ALLOW_COLOR_READ) public void setColor (Color3f color) (capacité ALLOW_COLOR_WRITE) public void setColor (float r, float g, float b) (capacité ALLOW_COLOR_WRITE) Ces méthodes permettent d'interroger ou de modifier la couleur définie par cet attribut.
public int getShadeModel () (capacité ALLOW_SHADE_MODEL_READ) public void setShadeModel (int shadeModel) (capacité ALLOW_SHADE_MODEL_WRITE) Ces méthodes permettent d'interroger ou de modifier le modèle de nuance défini par cet attribut.
Exemples
Applets Clown, WaterGlass, LitApplet3D, Clock3D.
La classe javax.media.j3d.Material
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe Material passée en paramètre à la méthode setMaterial () de la classe Appearance permet de modifier les couleurs utilisées une forme 3D éclairée. Consultez le tableau de choix des couleurs pour déterminer comment s'applique cet attribut.
Les couleurs définies par cette classe se combinent entre elles sous l'effet des différentes sources lumineuses.Champs (constantes de capacité)
public static final int ALLOW_COMPONENT_READ public static final int ALLOW_COMPONENT_WRITECes capacités permettent d'autoriser la lecture ou la modification des couleurs de cet attribut.
Constructeurs
public Material () public Material (Color3f ambientColor, Color3f emissiveColor, Color3f diffuseColor, Color3f specularColor, float shininess)Ces constructeurs créent une instance de la classe Material initialisée avec les couleurs ambientColor, emissiveColor, diffuseColor, specularColor et l'effet de brillance shininess. Par défaut ambientColor est égal à (0.2,0.2,0.2), emissiveColor à (0,0,0), diffuseColor à (1,1,1), specularColor à (1,1,1) et shininess à 64.
Principales méthodes
public void getEmissiveColor (Color3f color) (capacité ALLOW_COMPONENT_READ) public void setEmissiveColor (Color3f color) (capacité ALLOW_COMPONENT_WRITE) public void setEmissiveColor (float r, float g, float b) (capacité ALLOW_COMPONENT_WRITE) Ces méthodes permettent d'interroger ou de modifier la couleur de cet attribut émise par une forme 3D. Sur une scène 3D non éclairée, cette couleur a le même effet qu'un attribut de classe ColoringAttributes.
public void getAmbientColor (Color3f color) (capacité ALLOW_COMPONENT_READ) public void setAmbientColor (Color3f color) (capacité ALLOW_COMPONENT_WRITE) public void setAmbientColor (float r, float g, float b) (capacité ALLOW_COMPONENT_WRITE) Ces méthodes permettent d'interroger ou de modifier la couleur d'ambiance de cet attribut réfléchie par la lumière d'ambiance.
public void getDiffuseColor (Color3f color) (capacité ALLOW_COMPONENT_READ) public void setDiffuseColor (Color3f color) (capacité ALLOW_COMPONENT_WRITE) public void setDiffuseColor (float r, float g, float b) (capacité ALLOW_COMPONENT_WRITE) public void setDiffuseColor (float r, float g, float b, float a) (capacité ALLOW_COMPONENT_WRITE) Ces méthodes permettent d'interroger ou de modifier la couleur de diffusion de cet attribut réfléchie par les lumières de la scène.
public void getSpecularColor (Color3f color) (capacité ALLOW_COMPONENT_READ) public void setSpecularColor (Color3f color) (capacité ALLOW_COMPONENT_WRITE) public void setSpecularColor (float r, float g, float b) (capacité ALLOW_COMPONENT_WRITE) Ces méthodes permettent d'interroger ou de modifier la couleur de cet attribut donnant l'effet de spécularité. Cette couleur est utilisée pour afficher un point de brillance sur une forme 3D.
public float getShininess () (capacité ALLOW_COMPONENT_READ) public void setShininess (float shininess) (capacité ALLOW_COMPONENT_WRITE) Ces méthodes permettent d'interroger ou de modifier l'effet de brillance définie par cet attribut. shininess est compris entre 1 (pas brillant) et 128 (très brillant).
public boolean getLightingEnable () (capacité ALLOW_COMPONENT_READ) public void setLightingEnable (boolean state) (capacité ALLOW_COMPONENT_WRITE) Ces méthodes permettent d'interroger ou de modifier l'utilisation ou non de cet attribut. Si state est égal à false, l'instance de classe Material est ignorée.
Exemples
Applets LitApplet3D, LitPlane, SunEarthMoonMotion.
Java 3D permet d'afficher une forme 3D de plusieurs façons :
- Affichage des sommets de ses facettes avec des points
- Affichage des arêtes de ses facettes
- Remplissage de ses facettes
La classe PolygonAttributes permet de choisir entre ces trois modes. Les classes PointAttributes et LineAttributes permettent de modifier les attributs d'affichage des points représentant les sommets et ceux des arêtes des facettes.
La couleur utilisée pour les points, les arêtes ou le remplissage des facettes est choisie en respectant les règles du tableau de choix des couleurs.Voici l'applet SphereConstruction dérivant de la classe Applet3D. Cet exemple affiche une même sphère avec les trois modes d'affichage :
import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.applet.MainFrame; public class SphereConstruction extends Applet3D { // Méthode de la classe Applet3D outrepassée public BranchGroup createSceneTree () { // Racine de l'arbre des objets représentés dans la scène 3D BranchGroup root = new BranchGroup (); // Création d'une sphère affichée avec ses sommets Sphere spherePoints = new Sphere (0.25f); Appearance appearance = new Appearance (); PolygonAttributes polygon = new PolygonAttributes (PolygonAttributes.POLYGON_POINT, PolygonAttributes.CULL_NONE, 0); appearance.setPolygonAttributes (polygon); PointAttributes points = new PointAttributes (1.5f, true); appearance.setPointAttributes (points); spherePoints.setAppearance (appearance); Transform3D sphereTranslation = new Transform3D (); sphereTranslation.setTranslation (new Vector3f (-0.6f, 0, 0)); TransformGroup spherePointsTranslationGroup = new TransformGroup (sphereTranslation); // Création d'une sphère affichée avec ses arêtes Sphere sphereLines = new Sphere (0.25f); appearance = new Appearance (); polygon = new PolygonAttributes (PolygonAttributes.POLYGON_LINE, PolygonAttributes.CULL_NONE, 0); appearance.setPolygonAttributes (polygon); LineAttributes lines = new LineAttributes (1f, LineAttributes.PATTERN_SOLID, true); appearance.setLineAttributes (lines); sphereLines.setAppearance (appearance); // Création d'une sphère avec des attributs d'apparence par défaut Sphere fullSphere = new Sphere (0.25f, new Appearance ()); sphereTranslation = new Transform3D (); sphereTranslation.setTranslation (new Vector3f (0.6f, 0, 0)); TransformGroup fullSphereTranslationGroup = new TransformGroup (sphereTranslation); // Construction de l'arbre de la scène 3D spherePointsTranslationGroup.addChild (spherePoints); fullSphereTranslationGroup.addChild (fullSphere); root.addChild (spherePointsTranslationGroup); root.addChild (sphereLines); root.addChild (fullSphereTranslationGroup); return root; } // Méthode main () pour permettre d'utiliser cette classe // comme applet ou comme application public static void main (String [] args) { new MainFrame (new SphereConstruction (), args, 300, 100); }
Figure 15. Arbre de la scène SphereConstruction
La classe javax.media.j3d.PolygonAttributes
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe PolygonAttributes passée en paramètre à la méthode setPolygonAttributes () de la classe Appearance permet de modifier le mode d'affichage et le mode d'élimination des facettes d'une forme 3D.
Champs
public static final int POLYGON_POINT public static final int POLYGON_LINE public static final int POLYGON_FILLCes constantes représentent le mode d'affichage des facettes de la forme 3D. POLYGON_POINT n'affiche que les sommets, POLYGON_LINE les arêtes et POLYGON_FILL provoque le remplissage des facettes.
public static final int CULL_NONE public static final int CULL_BACK public static final int CULL_FRONTCes constantes indiquent les facettes à éliminer (cull) à l'affichage de la forme 3D. CULL_NONE n'élimine aucune facette, CULL_BACK élimine les facettes orientées vers l'arrière et CULL_FRONT élimine les facettes orientées vers l'observateur.
public static final int ALLOW_MODE_READ public static final int ALLOW_MODE_WRITE public static final int ALLOW_CULL_FACE_READ public static final int ALLOW_CULL_FACE_WRITECes capacités permettent d'autoriser la lecture ou la modification du mode d'affichage des facettes ou d'élimination des facettes.
public static final int ALLOW_NORMAL_FLIP_READ public static final int ALLOW_NORMAL_FLIP_WRITE public static final int ALLOW_OFFSET_READ public static final int ALLOW_OFFSET_WRITEPrincipaux constructeurs
public PolygonAttributes () public PolygonAttributes (int polygonMode, int cullFace, float polygonOffset)Ces constructeurs créent une instance de la classe PolygonAttributes initialisée avec le mode d'affichage polygonMode, le mode d'élimination des facettes cullFace et le décalage de facettes en profondeur polygonOffset (par défaut égaux à POLYGON_FILL, CULL_BACK et 0).
Principales méthodes
public int getPolygonMode () (capacité ALLOW_MODE_READ) public void setPolygonMode (int polygonMode) (capacité ALLOW_MODE_WRITE) Ces méthodes permettent d'interroger ou de modifier le mode d'affichage défini par cet attribut. polygonMode peut être égal à POLYGON_POINT, POLYGON_LINE ou POLYGON_FILL.
public int getCullFace () (capacité ALLOW_CULL_FACE_READ) public void setCullFace (int cullFace) (capacité ALLOW_CULL_FACE_WRITE) Ces méthodes permettent d'interroger ou de modifier le mode d'élimination des facettes définie par cet attribut. cullFace peut être égal à CULL_NONE, CULL_BACK ou CULL_FRONT.
Exemple
Applet SphereConstruction.
La classe javax.media.j3d.PointAttributes
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe PointAttributes passée en paramètre à la méthode setPointAttributes () de la classe Appearance permet de modifier les attributs de tracé des points d'une forme 3D quand son mode d'affichage utilise le dessin des sommets.
Champs (constantes de capacités)
public static final int ALLOW_SIZE_READ public static final int ALLOW_SIZE_WRITE public static final int ALLOW_ANTIALIASING_READ public static final int ALLOW_ANTIALIASING_WRITECes capacités permettent d'autoriser la lecture ou la modification de la taille des points et de l'utilisation de méthode d'antialiasing (anticrénelage) pour les dessiner.
Constructeurs
public PointAttributes () public PointAttributes (float pointSize, boolean pointAntialiasing)Ces constructeurs créent une instance de la classe PointAttributes initialisée avec la taille en pixel des points pointSize et l'utilisation de méthode d'antialiasing pointAntialiasing (par défaut égaux à 1 et false).
Principales méthodes
public float getPointSize () (capacité ALLOW_SIZE_READ) public void setPointSize (float pointSize) (capacité ALLOW_SIZE_WRITE) Ces méthodes permettent d'interroger ou de modifier la taille en pixel des point définie par cet attribut.
public boolean getPointAntialiasingEnable () (capacité ALLOW_ANTIALIASING_READ) public void setPointAntialiasingEnable (boolean state) (capacité ALLOW_ANTIALIASING_WRITE) Ces méthodes permettent d'interroger ou de modifier l'utilisation de méthode d'antialiasing définie par cet attribut. Si state est égal à true, les points seront dessinés avec un contour adouci ce qui évite l'effet de crénelage.
Exemple
Applet SphereConstruction.
La classe javax.media.j3d.LineAttributes
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe LineAttributes passée en paramètre à la méthode setLineAttributes () de la classe Appearance permet de modifier les attributs de tracé des lignes d'une forme 3D quand son mode d'affichage utilise le dessin des arêtes.
Champs
public static final int PATTERN_SOLID public static final int PATTERN_DASH public static final int PATTERN_DOT public static final int PATTERN_DASH_DOT public static final int PATTERN_USER_DEFINED Ces constantes représentent le type de trait utiliser pour tracer les arêtes.
public static final int ALLOW_WIDTH_READ public static final int ALLOW_WIDTH_WRITE public static final int ALLOW_PATTERN_READ public static final int ALLOW_PATTERN_WRITE public static final int ALLOW_ANTIALIASING_READ public static final int ALLOW_ANTIALIASING_WRITECes capacités permettent d'autoriser la lecture ou la modification de l'épaisseur des arêtes, du type de trait et de l'utilisation de méthode d'antialiasing (anticrénelage).
Constructeurs
public LineAttributes () public LineAttributes (float lineWidth, int linePattern, boolean lineAntialiasing)Ces constructeurs créent une instance de la classe LineAttributes initialisée avec l'épaisseur des arêtes lineWidth, le type de trait linePattern et l'utilisation de méthode d'antialiasing lineAntialiasing (par défaut égaux à 1, PATTERN_SOLID et false).
Principales méthodes
public float getLineWidth () (capacité ALLOW_WIDTH_READ) public void setLineWidth (float lineWidth) (capacité ALLOW_WIDTH_WRITE) Ces méthodes permettent d'interroger ou de modifier l'épaisseur des arêtes définie par cet attribut.
public int getLinePattern () (capacité ALLOW_PATTERN_READ) public void setLinePattern (int linePattern) (capacité ALLOW_PATTERN_WRITE) Ces méthodes permettent d'interroger ou de modifier le type de trait défini par cet attribut. linePattern peut être égal à PATTERN_SOLID, PATTERN_DASH, PATTERN_DOT, PATTERN_DASH_DOT ou PATTERN_USER_DEFINED.
public boolean getLineAntialiasingEnable () (capacité ALLOW_ANTIALIASING_READ) public void setLineAntialiasingEnable (boolean state) (capacité ALLOW_ANTIALIASING_WRITE) Ces méthodes permettent d'interroger ou de modifier l'utilisation de méthode d'antialiasing définie par cet attribut. Si state est égal à true, les arêtes seront dessinées en évitant l'effet de crénelage.
Exemple
Applet SphereConstruction.
Java 3D permet de rendre plus ou moins transparente une forme 3D en utilisant les attributs d'apparence de la classe TransparencyAttributes.
Voici l'applet WaterGlass dérivant de la classe Applet3D : cet exemple réutilise une forme de classe AxisShape et un cylindre avec des attributs de transparence pour créer une scène représentant un verre d'eau.
import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.geometry.*; public class WaterGlass extends Applet3D { public BranchGroup createSceneTree () { // Racine de l'arbre des objets représentés dans la scène 3D BranchGroup root = new BranchGroup (); // Création du groupe représentant le verre d'eau Group waterGlass = createWaterGlass (); // Création d'une rotation de -PI/6 autour de l'axe z et PI/4 autour de l'axe x Transform3D transform = new Transform3D (); transform.rotX (Math.PI / 4); Transform3D rot = new Transform3D (); rot.rotZ (-Math.PI / 6); // Multiplication des deux transformations pour les cumuler transform.mul (rot); TransformGroup transformGroup = new TransformGroup (transform); // Construction de l'arbre de la scène transformGroup.addChild (waterGlass); root.addChild (transformGroup); return root; } // Crée les différentes formes du verre d'eau public Group createWaterGlass () { // Création d'un verre à partir de son profil AxisShape glass = new AxisShape (new Point2f [] {new Point2f (0, -0.5f), new Point2f (0.4f, -0.5f), new Point2f (0.4f, 0.7f), new Point2f (0.45f, 0.7f), new Point2f (0.45f, -0.65f), new Point2f (0, -0.65f)}, 16); Appearance appearance = new Appearance (); appearance.setColoringAttributes ( new ColoringAttributes (1, 1, 1, ColoringAttributes.SHADE_GOURAUD)); appearance.setTransparencyAttributes ( new TransparencyAttributes (TransparencyAttributes.BLENDED, 0.7f)); glass.setAppearance (appearance); // Création d'une cylindre pour représenter l'eau Cylinder water = new Cylinder (0.4f, 1f); appearance = new Appearance (); appearance.setColoringAttributes ( new ColoringAttributes (.6f, .8f, 1, ColoringAttributes.SHADE_GOURAUD)); appearance.setTransparencyAttributes ( new TransparencyAttributes (TransparencyAttributes.BLENDED, 0.8f)); water.setAppearance (appearance); // Construction de l'arbre de la scène Group waterGlass = new Group (); waterGlass.addChild (water); waterGlass.addChild (glass); return waterGlass; } // Méthode main () pour permettre d'utiliser cette classe // comme applet ou comme application public static void main (String [] args) { new MainFrame (new WaterGlass (), args, 150, 150); } }
Figure 16. Arbre de la scène WaterGlassLa classe javax.media.j3d.TransparencyAttributes
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe TransparencyAttributes passée en paramètre à la méthode setTransparencyAttributes () de la classe Appearance permet de modifier la transparence d'une forme 3D.
La valeur de transparence est inverse à celle utilisée pour le canal alpha dans le codage RGBA des couleurs Java : 0 correspond à une opacité totale et 1 à une transparence totale.
Champs
public static final int NONE public static final int BLENDED public static final int SCREEN_DOOR public static final int FASTEST public static final int NICESTCes constantes représentent le mode de transparence à appliquer à la forme 3D. NONE n'applique aucune transparence, BLENDED réalise l'effet de transparence en mélangeant (blend) la couleur de la forme 3D avec celle de l'arrière plan et SCREEN_DOOR en construisant une trame ayant la couleur de la forme 3D dont les trous laissent passer la couleur de l'arrière plan.
public static final int ALLOW_MODE_READ public static final int ALLOW_MODE_WRITE public static final int ALLOW_VALUE_READ public static final int ALLOW_VALUE_WRITECes capacités permettent d'autoriser la lecture ou la modification du mode et de la valeur de transparence.
public static final int ALLOW_BLEND_FUNCTION_READ public static final int ALLOW_BLEND_FUNCTION_WRITEPrincipaux constructeurs
public TransparencyAttributes () public TransparencyAttributes (int transparencyMode, float transparencyValue)Ces constructeurs créent une instance de la classe TransparencyAttributes initialisée avec le mode de transparence transparencyMode et la valeur de transparence transparencyValue (par défaut égaux à NONE et 0).
Principales méthodes
public int getTransparencyMode () (capacité ALLOW_MODE_READ) public void setTransparencyMode (int transparencyMode) (capacité ALLOW_MODE_WRITE) Ces méthodes permettent d'interroger ou de modifier le mode de transparence défini par cet attribut. transparencyMode peut être égal à NONE, BLENDED, SCREEN_DOOR, FASTEST ou NICEST.
public float getTransparency () (capacité ALLOW_VALUE_READ) public void setTransparency (float transparencyValue) (capacité ALLOW_VALUE_WRITE) Ces méthodes permettent d'interroger ou de modifier la valeur de transparence définie par cet attribut. transparencyValue est compris entre 0 (totalement opaque) et 1 (totalement transparent).
Exemple
Applet WaterGlass.
La classe javax.media.j3d.RenderingAttributes
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe RenderingAttributes passée en paramètre à la méthode setRenderingAttributes () de la classe Appearance permet de modifier les attributs de rendu.
Les deux attributs les plus intéressants, ceux de visibilité et d'utilisation des couleurs des sommets ne sont pas disponibles pour les versions < 1.2 de Java 3D.Principaux champs (constantes de capacités)
public static final int ALLOW_VISIBLE_READ public static final int ALLOW_VISIBLE_WRITE public static final int ALLOW_IGNORE_VERTEX_COLORS_READ public static final int ALLOW_IGNORE_VERTEX_COLORS_WRITECes capacités permettent d'autoriser la lecture ou la modification de sa visibilité ou de l'utilisation des couleurs des sommets.
public static final int ALLOW_ALPHA_TEST_VALUE_READ public static final int ALLOW_ALPHA_TEST_VALUE_WRITE public static final int ALLOW_ALPHA_TEST_FUNCTION_READ public static final int ALLOW_ALPHA_TEST_FUNCTION_WRITE public static final int ALLOW_DEPTH_ENABLE_READ public static final int ALLOW_RASTER_OP_READ public static final int ALLOW_RASTER_OP_WRITEPrincipal constructeur
public RenderingAttributes ()Ces constructeurs créent une instance de la classe RenderingAttributes. Par défaut, visible est égal à true et ignoreVertexColors à false.
Principales méthodes
public boolean getVisible () (capacité ALLOW_VISIBLE_READ) public void setVisible (boolean visible) (capacité ALLOW_VISIBLE_WRITE) Ces méthodes permettent d'interroger ou de modifier la visibilité définie par cet attribut. Si visible est égal à false, la forme 3D n'est pas visible mais peut être interceptée ou entrer en collision avec d'autres objets.
public boolean getIgnoreVertexColors () (capacité ALLOW_IGNORE_VERTEX_COLORS_READ) public void setIgnoreVertexColors
(boolean ignoreVertexColors)(capacité ALLOW_IGNORE_VERTEX_COLORS_WRITE) Ces méthodes permettent d'interroger ou de modifier l'utilisation des couleurs des sommets définie par cet attribut. Si ignoreVertexColors est égal à true (false par défaut), les couleurs des sommets ne seront plus prises en compte pour déterminer la couleur de la forme 3D.
Une texture est une image appliquée sur la surface d'une forme 3D. Cette technique évite de détailler de manière très fine la construction géométrique d'une forme 3D pour lui donner par exemple un aspect de matière (bois, tissu, pierre,...). L'application d'une texture, technique bien plus simple et rapide, donne des résultats très réalistes.
Pour utiliser une texture sur une forme 3D en Java 3D, il faut définir des coordonnées de texture sur chacun des sommets de sa construction géométrique et modifier ses attributs d'apparence avec des instances de la classe Texture et éventuellement de la classe TextureAttributes. Comme le montre la figure suivante, les coordonnées de texture permettent de spécifier comment appliquer sur une facette d'une forme 3D l'image définie par une instance de la classe Texture :
Figure 17. Application d'une texture sur une facette d'une forme 3DConsidérez l'image de la texture comme si elle était affichée dans un repère de coordonnées (s,t) entre les points (0,0) et (1,1), correspondant à sa largeur et sa hauteur en pixels. Les coordonnées de texture de chaque sommet d'une forme 3D indiquent un point (s,t) de l'image. Pour chaque facette, Java 3D utilise ces coordonnées pour extraire la portion d'image correspondante et l'appliquer sur la facette. Cette portion d'image est déformée pour s'adapter aux dimensions de la facette.
La texture est répétée comme un motif si certaines coordonnées de texture (s,t) sont en dehors de l'intervalle [0,1] (mode de limite par défaut WRAP).Les images utilisées pour une texture peuvent provenir d'une image dessinée en Java ou d'un fichier d'image. La classe TextureLoader permet de gérer facilement le chargement de fichier et la création d'une instance de classe Texture. Pour optimiser le traitement des textures, Java 3D requiert que la largeur et la hauteur des images soient une puissance de 2 (1, 2, 4, 8, 16,...).
Exemples d'images utilisées pour la texture
wood.jpg
tweed.jpg
brick.jpg
grain.jpgLes coordonnées de texture d'une construction géométrique peuvent être spécifiées grâce à la méthode setTextureCoordinates () de la classe GeometryInfo. Les coordonnées de texture des classes de formes simples Box, Sphere, Cylinder et Cone ne sont définies que si la constante GENERATE_TEXTURE_COORDS est utilisée dans le paramètre primflags de leur constructeur. Elles permettent d'appliquer une texture de la manière suivante :
CLASSE MODE D'APPLICATION DE LA TEXTURE Box Image de la texture sur chaque face. Sphere Image de la texture sur la sphère. Cylinder Image de la texture sur la partie cylindrique, et les disques bas et haut. Cone Image de la texture sur la partie conique, et le disque inférieur. Voici l'applet SimpleTexturedObjects dérivant de la classe Applet3D : cet exemple recrée la même scène que l'applet SimpleObjects avec les formes simples utilisant des coordonnées de texture et des attributs d'apparence avec une texture.
L'image de la texture peut être modifiée grâce au paramètre ImageFile. Pour une utilisation avec la commande java, la valeur du paramètre est passée de la manière suivante :
java SimpleTexturedObjects ImageFile=tweed.jpg
L'arbre de cette scène 3D est le même que celui de l'applet SimpleObjects.import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.image.TextureLoader; import com.sun.j3d.utils.applet.MainFrame; public class SimpleTexturedObjects extends Applet3D { // Méthode de la classe Applet3D outrepassée public BranchGroup createSceneTree () { // Racine de l'arbre des objets représentés dans la scène 3D BranchGroup root = new BranchGroup (); // Récupération du nom de fichier de l'image utilisée pour la texture // passé dans le paramètre ImageFile (wood.jpg par défaut) // Par exemple : <param name="ImageFile" value="tweed.jpg"> pour une applet // ou ImageFile=tweed.jpg en paramètre de la commande java String imageFileName = getParameter ("ImageFile"); if (imageFileName == null) imageFileName = "wood.jpg"; // Création d'une instance de texture avec l'image Appearance woodAppearance = new Appearance (); Texture texture = new TextureLoader (imageFileName, this).getTexture (); woodAppearance.setTexture (texture); // Instantiation des quatre classes de forme simple // Création d'un parallélépipède Box box = new Box (0.3f, 0.2f, 0.2f, Primitive.GENERATE_TEXTURE_COORDS, woodAppearance); Transform3D boxTranslation = new Transform3D (); boxTranslation.setTranslation (new Vector3f (-0.4f, 0.4f, 0)); TransformGroup boxTranslationGroup = new TransformGroup (boxTranslation); // Création d'une sphère Sphere sphere = new Sphere (0.3f, Primitive.GENERATE_TEXTURE_COORDS, woodAppearance); Transform3D sphereTranslation = new Transform3D (); sphereTranslation.setTranslation (new Vector3f (0.4f, 0.4f, 0)); TransformGroup sphereTranslationGroup = new TransformGroup (sphereTranslation); // Création d'un cylindre Cylinder cylinder = new Cylinder (0.3f, 0.5f, Primitive.GENERATE_TEXTURE_COORDS, woodAppearance); Transform3D cylinderTransformation = new Transform3D (); cylinderTransformation.setTranslation (new Vector3f (-0.4f, -0.4f, 0)); // Création d'une rotation pour mieux apercevoir la forme du cylindre Transform3D rotation = new Transform3D (); rotation.rotX (Math.PI / 6); // Multiplication des deux transformations pour les cumuler cylinderTransformation.mul (rotation); TransformGroup cylinderTransformationGroup = new TransformGroup (cylinderTransformation); // Création d'un cône Cone cone = new Cone (0.3f, 0.5f, Primitive.GENERATE_TEXTURE_COORDS, woodAppearance); Transform3D coneTransformation = new Transform3D (); coneTransformation.setTranslation (new Vector3f (0.4f, -0.4f, 0)); coneTransformation.mul (rotation); TransformGroup coneTransformationGroup = new TransformGroup (coneTransformation); // Création d'un fond blanc Background background = new Background (1, 1, 1); background.setApplicationBounds (new BoundingBox ()); // Construction de l'arbre de la scène 3D boxTranslationGroup.addChild (box); sphereTranslationGroup.addChild (sphere); cylinderTransformationGroup.addChild (cylinder); coneTransformationGroup.addChild (cone); root.addChild (boxTranslationGroup); root.addChild (sphereTranslationGroup); root.addChild (cylinderTransformationGroup); root.addChild (coneTransformationGroup); root.addChild (background); return root; } // Méthode main () pour permettre d'utiliser cette classe // comme applet ou comme application public static void main (String [] args) { new MainFrame (new SimpleTexturedObjects (), args, 150, 150); } }La classe javax.media.j3d.Texture
Cette classe abstract dérive des classes SceneGraphObject et NodeComponent. C'est la super classe des classes Texture2D et Texture3D dont une instance est passée en paramètre à la méthode setTexture () de la classe Appearance pour modifier la texture utilisée par une forme 3D. Cette classe définit l'image à appliquer comme texture à une forme 3D.
Champs
public static final int RGB public static final int RGBA public static final int INTENSITY public static final int LUMINANCE public static final int ALPHA public static final int LUMINANCE_ALPHACes constantes représentent le format de l'image utilisée par la texture. RGB et RGBA sont les formats les plus courants car ils utilisent telles quelles les couleurs des pixels de l'image pour la texture. Les autres peuvent être intéressants à utiliser pour faire varier par exemple la transparence (format ALPHA) ou la luminosité (format LUMINANCE) de la forme 3D en fonction des valeurs des pixels de l'image.
public static final int ALLOW_ENABLE_READ public static final int ALLOW_ENABLE_WRITE public static final int ALLOW_IMAGE_READ public static final int ALLOW_IMAGE_WRITECes capacités permettent d'autoriser la lecture ou la modification de l'application de la texture sur la forme 3D et de l'image de la texture.
public static final int ALLOW_SIZE_READ public static final int ALLOW_FORMAT_READ public static final int ALLOW_FILTER_READ public static final int ALLOW_MIPMAP_MODE_READ public static final int ALLOW_BOUNDARY_MODE_READ public static final int ALLOW_BOUNDARY_COLOR_READPrincipales méthodes
public boolean getEnable () (capacité ALLOW_ENABLE_READ) public void setEnable (boolean state) (capacité ALLOW_ENABLE_WRITE) Ces méthodes permettent d'interroger ou de modifier l'application de la texture sur la forme 3D définie par cet attribut. Si state est égal à false, la texture est ignorée.
public ImageComponent getImage (int level) (capacité ALLOW_IMAGE_READ) public void setImage (int level, ImageComponent image) (capacité ALLOW_IMAGE_WRITE) Ces méthodes permettent d'interroger ou de modifier l'image (ou les images) utilisées pour la texture. Utilisez 0 pour level. La largeur et la hauteur de l'image doivent être une puissance de 2 (1, 2, 4, 8, 16,...).
Exemples
Applets SimpleTexturedObjects, LitPlane, SunEarthMoonMotion.
La classe javax.media.j3d.Texture2D
Cette classe dérive des classes SceneGraphObject, NodeComponent, Texture. Le moyen le plus simple d'instancier cette classe est d'utiliser la méthode getTexture () de la classe TextureLoader qui permet d'avoir une texture ayant une image avec les dimensions requises et un format donné.
La classe javax.media.j3d.TextureAttributes
Cette classe dérive des classes SceneGraphObject et NodeComponent. Une instance de la classe TextureAttributes passée en paramètre à la méthode setTextureAttributes () de la classe Appearance permet de modifier le mode d'application de la texture sur une forme 3D.
Champs
public static final int REPLACE public static final int DECAL public static final int BLEND public static final int MODULATECes constantes représentent le mode d'application de la texture sur les facettes de la forme 3D. REPLACE utilise la texture à la place de la couleur des facettes, DECAL applique la texture comme un décalcomanie qui laisse apparaître la couleur des facettes sur les zones transparentes de la texture, BLEND mélange la texture avec la couleur renvoyée par la méthode getTextureBlendColor () et MODULATE combine la texture avec la couleur des facettes ce qui permet de calculer l'effet d'éclairage sur la forme 3D.
public static final int FASTEST public static final int NICESTCes constantes représentent le mode (le plus rapide ou celui donnant le meilleur aspect) à appliquer à la texture pour corriger l'effet de perspective.
public static final int ALLOW_MODE_READ public static final int ALLOW_MODE_WRITE public static final int ALLOW_BLEND_COLOR_READ public static final int ALLOW_BLEND_COLOR_WRITECes capacités permettent d'autoriser la lecture ou la modification du mode d'application de la texture et de la couleur de mélange.
public static final int ALLOW_TRANSFORM_READ public static final int ALLOW_TRANSFORM_WRITE public static final int ALLOW_COLOR_TABLE_READ public static final int ALLOW_COLOR_TABLE_WRITEPrincipaux constructeurs
public TextureAttributes () public TextureAttributes (int textureMode, Transform3D transform, Color4f textureBlendColor, int perspectiveCorrectionMode)Ces constructeurs créent une instance de la classe TextureAttributes initialisée avec le mode d'application de la texture textureMode et la couleur de mélange textureBlendColor. Par défaut, textureMode est égal à REPLACE, textureBlendColor au noir, transform à la transformation identité et perspectiveCorrectionMode à NICEST.
Principales méthodes
public int getTextureMode () (capacité ALLOW_MODE_READ) public void setTextureMode (int textureMode) (capacité ALLOW_MODE_WRITE) Ces méthodes permettent d'interroger ou de modifier le mode d'application de la texture défini par cet attribut. textureMode peut être égal à REPLACE, MODULATE, DECAL ou BLEND.
public void getTextureBlendColor (Color4f textureBlendColor) (capacité ALLOW_BLEND_COLOR_READ) public void setTextureBlendColor (Color4f textureBlendColor) (capacité ALLOW_BLEND_COLOR_WRITE) public void setTextureBlendColor
(float r, float g, float b, float a)(capacité ALLOW_BLEND_COLOR_WRITE) Ces méthodes permettent d'interroger ou de modifier la couleur avec laquelle la texture soit être mélangée quand le mode d'application de la texture est BLEND.
Exemples
Applets LitPlane, SunEarthMoonMotion.
La classe javax.media.j3d.ImageComponent
Cette classe abstract dérive des classes SceneGraphObject et NodeComponent. C'est la super classe des classes d'image ImageComponent2D et ImageComponent3D utilisées pour les textures et les fonds d'écran.
Principaux champs (constantes de capacités)
public static final int ALLOW_SIZE_READ public static final int ALLOW_FORMAT_READ public static final int ALLOW_IMAGE_READCes capacités permettent d'autoriser la lecture de la taille, du format ou de l'image.
La classe javax.media.j3d.ImageComponent2D
Cette classe dérive des classes SceneGraphObject, NodeComponent, ImageComponent et représente une image 2D utilisée pour les fonds d'écran et les textures. Le moyen le plus simple d'instancier cette classe est d'utiliser les méthodes getImage () ou getScaledImage () de la classe TextureLoader.
La classe com.sun.j3d.utils.image.TextureLoader
Cette classe utilitaire permet de charger une image et de générer une instance de classe ImageComponent2D ou Texture à partir de l'une des 4 sources suivantes :
- un fichier d'image
- une URL (Uniformed Resource Locator) désignant une image
- une instance de java.awt.Image
- une instance de java.awt.image.BufferedImage.
Les images provenant d'un fichier ou d'une URL sont générées sans avoir à s'occuper de la gestion asynchrone du chargement d'images en Java.
Principaux constructeurs
public TextureLoader (java.awt.image.BufferedImage bufferedImage) public TextureLoader (java.awt.Image image, java.awt.Component observer) public TextureLoader (String fileName, java.awt.Component observer) public TextureLoader (java.net.URL url, java.awt.Component observer) public TextureLoader (java.awt.image.BufferedImage bufferedImage, String format) public TextureLoader (java.awt.Image image, String format, java.awt.Component observer) public TextureLoader (String fileName, String format, java.awt.Component observer) public TextureLoader (java.net.URL url, String format, java.awt.Component observer)Ces constructeurs créent une instance de la classe TextureLoader qui charge une image à partir des sources bufferedImage ou image, du fichier fileName ou de l'URL url. Pour information, Java supporte les formats GIF et JPEG, et à partir du JDK 1.3 le format PNG. Le composant observer, instance de la classe java.awt.Component, peut être par exemple une instance des classes Canvas3D, java.awt.Applet ou java.awt.Frame.
Le format (par défaut égal à "RGBA") peut être égal à "RGBA", "RGBA4", "RGB5_A1", "RGB", "RGB4", "RGB5", "R3_G3_B2", "LUM8_ALPHA8", "LUM4_ALPHA4", "LUMINANCE" and "ALPHA", valeurs qui correspondent à ceux utilisés par la classe ImageComponent.
Méthodes
public ImageComponent2D getImage () public ImageComponent2D getScaledImage (float xScale, float yScale) public ImageComponent2D getScaledImage (int width, int height)Ces méthodes renvoient l'instance de la classe ImageComponent2D correspondant à l'image chargée. xScale et yScale permettent d'appliquer un facteur d'échelle sur les dimensions de l'image. De même, width et height permettent de modifier la taille finale de l'image.
public Texture getTexture ()Renvoie l'instance de la classe Texture correspondant à l'image chargée. Si les dimensions de l'image ne sont pas une puissance de 2, un changement d'échelle est appliquée à l'image pour respecter cette condition. Le format de la texture correspond au format de l'image chargée (format de texture LUMINANCE pour un format d'image "LUMINANCE" par exemple).
Exemples
Applets SimpleTexturedObjects, LitPlane, SunEarthMoonMotion.
|