Erreurs java3D

gigi00 Messages postés 23 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 26 juin 2010 - 26 juin 2010 à 20:14
souicioql Messages postés 24 Date d'inscription mercredi 12 mai 2010 Statut Membre Dernière intervention 26 mai 2011 - 22 août 2010 à 14:37
bonjour tous
je suis entraine de travailler sur un tp de java 3d et il me donne lors de son exécution les erreurs suivantes:
javax.media.j3d.GroupRetained.checkValidChild(GroupRetained.java:455)
javax.media.j3d.GroupRetained.addChild(GroupRetained.java:464)
javax.media.j3d.Group.addChild(Group.java:464)
TP2.creerGrapheScene(TP2.java:114)
TP2.<TP2.java:208>
TP2.main<TP2.java:224>

voila l'énoncer du tp :

Le programme devra permettre de faire tourner le cube de manière à voir toutes les faces. Vous
utiliserez un interpolateur de rotation (rotationInterpolator)
vous diviserez votre fenêtre d'affichage en 4 et afficherez ce cube avec
des lumières différentes dans chaque sousfenêtre
comme suit :
· quart hautgauche
: une lumière ambiante uniquement (qui sera définie pour toute la scène)
· quart hautdroit
: lumière LightSpot (dont vous définirez la position)
· quart basdroit
: lumière directionnelle (dont vous définirez la direction)
· quart basgauche
: lumière directionnelle + lumière LightSpot (dont vous pourrez changer la
couleur par exemple)

***************merci***********
vous trouvez ci-joint les codes:
La classe TP2.java

/** Importation des classes Java standard
 */
import java.applet.Applet;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;

/** Importation des classes Java 3D
 */
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.vecmath.Point3f;
import javax.vecmath.Color3f;
import javax.media.j3d.Light;

public class TP2 extends Applet {

    /** Déclarer un attribut de type SimpleUniverse 
     *
     * This class sets up a minimal user environment to quickly and
     * easily get a Java 3D program up and running. This utility class
     * creates all the necessary objects on the "view" side of the
     * scene graph. Specifically, this class creates a locale, a
     * single ViewingPlatform, and a Viewer object (both with their
     * default values). Many basic Java 3D applications will find that
     * SimpleUniverse provides all necessary functionality needed by
     * their applications. More sophisticated applications may find
     * that they need more control in order to get extra functionality
     * and will not be able to use this class.
     */ 

    private SimpleUniverse universSimple = null;

    /** Méthode pour créer un graphe de scène
     */
    public BranchGroup creerGrapheScene() {

/** Créer la racine du graphe de scène
 */
BranchGroup racineGS = new BranchGroup();

/** Créer quatre groupes de transformations pour positionner
 * le cube à quatre endroit dans la scène
 */

//créer une transformation
Transform3D translate = new Transform3D();
//y ranger une translation
translate.set(new Vector3f(-0.5f, 0.5f, 0.0f));

//en haut à gauche
TransformGroup translateHG = new TransformGroup(translate);
racineGS.addChild(translateHG);

//en haut à droite
translate.set(new Vector3f(0.5f, 0.5f, 0.0f));
TransformGroup translateHD = new TransformGroup(translate);
racineGS.addChild(translateHD);

//en bas à gauche
translate.set(new Vector3f(-1.0f, 1.0f, 0.0f));
TransformGroup translateBG = new TransformGroup(translate);
racineGS.addChild(translateBG);

//en bas à droite
translate.set(new Vector3f(1.0f, 1.0f, 0.0f));
TransformGroup translateBD = new TransformGroup(translate);
racineGS.addChild(translateBD
);

/** Créer un noeud TransformGroup pour faire tourner le cube
 * sur lui-même à l'aide d'un RotationInterpolator
 */
TransformGroup rotationContinue = new TransformGroup();
rotationContinue.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

Transform3D yAxis = new Transform3D();
Alpha rotationAlpha = new Alpha(-1, 4000);

RotationInterpolator rotator =
    new RotationInterpolator(rotationAlpha, rotationContinue, yAxis,
     0.0f, (float) Math.PI*2.0f);
BoundingSphere bounds =
    new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
rotator.setSchedulingBounds(bounds);
//ajouter l'interpolateur rotator au groupe de transformation rotationContinue
rotationContinue.addChild(rotator);

/** Créer un TransformGroup pour faire tourner le cube autour de l'axe Oz
 * et le réduire
 */
Transform3D rotscale = new Transform3D();
rotscale.rotX(Math.PI/6.0d);//rotation d'angle pi/6 autour de Oz
Transform3D scale =  new Transform3D();
scale.setScale(0.5f);
//composer le changement d'échelle suivi de la rotation
rotscale.mul(scale);
//créer un groupe de transformation contenant la transformation rotscale
TransformGroup TGCube = new TransformGroup(rotscale);
//ajouter TGCube au groupe rotationContinue
rotationContinue.addChild(TGCube);
//ajouter un cube texturé au groupe TGCube
CubeTexture cube = new CubeTexture();
TGCube.addChild(cube);

//placer le cube tournant en haut à gauche
translateHG.addChild(rotationContinue);
//placer le cube tournant en haut à droite en "clonant" le précédent
translateHD.addChild((TransformGroup)(rotationContinue.cloneTree()));
//idem en bas à gauche
translateBG.addChild(rotationContinue);
//idem en bas à droite
translateBD.addChild((TransformGroup)(rotationContinue.cloneTree()));

/** Mettre en place l'éclairage
 */

// la lumière ambiante (pour toute la scène) grise d'intensité 0.4
AmbientLight lumiereAmbiante = new AmbientLight(new Color3f(0.4f, 0.4f, 0.4f));
lumiereAmbiante.setInfluencingBounds(new BoundingSphere(new Point3d(),1.0d));
//l'attacher à la racine du graphe de scène
racineGS.addChild(lumiereAmbiante);

// le spot en haut à droite
// couleur jaune,
// situé au point (1.0, 0.5, 1.0),
// facteur d'atténuation : constant = 0.05, linéaire : 0.005, quadratique : 0.002,
// de direction (-1, 0, -1),
// angle de diffusion pi/3,
// concentration 92.

SpotLight monSpot = new SpotLight(
  new Color3f(1.0f,1.0f,0.0f), // la couleur
  new Point3f(1.0f, 0.5f, 1.0f), // la position
  new Point3f(0.05f,0.005f,0.002f), // constant, linear, quadratic 
  new Vector3f(-1, 0, -1), // la direction
  (float)Math.PI/3, // l'angle de diffusion du spot
  92 // la concentration
  );
//sphère d'influence centrée à l'origine de rayon 0.5
  monSpot.setInfluencingBounds (new BoundingSphere (new Point3d (), 0.5));
//l'attacher au groupe de transformation HD
translateHD.addChild(monSpot);

// la lumière directionnelle pour le groupe de transformation BD
DirectionalLight lumiereDirectionnelle = new DirectionalLight();
//sa direction (0,0,-1)
lumiereDirectionnelle.setDirection(0,0,-1);
//sa sphère d'influence centrée à l'origine de rayon 0.5
 lumiereDirectionnelle.setInfluencingBounds (new BoundingSphere (new Point3d (), 0.5));
//sa couleur blanche
 lumiereDirectionnelle.setColor(new Color3f(0.0f, 0.0f, 0.0f));
//l'attacher au goupe de transformation BD
translateBD.addChild(lumiereDirectionnelle);

// la lumière ponctuelle blanche, située au point (1.0, 1.5, 1.0)
// avec facteur d'atténuation : constant = 0.05, linéaire : 0.005,
// quadratique : 0.002
// pour le groupe de transformation BG

PointLight sourcePonctuelle = new PointLight(
                     new Color3f(0.0f, 0.0f, 0.0f), // la couleur
     new Point3f(1.0f, 0.5f, 1.0f), // la position
     new Point3f(0.05f,0.005f,0.002f)  // atténuation
     );
//sa sphère d'influence centrée à l'origine de rayon 0.5
sourcePonctuelle.setInfluencingBounds (new BoundingSphere (new Point3d (), 0.5));
//l'attacher au goupe de transformation BG  
translateBG.addChild(sourcePonctuelle);

// Spot de couleur bleue pour le groupe de transformation BG
// situé au point (1.0, 0.5, 1.0)
// avec facteur d'atténuation : constant = 0.05, linéaire : 0.005, quadratique : 0.002,
// de direction (-1.0, 0.0, -1.0)
// d'angle pi/2
// de concentration 92
SpotLight monSpot2 = new SpotLight(
  new Color3f(0.1f,0.1f,1.0f), // la couleur bleue
  new Point3f(1.0f, 0.5f, 1.0f), // la position
  new Point3f(0.05f,0.005f,0.002f), // constant, linear, quadratic 
  new Vector3f(-1.0f, 0.0f, -1.0f), // la direction
  (float)Math.PI/2, // l'angle de diffusion du spot
  92 // la concentration
  );

      //sphère d'influence centrée à l'origine de rayon 0.5
  monSpot2.setInfluencingBounds (new BoundingSphere (new Point3d (), 0.5));
//l'attacher au groupe de transformation BG
translateBG.addChild(monSpot2);

// optimiser en compilant
racineGS.compile();

return racineGS;
    }

    public TP2() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
    SimpleUniverse.getPreferredConfiguration();

Canvas3D c = new Canvas3D(config);
add("Center", c);
// Create a simple scene and attach it to the virtual universe
BranchGroup scene = creerGrapheScene();
universSimple = new SimpleUniverse(c);

// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
universSimple.getViewingPlatform().setNominalViewingTransform();

universSimple.addBranchGraph(scene);
    }

   
    //
    // The following allows HelloUniverse to be run as an application
    // as well as an applet
    //
    public static void main(String[] args) throws Exception {
new MainFrame(new TP2(), 600, 600);
    }
}

2eme classe CubeTexture.java
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.Container;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.TextureLoader;
import javax.media.j3d.*;
import javax.vecmath.*;

public class CubeTexture extends Shape3D {

    public CubeTexture() {
this.setGeometry(cubeGeometry());
this.setAppearance(cubeAppearance());
    }

    private Geometry cubeGeometry(){

// Les huit sommets du cube
Point3f pointA = new Point3f(-0.5f, -0.5f, 0.5f);
Point3f pointB = new Point3f(0.5f, -0.5f, 0.5f);
Point3f pointC = new Point3f(0.5f, 0.5f, 0.5f);
Point3f pointD = new Point3f(-0.5f, 0.5f, 0.5f);
Point3f pointE = new Point3f(-0.5f, -0.5f, -0.5f);
Point3f pointF = new Point3f(0.5f, -0.5f, -0.5f);
Point3f pointG = new Point3f(0.5f, 0.5f, -0.5f);
Point3f pointH = new Point3f(-0.5f, 0.5f, -0.5f);

// The QuadArray object draws the array of vertices as individual quadrilaterals.
// Each group of four vertices defines a quadrilateral to be drawn. 

QuadArray cube = new QuadArray(24,
       // 6 faces carrées
       QuadArray.COORDINATES
       // on va introduire les coordonnées des sommets
       | QuadArray.TEXTURE_COORDINATE_2
       // on va introduire les coordonnées de textures 2D
       );
// Donner les coordonnées des sommets de chaque facette carrée
// dans un tableau de Point3f

cube.setCoordinates(0,//les points sont à stocker au début de la géométrie 
    new Point3f[] {//tableau de points : 4 par face
pointA, pointB, pointC, pointD,//face 0 = ABCD
pointA, pointE, pointF, pointB,//face 1 = AEFB
// quand on parcourt la liste des points
// d'une facette qu'on regarde de face 
// on doit tourner dans le sens anti-horaire
pointE, pointF, pointH, pointG,//face 2 pointD, pointG, pointH, pointC,//face 3
pointE, pointA, pointD, pointG,//face 4 pointB, pointF, pointH, pointC,//face 5
    });
// Donner les coordonnées de textures
cube.setTextureCoordinates(0,//premier ensemble de coordonnées de texture
   0,// indice du premier point dans le tableau de sommets
   new TexCoord2f[] {//tableau de coordonnées de texture
       //face 0
       new TexCoord2f(0.0f, 0.0f), new TexCoord2f(0.5f, 0.0f),
       new TexCoord2f(0.5f, 0.5f), new TexCoord2f(0.0f, 0.5f),
       //face 1
       new TexCoord2f(0.0f, 1.0f), new TexCoord2f(0.0f, 0.0f),
       new TexCoord2f(0.5f, 0.0f), new TexCoord2f(0.5f, 1.0f),
       //face 2
       new TexCoord2f(0.0f, 0.0f), new TexCoord2f(1.0f, 0.0f),
       new TexCoord2f(1.0f, 0.5f), new TexCoord2f(0.0f, 0.5f),
       //face 3
       new TexCoord2f(0.5f, 0.5f), new TexCoord2f(0.0f, 0.5f),
       new TexCoord2f(0.0f, 0.0f), new TexCoord2f(0.5f, 0.0f),
       //face 4
       new TexCoord2f(0.5f, 0.0f), new TexCoord2f(0.5f, 1.0f),
       new TexCoord2f(0.0f, 1.0f), new TexCoord2f(0.0f, 0.5f),
       //face 5
      new TexCoord2f(0.0f, 0.0f), new TexCoord2f(0.5f, 0.0f),
       new TexCoord2f(0.5f, 0.5f), new TexCoord2f(0.0f, 0.5f),
   });

// Générer automatiquement les normales à l'aide d'un objet GeometryInfo
// collectant les informations contenues dans le cube
// (l'énumération des sommets des facettes oriente les normales)
GeometryInfo gi = new GeometryInfo(cube);
//créer une générateur de normales
NormalGenerator ng = new NormalGenerator();
//générer les normales relativement aux informations contenues dans gi
ng.generateNormals(gi);
//récupérer le cube avec ses normales à partir de gi
cube = (QuadArray)(gi.getGeometryArray());

return cube;
    }

    private Appearance cubeAppearance(){
//créer une apparence
Appearance apparence = new Appearance();
//créer un chargeur de texture à partir d'une image
TextureLoader chargeur = new TextureLoader("orchidee.jpg", new Container());
//récupérer l'image
ImageComponent2D image = chargeur.getImage();
//créer une texture vide aux dimensions de l'image récupérée
Texture2D texture = new Texture2D(Texture.BASE_LEVEL,// pas de mipmapping 
  Texture.RGBA,
  image.getWidth(),
  image.getHeight());
//placer l'image dans la texture
texture.setImage(0,image); // 0 pour niveau de base du mipmap
// placer la texture dans l'apparence
apparence.setTexture(texture);

//Pour combiner texture et éclairage il faut créer un attribut de texture
// et l'appliquer en mode MODULATE

TextureAttributes attributTexture=new TextureAttributes();
attributTexture.setTextureMode(TextureAttributes.MODULATE);
apparence.setTextureAttributes(attributTexture);

// Ajouter les propriétés du matériau à l'apparence
apparence.setMaterial(new Material(new Color3f(0.2f,0.2f,0.2f),//réflexion ambiante (0.2, 0.2, 0.2)
  new  Color3f(0f,0f,0f),//émission de lumière nulle
   new  Color3f(0.8f,0.8f,0.8f),//réflexion diffuse (0.8, 0.8, 0.8)
   new  Color3f(1.0f,1.0f,1.0f),//réflexion spéculaire (1.0, 1.0, 1.0)
   64));// brillance 64

return apparence;
    }
}


merci

1 réponse

souicioql Messages postés 24 Date d'inscription mercredi 12 mai 2010 Statut Membre Dernière intervention 26 mai 2011
22 août 2010 à 14:37
Tu n'as pas du installer les librairies java 3d ...
0
Rejoignez-nous