Page d'accueilFindIt !ContactObjets 3DEclairage 3D

Les extensions JavaTM

Table des matièresHierarchie des classes

CJava

 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.

Les différents attributs

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 :

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ÉFAUT
Couleur 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_WRITE

Ces 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_WRITE
public Material getMaterial ()
public void setMaterial (Material material)
 
ALLOW_MATERIAL_READ
ALLOW_MATERIAL_WRITE
public PolygonAttributes getPolygonAttributes ()
public void setPolygonAttributes
   (PolygonAttributes polygonAttributes)
ALLOW_POLYGON_ATTRIBUTES_READ
ALLOW_POLYGON_ATTRIBUTES_WRITE
public PointAttributes getPointAttributes ()
public void setPointAttributes
   (PointAttributes pointAttributes)

ALLOW_POINT_ATTRIBUTES_READ
ALLOW_POINT_ATTRIBUTES_WRITE

public LineAttributes getLineAttributes ()
public void setLineAttributes
   (LineAttributes lineAttributes)
ALLOW_LINE_ATTRIBUTES_READ
ALLOW_LINE_ATTRIBUTES_WRITE

public TransparencyAttributes getTransparencyAttributes ()
public void setTransparencyAttributes
   (TransparencyAttributes transparencyAttributes)

ALLOW_TRANSPARENCY_ATTRIBUTES_READ
ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE
public RenderingAttributes getRenderingAttributes ()
public void setRenderingAttributes
   (RenderingAttributes renderingAttributes)
ALLOW_RENDERING_ATTRIBUTES_READ
ALLOW_RENDERING_ATTRIBUTES_WRITE
public Texture getTexture ()
public void setTexture (Texture texture)

 
ALLOW_TEXTURE_READ
ALLOW_TEXTURE_WRITE
public TextureAttributes getTextureAttributes ()
public void setTextureAttributes
   (TextureAttributes textureAttributes)
ALLOW_TEXTURE_ATTRIBUTES_READ
ALLOW_TEXTURE_ATTRIBUTES_WRITE
public TexCoordGeneration getTexCoordGeneration ()
public void setTexCoordGeneration
   (TexCoordGeneration texCoordGeneration)
ALLOW_TEXGEN_READ
ALLOW_TEXGEN_WRITE 
public TextureUnitState [] getTextureUnitState ()
public void setTextureUnitState
    (TextureUnitState [] stateArray)
ALLOW_TEXTURE_UNIT_STATE_READ 
ALLOW_TEXTURE_UNIT_STATE_WRITE

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

Les attributs de couleur

La couleur d'une forme 3D est déterminée à l'aide des critères suivants :

  1. Les couleurs des sommets attribuées pour les constructions géométriques de classe GeometryArray et l'attribut ignoreVertexColors de la classe RenderingAttributes.
  2. La couleur des attributs de la classe ColoringAttributes.
  3. Les normales des constructions géométriques de classe GeometryArray et les couleurs des attributs de la classe Material.
  4. 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
 DOMINANT
Couleurs
des sommets
+
ignoreVertexColors
= false
Couleur de
ColoringAttributes
Normales
+
Couleurs de
Material
 Lumières 
On On On On Sommets
On On On   Sommets
On On   On Sommets
On On     Sommets
On   On On Sommets
On   On   Sommets
On     On Sommets
On       Sommets
  On On On Material
    On On   MaterialEmissive
  On   On ColoringAttributes
  On     ColoringAttributes
    On On Material
        On     MaterialEmissive
      On Défaut
        Défaut

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
DOMINANT
COULEUR FINALE
Sommets Couleurs des sommets
ColoringAttributes Couleur des attributs de la classe ColoringAttributes
Combinaison des couleurs des attributs de la classe Material actives sous la lumière
MaterialEmissive Couleur d'émission des attributs de la classe Material
Défaut Couleur des attributs d'apparence par défaut (blanche par défaut)
Remarques
Conclusions

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 :

Clown

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);
  }  
}

Arbre Clown
Figure 14. Arbre de la scène Clown

La 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 NICEST

Ces 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_WRITE

Ces 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_WRITE

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

Les attributs d'affichage des facettes

Java 3D permet d'afficher une forme 3D de plusieurs façons :

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 :

SphereConstruction

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);
  }

Arbre SphereConstruction
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_FILL 

Ces 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_FRONT

Ces 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_WRITE

Ces 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_WRITE
Principaux 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_WRITE

Ces 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_WRITE

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

Les attributs de transparence et de rendu

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.

WaterGlass

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);
  }  
}
 

Arbre WaterGlass
Figure 16. Arbre de la scène WaterGlass

La 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 NICEST

Ces 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_WRITE

Ces 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_WRITE
Principaux 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_WRITE

Ces 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_WRITE
Principal 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.

Les attributs de texture

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 :

Application d'une texture
Figure 17. Application d'une texture sur une facette d'une forme 3D

Considé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.jpg

Les 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_ALPHA

Ces 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_WRITE

Ces 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_READ
Principales 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 MODULATE

Ces 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 NICEST

Ces 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_WRITE

Ces 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_WRITE
Principaux 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_READ

Ces 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 :

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.


Page d'accueilFindIt !ContactObjets 3DEclairage 3DDébut de la page
© Copyrights 1997-2023 Emmanuel PUYBARET / eTeks
- Tous droits réservés -
Table des matièresHiérarchie des classes