IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Java Discussion :

Changement d'apparence sur une Sphere


Sujet :

3D Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Changement d'apparence sur une Sphere
    Bonjour,

    j'ai réalisé une petite appilcation 3D où j'affiche juste une sphere.
    Quand je veu modifier la couleur de cette sphere en utilisant la methode setAppearance(Appearance) à l'execution ca me donne l'exception"CapabilityNotSetException" car il faut la capabilités "ALLOw_APPEARANCE_WRITE".
    J'ai pourtant appelé la methode setCapability(ENABLE_APPEARANCE_MODIFY) qui donne les capabilités "ALLOw_APPEARANCE_READ" et "ALLOw_APPEARANCE_WRITE" mais sa ne change rien.

    Pouvez vous m'aidez svp, c'est tres important pour moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    // classes Java standart
    import java.awt.Frame;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.awt.BorderLayout;
    import java.awt.Font;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    // classes Java 3D
    import com.sun.j3d.utils.universe.SimpleUniverse;
    import javax.media.j3d.*;
    import javax.vecmath.*;
    import com.sun.j3d.utils.geometry.*;
    import com.sun.j3d.utils.universe.*;
    import com.sun.j3d.utils.behaviors.mouse.*;
    
    public class testApparence extends Frame implements WindowListener{
    	
    	private TransformGroup Transform;
    	private Sphere ball;
    		
    	public testApparence(){
    		
    		this.addWindowListener(this);
    		setLayout(new BorderLayout());
    		setBackground(Color.WHITE);
    		Transform =  new TransformGroup();
    		
    	        Transform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
    	         Transform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    		
    		Appearance defaultAppearance = this.newAppearance(0.3f,0.2f,1.0f);
    		
    		
    		
    		Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
    		add("Center", canvas3D);
    		
    
    		BranchGroup UneScene=new BranchGroup();
    	        UneScene.setCapability(UneScene.ALLOW_DETACH);
    		
    		
    		/* *******************/
    		
    		ball =new Sphere(0.1f,defaultAppearance);
    		
    	
    	//Specifies that the ALLOW_APPEARANCE_READ and ALLOW_APPEARANCE_WRITE bits are to be set on the generated geometry's Shape3D nodes.
    	        ball.setCapability(ball.ENABLE_APPEARANCE_MODIFY);
    	
    	
    	
    	
    		TransformGroup tmp = new TransformGroup();
    		
    	        tmp.setCapability(tmp.ALLOW_TRANSFORM_READ);
    	        tmp.setCapability(tmp.ALLOW_TRANSFORM_WRITE);
    		
    		tmp.addChild(ball);
    		Transform.addChild(tmp);
    		
    		
    		/* ******************/
    		
    		
    		
    		// Creation comportement rotation a la souris
    		MouseRotate rotateMouse = new MouseRotate(Transform);
    		rotateMouse.setSchedulingBounds(new BoundingSphere());
    		UneScene.addChild(rotateMouse);
    		
    		
    		// Creation comportement deplacement a la souris
    		MouseTranslate translateMouse = new MouseTranslate(Transform);
    		translateMouse.setSchedulingBounds(new BoundingSphere());
    		UneScene.addChild(translateMouse);
    		
    		
    		// Creation comportement zoom a la souris
    		MouseZoom zoomMouse = new MouseZoom(Transform);
    		zoomMouse.setSchedulingBounds(new BoundingSphere());
    		UneScene.addChild(zoomMouse);
    		
    		
    		
    		
    		
    		/* ******************/
    		UneScene.addChild(Transform);
    		UneScene.compile();
    		
    		SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
    		
    		simpleU.addBranchGraph(UneScene);
    
    	}
    
    	public void changeApparence(){
    		
    		Appearance player1Appearance = this.newAppearance(1.0f,0.1f,0.1f);
    		ball.setAppearance(player1Appearance);
    	
    	}
    	
    	public static void main(String[] args){
    	
    		testApparence ta = new testApparence();
    		ta.setSize(800,800);
    		ta.setVisible(true);
    		
    		ta.changeApparence();
    		
    	
    	}
    	
    	public Appearance newAppearance(float r,float v,float b){
    		// on crée une apparence avec une couleur et une couche alpha 
    		Appearance app0=new Appearance();
    		app0.setColoringAttributes(new ColoringAttributes(new Color3f(r,v,b),ColoringAttributes.SHADE_GOURAUD));
    	
    		return app0;
     	}
    	public void windowActivated(WindowEvent e){}
    	public void windowClosed(WindowEvent e){}
    	public void windowDeactivated(WindowEvent e){}
    	public void windowDeiconified(WindowEvent e){}
    	public void windowIconified(WindowEvent e){}
    	public void windowOpened(WindowEvent e){}
    	
    	public void windowClosing(WindowEvent e)
    	{
    		System.exit(1);
    	}
    }

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Je me retrouve avec un problème quasi similaire (Rubik's Cube qqun? ).

    Sauf que apparement j'ai réussi à écrire mais sans effet (ca concerne un objet hérité de Shape3D dont je fixe la géométrie).

    Par la suite je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            setCapability(Shape3D.ALLOW_APPEARANCE_WRITE | Shape3D.ALLOW_APPEARANCE_READ);
    Sauf que quand je veux tester ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Facelet curr = ((Facelet)faceletX.getChild(0));
            System.out.println("Changing color of " + curr);
     
            Appearance shapeAppearance = curr.getAppearance();
            ColoringAttributes shapeColoring = shapeAppearance.getColoringAttributes();
            shapeColoring.setColor(new Color3f(Color.pink));
            shapeAppearance.setColoringAttributes(shapeColoring);
            curr.setAppearance(shapeAppearance);
    J'ai l'erreur java.lang.NullPointerException car shapeAppearance est null...
    Si ca peut aider merci de m'aider lol

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Généralisation de la question :
    Comment modifier une couleur/appareance d'un objet une fois live/compilé?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai réussi

    en reprenant ton code j'ai réussi a régler mon problème sans trop de difficultés, merci beaucoup

    Mon nouveau code :

    Dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ball =new Sphere(0.1f,this.newAppearance(0.3f,0.2f,1.0f,0.6f));
    ball.setCapability( ball.ENABLE_APPEARANCE_MODIFY);
    ball.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE|Shape3D.ALLOW_APPEARANCE_READ);
    ball.setCapability( ball.ENABLE_APPEARANCE_MODIFY|ball.GENERATE_NORMALS);
     
    //pour pouvoir changer de couleur ensuite
    shapeAppearance =  ball.getAppearance();
    shapeColoring= shapeAppearance.getColoringAttributes();
    shapeColoring.setCapability(shapeColoring.ALLOW_COLOR_WRITE|shapeColoring.ALLOW_COLOR_READ);
    Apres compilation de la scene :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    shapeColoring.setColor(new Color3f(Color.red));

    Par contre pour ton probleme de NullPointeurException, je vois pas, ca vien peu etre de la creation de ta Shape, verifi un peu partout le contenu avec des System.out.println

Discussions similaires

  1. TMemo non apparent sur une Form
    Par Hypollite76 dans le forum Delphi
    Réponses: 6
    Dernier message: 26/07/2007, 13h26
  2. Orientation sur une sphere
    Par sylvain_bos dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 15/05/2007, 16h38
  3. [VBA-E] RechercheV si changement de valeur sur une cellule
    Par bonilla dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2007, 16h22
  4. [VRML] Récuperer la position de clic sur une sphere
    Par patmaba dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 10/04/2006, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo