Traduction par Ap0 du document original sur http://www.java3d.org

Copyright © 2001 Greg Hopkins

Tout est dans l’apparence

Il y a plein de méthodes pour changer la façon dont vos objets apparaissent. Vous pouvez changer leur couleur ou la façon dont il reflètent la lumière. Vous pouvez les recouvrir d’images en 2D ou bien de textures. La classe Appearance contient les fonctions dont vous aurez besoin pour ces changements. Nous allons voir cela.

La manière la plus simple de configurer l’apparence est de spécifier la couleur et le "matériau", à savoir comment l’objet apparaît lorsqu’il est éclairé. Vous pouvez faire cela en créant un Material.

 

Etape

Exemple

  1. Créer un objet

Sphere sphere = new Sphere();

  • Créer une apparence
  • Appearance ap = new Appearance();

  • Créer une couleur
  • Color3f col = new Color3f(0.0f, 0.0f, 1.0f);

  • Créer les attributs de coloration
  • ColoringAttributes ca = new ColoringAttributes

    (col, ColoringAttributes.NICEST);

  • Ajouter les attributs à l’apparence
  • ap.setColoringAttributes(ca);

  • Régler l’apparence de l’objet
  • Sphere.setAppearance(ap);

    Materials / les matériaux

    Les Materials ont 5 propriétes: Ambient, Emissive, Diffuse, and Specular. La cinquième propriété est la shininess (la brillance), à spécifier avec un nombre. Ces propriétés définissent des types de luminosité qu’il est bon de tester afin de se faire une idée plus précise quant au rendu à l’écran.

    // Boule de billard

    // ambient emissive diffuse specular shininess

    // Material mat = new Material(red, black, red, white, 70f);

     

    Textures

    Les Materials changent l’apparence d’une forme dans son intégralité, mais, parfois, les objets les plus brillants peuvent apparaître sombres. En ajoutant une texture, vous pouvez produire des effets bien plus intéressants comme simuler un métal, du marbre, ou bien envelopper un objet avec une image en 2D (plaquer une texture représentant des briques sur un pavé droit pour représenter un bâtiment).

    La classe TextureLoader permet de charger un fichier image pour l’utiliser en tant que texture. Vos images doivent respecter la règle du "simple par double", par exemple une image de 128 pixels par 256. En chargeant l’image, vous pouvez aussi spécifier la manière de l’afficher. Par exemple, RGB (Red, Green, Blue) utilisera la couleur originale de l’image, LUMINANCE l’affichera en noir et blanc.

    Une fois la texture chargée, il est possible de changer ses attributs (TextureAttributes) pour remplacer l’objet recouvert par l’image, mélanger l’image à la couleur de votre choix, etc.

    Si vous utilisez un objet simple comme une sphère par exemple, vous aurez à configurer les "primitive flags". A configurer dans :

    Primitive.GENERATE_NORMALS + Primitive.GENERATE_TEXTURE_COORDS en créant l’objet.

    Au cas où vous commenceriez à vous emmêler les pinceaux, voici un exemple pour vous familiariser avec les réglages concernant les textures. Voyez ce que cela donne, modifiez les paramètres, etc. C’est très instructif ! L’image peut être téléchargée à l’adresse : http://www.java3d.org/Arizona.jpg. Vous pouvez également choisir une image vous appartenant, bien évidemment.

    import com.sun.j3d.utils.geometry.*;

    import com.sun.j3d.utils.universe.*;

    import com.sun.j3d.utils.image.*;

    import javax.media.j3d.*;

    import javax.vecmath.*;

    import java.awt.Container;

    public class PictureBall {

    public PictureBall() {

    // Créer l’univers

    SimpleUniverse universe = new SimpleUniverse();

    // Créer une structure contenant les objets

    BranchGroup group = new BranchGroup();

    // Configurer les couleurs

    Color3f black = new Color3f(0.0f, 0.0f, 0.0f);

    Color3f white = new Color3f(1.0f, 1.0f, 1.0f);

    Color3f red = new Color3f(0.7f, .15f, .15f);

    // Configurer la texture

    TextureLoader loader = new TextureLoader("K:\\3d\\Arizona.jpg",

    "LUMINANCE", new Container());

    Texture texture = loader.getTexture();

    texture.setBoundaryModeS(Texture.WRAP);

    texture.setBoundaryModeT(Texture.WRAP);

    texture.setBoundaryColor( new Color4f( 0.0f, 1.0f, 0.0f, 0.0f ) );

    // Configurer les attributs de la texture

    // Paramètres possibles : REPLACE, BLEND ou DECAL (ici, MODULATE)

    TextureAttributes texAttr = new TextureAttributes();

    texAttr.setTextureMode(TextureAttributes.MODULATE);

    Appearance ap = new Appearance();

    ap.setTexture(texture);

    ap.setTextureAttributes(texAttr);

    //Configurer le matériau

    ap.setMaterial(new Material(red, black, red, black, 1.0f));

    // Créer une sphère pour y appliquer les textures

    int primflags = Primitive.GENERATE_NORMALS + Primitive.GENERATE_TEXTURE_COORDS;

    Sphere sphere = new Sphere(0.5f, primflags, ap);

    group.addChild(sphere);

    // Créer les éclairages

    Color3f light1Color = new Color3f(1f, 1f, 1f);

    BoundingSphere bounds =

    new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);

    Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);

    DirectionalLight light1

    = new DirectionalLight(light1Color, light1Direction);

    light1.setInfluencingBounds(bounds);

    group.addChild(light1);

    AmbientLight ambientLight =

    new AmbientLight(new Color3f(.5f,.5f,.5f));

    ambientLight.setInfluencingBounds(bounds);

    group.addChild(ambientLight);

    // Regarder vers l&a sphère pour lui faire face

    universe.getViewingPlatform().setNominalViewingTransform();

    // Ajouter les groupe d’objets à l’univers

    universe.addBranchGraph(group);

    }

    public static void main(String[] args) {

    new PictureBall();

    }

    }

    Effets spéciaux

    Jetez un œil au AppearanceTest fourni avec Java 3D, vous y verrez les différents effets réalisables. Vous pouvez par exemple n’afficher des objets que par leur sommets ou bien les rendre transparents, comme suit :

    TransparencyAttributes t_attr =

    new TransparencyAttributes(TransparencyAttributes.BLENDED,0.5,

    TransparencyAttributes.BLEND_SRC_ALPHA,

    TransparencyAttributes.BLEND_ONE);

    ap.setTransparencyAttributes( t_attr );

    Précédent - Sommaire - Suivant

     
    7 internaute(s) sur Web3d-fr
    Copyright Web3d-fr 2001-2004