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

Copyright © 2001 Greg Hopkins

Positionner les objets

Voir le résultat

Jusque là, les exemples n’ont créés que des objets au m^mee endroit, à savoir à l’origine. Dans Java 3D, les positions sont définies en utilisant 3 axes, x, y et z. Augmenter la coordonnées le long de l’axe x déplacera l’objet vers la droite, le long de l’axe y vers le haut, le long de l’axe z hors de l’écran. Dans l’image ci-contre, les axes x, y et z sont représentés respectivement par des sphères, des cônes et des cylindres.

On appellera ce système de coordonnées un système "main droite" car vous pouvez utiliser votre pouce ainsi que l’index et le majeur pour vous représenter les trois axes. Chaque distance est mesurée en mètres.

Pour placer vos objets dans la scène, vous démarrez au point (0,0,0) et vous déplacez les objets où vous voulez le long des axes. Le déplacement est appelé une "transformation". Les classes que vous allez utiliser seront donc TransformGroup et Transform3D. Vous ajoutez ensuite ET l’objet créé ET le Transform3D à un TransformGroup avnt d’ajouter le TransformGroup au restde de la scène

Etape

Exemple

  1. Créer une transformation, un objet et un groupe de transformation

Transform = new Transform3D();

TransformGroup tg = new TransformGroup();

Cone cone = new Cone(0.5f, 0.5f);

  • Spécifier une position pour un objet
  • Vector3f vector = new Vector3f(-.2f,.1f , -.4f);

  • Ordonner au Transform de déplacer l’objet à cet emplacement
  • Transform.setTranslation(vector);

  • Ajouter le Transform au TransformGroup
  • Tg.setTransform(transform);

  • Ajouter l’objet au TransformGroup
  • Tg.addChild(cone);

    Cela peut sembler difficile comme ça, mais les TransformGroup vous permettent de rassembler les objets ensemble et de tous les placer comme s’il ne s’agissait que d’un objet (comme une maison contenant chacun de ses murs et son toit). Par exemple, une table est un groupe d’objets formés de quatre cylindres longs pour les pieds et d’un cube aplati (Box) pour le plateau. En ajoutant chaque partie de la table à un seul TransformGroup, vous pourrez placer toute la table avec une seule translation.

    La classe Transform3D peut faire bien plus que de spécifier des coordonnées d’un objet. Les fonctions inclusent setScale qui change la taille d’un objet, ainsi que rotX, rotY et rotZ pour effectuer des rotations autour de chaque axe(sens des aiguilles d’une montre, ou sens anti-trigonométrique).

    L’exemple suivant affiche les différents objets sur chaque axe :This example displays the different objects on each axis.

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

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

    import javax.media.j3d.*;

    import javax.vecmath.*;

    public class Position {

    public Position() {

    SimpleUniverse universe = new SimpleUniverse();

    BranchGroup group = new BranchGroup();

    // Axe X recouvert de sphères

    for (float x = -1.0f; x <= 1.0f; x = x + 0.1f)

    {

    Sphere sphere = new Sphere(0.05f);

    TransformGroup tg = new TransformGroup();

    Transform3D transform = new Transform3D();

    Vector3f vector = new Vector3f( x, .0f, .0f);

    transform.setTranslation(vector);

    tg.setTransform(transform);

    tg.addChild(sphere);

    group.addChild(tg);

    }

    // Axe Y recouvert de cônes

    for (float y = -1.0f; y <= 1.0f; y = y + 0.1f)

    {

    TransformGroup tg = new TransformGroup();

    Transform3D transform = new Transform3D();

    Cone cone = new Cone(0.05f, 0.1f);

    Vector3f vector = new Vector3f(.0f, y, .0f);

    transform.setTranslation(vector);

    tg.setTransform(transform);

    tg.addChild(cone);

    group.addChild(tg);

    }

    // Axe Z recouvet de cylindres

    for (float z = -1.0f; z <= 1.0f; z = z+ 0.1f)

    {

    TransformGroup tg = new TransformGroup();

    Transform3D transform = new Transform3D();

    Cylinder cylinder = new Cylinder(0.05f, 0.1f);

    Vector3f vector = new Vector3f(.0f, .0f, z);

    transform.setTranslation(vector);

    tg.setTransform(transform);

    tg.addChild(cylinder);

    group.addChild(tg);

    }

    Color3f light1Color = new Color3f(.1f, 1.4f, .1f); // green light

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

    universe.getViewingPlatform().setNominalViewingTransform();

    // Ajouter les groupe d’objets au reste de l’univers

    universe.addBranchGraph(group);

    }

    public static void main(String[] args) {

    new Position();

    }

    }
     

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















    Précédent - Sommaire - Suivant