Java-Gaming.org Hi !
Featured games (83)
games approved by the League of Dukes
Games in Showcase (539)
Games in Android Showcase (132)
games submitted by our members
Games in WIP (603)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  adding a branchgroup to a live scene with swing buttons  (Read 1342 times)
0 Members and 1 Guest are viewing this topic.
Offline spytox4

Senior Newbie





« Posted 2006-01-02 13:21:25 »



Hi, please have a look on the following code.
I want to add "objects" in a live scene.
I've planned to do this by attaching a new branchgroup
to an existing alive structure.
The code of the new branchgroup is in the action of a swing button.

// method "addObject" called by the button

    private class addObject extends BranchGroup implements ActionListener {
        public void actionPerformed(ActionEvent event){
          BranchGroup obj = new BranchGroup ();
          // Creation of a sphere
          Sphere sphere = new Sphere (0.3f);
          System.out.println(sphere);
          obj.addChild (sphere);
          obj.addChild (this);
          System.out.println("add action");
          System.out.println(obj);

// definition of the button

   private JButton ajout = new JButton("Ajout");
   
   ...
          JPanel p2 = new JPanel();
        ajout.addActionListener(new addObject());
        p2.add(ajout);
   ...

// code to attach the branchgroup

      .....
   BranchGroup  b2 = new addObject();
        System.out.println("br "+b2);
        objRoot.addChild(b2);
        objRoot.compile();
        return objRoot;

But, the Sphere is not seen on the scene
even if the action on the button seems to work.
And if i do twice, i get this error :

Exception occurred during event dispatching:

javax.media.j3d.MultipleParentException: Group.addChild: child already has a parent

   at javax.media.j3d.GroupRetained.checkValidChild(GroupRetained.java:442)

   at javax.media.j3d.GroupRetained.addChild(GroupRetained.java:451)

   at javax.media.j3d.Group.addChild(Group.java:266)

   at applet3d.Scene3D$addObject.actionPerformed(Scene3D.java:588)

   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1450)

   at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1504)

   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:378)

   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:250)

   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:216)

   at java.awt.Component.processMouseEvent(Component.java:3715)

   at java.awt.Component.processEvent(Component.java:3544)

   at java.awt.Container.processEvent(Container.java:1164)

   at java.awt.Component.dispatchEventImpl(Component.java:2593)

   at java.awt.Container.dispatchEventImpl(Container.java:1213)

   at java.awt.Component.dispatchEvent(Component.java:2497)

   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2451)

   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2216)

   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2125)

   at java.awt.Container.dispatchEventImpl(Container.java:1200)

   at java.awt.Window.dispatchEventImpl(Window.java:914)

   at java.awt.Component.dispatchEvent(Component.java:2497)

   at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)

   at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131)

   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98)

   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

   at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)


Anyone can help ?

Thanks
Offline Jeff

JGO Coder




Got any cats?


« Reply #1 - Posted 2006-01-03 04:33:41 »

Whelp your SPhere has no render attributes to start with.

My suggestion is that you first work on just creating a graph with a sphere in it yo ucna see. Once you get that working then yo ucan the complexity of dynamically adding and removing it.




Got a question about Java and game programming?  Just new to the Java Game Development Community?  Try my FAQ.  Its likely you'll learn something!

http://wiki.java.net/bin/view/Games/JeffFAQ
Offline Mike Jacobs

Junior Devvie





« Reply #2 - Posted 2006-01-03 21:00:54 »

Is it possible that it has nothing to do with the sphere?  The exception could be related to the instance of the addObject class being added as a child to the new branch group.  Should this code:

1  
obj.addChild (this);


be changed to:
1  
 this.addChild(obj);


It might be worth looking closer at the exception.

Mike

Special Effects for Java 3D games: http://www.indietechnologies.com
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Jeff

JGO Coder




Got any cats?


« Reply #3 - Posted 2006-01-03 21:03:54 »

The exception is a red herring.

Hes seeing that because he tried to add an already live branchgroup. (he tried to add it twice.)

His problem is that the branch group IS getting added but its not creating a total scenegraph that renders anything.  See all my suggestions above.

Got a question about Java and game programming?  Just new to the Java Game Development Community?  Try my FAQ.  Its likely you'll learn something!

http://wiki.java.net/bin/view/Games/JeffFAQ
Offline spytox4

Senior Newbie





« Reply #4 - Posted 2006-01-04 02:54:00 »

I've modified the code and I don' t have the exception anymore. But,  when i press the button several times :

com.sun.j3d.utils.geometry.Sphere@1df354

action ajout

javax.media.j3d.BranchGroup@5225a7

com.sun.j3d.utils.geometry.Sphere@2da3d

action ajout

javax.media.j3d.BranchGroup@45f743

Which seems to be normal.

look at the code hereafter (this is the complete class). The sphere is still not seen, but i've put some attributes to it.


import java.awt.*;
import java.awt.GraphicsConfiguration;
import java.awt.event.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.behaviors.keyboard.*;

import javax.media.j3d.*;
import javax.vecmath.*;

import javax.swing.*;




public class Scene3Db extends JFrame implements ActionListener, MouseListener {

    /**
    *
    */
   private static final long serialVersionUID = 1L;
   private SimpleUniverse su;
    private BranchGroup sceneBG, mainBG, shapeBG, objRoot;
    private TransformGroup mainTG, shapeTG, cameraTG;
    private BoundingSphere bounds;
    private Material material2;
    private static int mycount = 1;



    //declaration des elements du gui
    private JLabel etiq1;

    private JCheckBox couleur;

    //constructeur
    public Scene3Db() {
        Container contentPane = getContentPane();
        //BorderLayout bl = new BorderLayout();
        //setLayout(bl);

        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D c = new Canvas3D(config);
        contentPane.add("Center", c);

        JPanel p1 = new JPanel();
        p1.add(presentationPanel());
        contentPane.add("North", p1);

        JPanel p2 = new JPanel();
        JButton ajout = new JButton("Ajout");
        addObject addObjBG = new addObject();
        ajout.addActionListener(addObjBG);
        //objRoot.addChild(addObjBG); //pb !
        p2.add(ajout);
        contentPane.add("South", p2);

        SimpleUniverse su = new SimpleUniverse(c);
        BranchGroup scene = createSceneGraph(su);
        //scene.setCapability( BranchGroup.ALLOW_BOUNDS_READ );
        su.getViewingPlatform().setNominalViewingTransform();
        su.addBranchGraph(scene);

        addWindowListener( new WindowAdapter() {
        public void windowClosing(WindowEvent e) {System.exit(0);}});

        setSize(800,600); //Taille Fenetre
        show();
        repaint();
        }

    //création du graphe de scène
    public BranchGroup createSceneGraph(SimpleUniverse su) {

    //création d'un BG racine de l'arbre 3D
    BranchGroup objRoot = new BranchGroup();
    objRoot.setCapability( BranchGroup.ALLOW_PICKABLE_READ );
    objRoot.setCapability( BranchGroup.ALLOW_PICKABLE_WRITE );

    objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
    objRoot.setCapability(BranchGroup.ALLOW_DETACH);
    objRoot.setCapability(Group.ALLOW_CHILDREN_READ);
    objRoot.setCapability(Group.ALLOW_CHILDREN_WRITE);
    objRoot.setCapability(Group.ALLOW_CHILDREN_EXTEND);


        //création d'un bounds pour le fond et la lumière
        BoundingSphere bounds =
        new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
        Color3f bgColor = new Color3f(0.05f, 0.05f, 0.2f);
        Background bg = new Background(bgColor);
        bg.setApplicationBounds(bounds);
        objRoot.addChild(bg);

        Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
        Vector3f light1Direction  = new Vector3f(4.0f, -7.0f, -12.0f);

        DirectionalLight light1
            = new DirectionalLight(light1Color, light1Direction);
        light1.setInfluencingBounds(bounds);
        objRoot.addChild(light1);

        BranchGroup sceneObj = new BranchGroup();

        //création d'un TG pour la gestion d'échelle
        TransformGroup objScale = new TransformGroup();
        Transform3D t3d = new Transform3D();
        t3d.setScale(0.4);
        objScale.setTransform(t3d);
        sceneObj.addChild(objScale);

        //création d'un TG pour permettre la modification des objets visuels
        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        objScale.addChild(objTrans);

        MouseRotate myMouseRotate = new MouseRotate();
        myMouseRotate.setTransformGroup(objTrans);
        myMouseRotate.setSchedulingBounds(new BoundingSphere());
        sceneObj.addChild(myMouseRotate);

        MouseTranslate myMouseTranslate = new MouseTranslate();
        myMouseTranslate.setTransformGroup(objTrans);
        myMouseTranslate.setSchedulingBounds(new BoundingSphere());
        sceneObj.addChild(myMouseTranslate);

        MouseZoom myMouseZoom = new MouseZoom();
        myMouseZoom.setTransformGroup(objTrans);
        myMouseZoom.setSchedulingBounds(new BoundingSphere());
        sceneObj.addChild(myMouseZoom);

        Vector3f translate = new Vector3f();
        Transform3D T3D = new Transform3D();
        TransformGroup TG = null;
        TransformGroup vpTrans = null;
        SharedGroup share = new SharedGroup();

        float[][] position = {{  0.0f, 0.0f,  -3.0f},
                              {  6.0f, 0.0f,   0.0f},
                              {  6.0f, 0.0f,   6.0f},
                              {  3.0f, 0.0f, -10.0f},
                              { 13.0f, 0.0f, -30.0f},
                              {-13.0f, 0.0f,  30.0f},
                              {-13.0f, 0.0f,  23.0f},
                              { 13.0f, 0.0f,   3.0f}};

        for (int i = 0; i < position.length; i++){
                translate.set(position);
                T3D.setTranslation(translate);
               TG = new TransformGroup(T3D);
                TG.addChild(new Link(share));
               objRoot.addChild(TG);
        }
        vpTrans = su.getViewingPlatform().getViewPlatformTransform();
        translate.set( 0.0f, 0.3f, 0.0f);

        T3D.setTranslation(translate);
        vpTrans.setTransform(T3D);

        KeyNavigatorBehavior keyNavBeh = new KeyNavigatorBehavior(vpTrans);
        keyNavBeh.setSchedulingBounds(new BoundingSphere(new Point3d(),1000.0));
        sceneObj.addChild(keyNavBeh);

        //Canvas3D c = new Canvas3D(null);
        //PickHighlightBehavior pickBeh = new
                  //PickHighlightBehavior(c, objRoot, bounds);

        BranchGroup  b2 = new addObject();
        objRoot.addChild(b2);
        //System.out.println("br "+b2);
        objRoot.addChild(sceneObj);
        //objRoot.addChild(b2);
        objRoot.compile();
        return objRoot;
        }

    public JPanel presentationPanel() {
   JPanel panel1 = new JPanel();
        etiq1 = new JLabel
        ("Modelisation d'un environnement naturel en 3D / © 2005 cnam ubo");
        panel1.add(etiq1);

        return panel1;
        }
        //fonction ajout d'objet
        private class addObject extends BranchGroup implements ActionListener {
                private addObject () {
                                  this.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
                }
                public void actionPerformed(ActionEvent event){
                      BranchGroup obj = new BranchGroup ();
                      // Création d'une sphère
                      Sphere sphere = new Sphere (0.3f, Sphere.GENERATE_NORMALS, 20);
                      System.out.println(sphere);
                      Transform3D sphereRandromTransform = new Transform3D ();
                      sphereRandromTransform.setTranslation(new Vector3d(randomCoord(),randomCoord(),randomCoord()));
                      TransformGroup sphereTG = new TransformGroup (sphereRandromTransform);
                      sphereTG.addChild(sphere);
                      obj.addChild(sphereTG);
                      this.addChild(obj);
                      System.out.println("action ajout");
                      System.out.println(obj);
                }
        }
        private double randomCoord () {
            double coord = Math.random();
            return coord>=0.5?-coord*5:coord*5;
        }
        public void mouseClicked( MouseEvent e ) {
        }
        public void mouseEntered( MouseEvent e ) {
        }
        public void mouseExited( MouseEvent e ) {
        }
        public void mousePressed( MouseEvent e ) {
        // if (e.getSource()==reset) {
              //setNominalPositionAndOrientation();
        //}
        }
        public void mouseReleased( MouseEvent e ) {
        //mode = STILL;
        }
        public void actionPerformed(ActionEvent e) {
        Object target = e.getSource();
          if (target == couleur) {
            if (couleur.isSelected()){
                //scene.pickBeh;
                }
            }
        }
        public static void main(String[] args) {

             try {
                  //Définition du type d'affichage boite de dialogue
                  //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                  UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
      } catch (Exception exc) {
                  System.err.println("Erreur de chargement L&F: " + exc);
      }
                new Scene3Db();
    }
}

In fact I have this

java.lang.NullPointerException :

   at applet3d.Scene3Db.<init>(Scene3Db.java:66)

   at applet3d.Scene3Db.main(Scene3Db.java:253)

when I want to attach the new object to the main branchgroup
objRoot.addChild(addObjBG);

any idea ?

Offline Jeff

JGO Coder




Got any cats?


« Reply #5 - Posted 2006-01-06 19:26:14 »

Whats at line 66?

(I really dont want to have to manually count your liens and could be off doing that anyway dependign on how the code pasted.)

JK

Got a question about Java and game programming?  Just new to the Java Game Development Community?  Try my FAQ.  Its likely you'll learn something!

http://wiki.java.net/bin/view/Games/JeffFAQ
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

rwatson462 (36 views)
2014-12-15 09:26:44

Mr.CodeIt (29 views)
2014-12-14 19:50:38

BurntPizza (61 views)
2014-12-09 22:41:13

BurntPizza (98 views)
2014-12-08 04:46:31

JscottyBieshaar (58 views)
2014-12-05 12:39:02

SHC (74 views)
2014-12-03 16:27:13

CopyableCougar4 (76 views)
2014-11-29 21:32:03

toopeicgaming1999 (136 views)
2014-11-26 15:22:04

toopeicgaming1999 (127 views)
2014-11-26 15:20:36

toopeicgaming1999 (37 views)
2014-11-26 15:20:08
Resources for WIP games
by kpars
2014-12-18 10:26:14

Understanding relations between setOrigin, setScale and setPosition in libGdx
by mbabuskov
2014-10-09 22:35:00

Definite guide to supporting multiple device resolutions on Android (2014)
by mbabuskov
2014-10-02 22:36:02

List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!