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

Copyright © 2001 Greg Hopkins

Eclairer votre monde

Voir le résultat

OK, Le premier exemple était un bon commencement, mais était-ce vraiment de la 3D ? Si vous pensez qu’un simple carré n’est pas représentatif d’une image en trois dimensions, vous allez devoir ajouter de l’éclairage à votre univers. La manière dont la lumière frappe les objets permet de convaincre l’utilisateur que ce qu’il voit est en 3D.

L’exemple suivant montre comment afficher une sphère éclairée d’une lumière rouge.

 

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

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

import javax.media.j3d.*;

import javax.vecmath.*;

public class Ball {

public Ball() {

// Créer l’univers

SimpleUniverse universe = new SimpleUniverse();

// Créer une structure contenant les objets

BranchGroup group = new BranchGroup();

// Créer une sphère et l’ajouter au groupe d’objets

Sphere sphere = new Sphere(0.5f);

group.addChild(sphere);

// Créer une lumière rouge éclairant à 100 m depuis l’origine

Color3f light1Color = new Color3f(1.8f, 0.1f, 0.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);

// Regarder vers la 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 Ball(); }

}

La sphère que nous venons de créer est blanche, par défaut mais aaparaît rouge grâce à l’éclairage coloré. Puisque c’est une lumière directionnelle (DirectionalLight), nous avons aussi à spécifier à quelle distance cette lumière va éclairer et dans quelle direction. Dans cet exemple, la lumière éclaire jusqu’à 100 m et ce vers la droite, inclinée vers le bas et vers l’intérieur de l’écran (ceci est défini par les vecteurs : : 4.0 à droite, -7.0 en bas, et -12.0 vers l’intérieur de l’écran, en profondeur).

Vous pouvez également créer une lumière ambiante (AmbientLight) pour créer un éclairage sans direction à spécifier ou bien un SpotLight si vous désirez vous focaliser sur un endroit précis de la scène. La combinaison d’une forte source lumineuse directionnelle et d’une lumière ambiante plus faible donnera une impression plus naturelle et réaliste de votre scène. Les lumières dans Java 3D ne produisent pas d’ombres, ce serait beaucoup trop long à calculer.

Précédent - Sommaire - Suivant

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