Hi !

I'm getting weird behavior while using BackgroundBehavior :
When creating the Background and adding it to the SceneGraph it is
rendered ok, but
when removing it and adding it again, the background is white.

Anybody any idea what is happening !?! (sourcecode reproducing this
problem attached).

thnx,
  Niklas
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.net.MalformedURLException;
import java.net.URL;

import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.GraphicsConfigTemplate3D;
import javax.media.j3d.Group;
import javax.media.j3d.Locale;
import javax.media.j3d.PhysicalBody;
import javax.media.j3d.PhysicalEnvironment;
import javax.media.j3d.RenderingAttributes;
import javax.media.j3d.View;
import javax.media.j3d.ViewPlatform;
import javax.media.j3d.VirtualUniverse;

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

import javax.vecmath.Point3d;

import javax.swing.JWindow;

public class Test {

  public void run() {
    GraphicsConfigTemplate3D tmpl = new GraphicsConfigTemplate3D();
    GraphicsEnvironment env       = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice device         = env.getDefaultScreenDevice();
    GraphicsConfiguration config  = device.getBestConfiguration(tmpl);
    Canvas3D canvas3d = new Canvas3D(config);
    VirtualUniverse vr = new VirtualUniverse();
    BranchGroup world_object_group = new BranchGroup();
    world_object_group.setCapability(Group.ALLOW_CHILDREN_READ);
    world_object_group.setCapability(Group.ALLOW_CHILDREN_WRITE);
    world_object_group.setCapability(Group.ALLOW_CHILDREN_EXTEND);

    PhysicalBody body          = new PhysicalBody();
    PhysicalEnvironment phyenv = new PhysicalEnvironment();
    View view = new View();
    view.setPhysicalBody(body);
    view.setPhysicalEnvironment(phyenv);
    view.addCanvas3D(canvas3d);

    Locale locale = new Locale(vr);
    locale.addBranchGraph(world_object_group);

    MyWorld world1 = new MyWorld();

    JWindow window = new JWindow();
    window.getContentPane().add(canvas3d);
    window.pack();
    window.validate();
    window.setSize(new Dimension(400, 400));
    window.show();

    ViewPlatform viewplatform1 =  world1.getView();
    BranchGroup worldGroup1 = world1.getWorldObjects();

    world_object_group.addChild(worldGroup1);

    view.attachViewPlatform(viewplatform1);
    try {
      synchronized(this) {
        this.wait(5000);
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    world_object_group.removeChild(0);
    world_object_group.addChild(worldGroup1);
  }

  public static void main(String[] args) {
    new Test().run();
  }

  private class MyWorld {
    ViewPlatform platform;
    BranchGroup worldobjects;

    public MyWorld() {
      platform = new ViewPlatform();
      worldobjects = new BranchGroup();
      worldobjects.setCapability(BranchGroup.ALLOW_DETACH);
      worldobjects.addChild(platform);
      Background background = new Background(1.0f, 0.0f, 0.0f);
      background.setApplicationBounds(new BoundingSphere(new Point3d(0.0,0.0,0.0), 
100.0));
      BranchGroup backGeoBranch = new BranchGroup();
      Sphere sphereObj = new Sphere(1.0f, Sphere.GENERATE_NORMALS |
                                                      Sphere.GENERATE_NORMALS_INWARD |
                                                            
Sphere.GENERATE_TEXTURE_COORDS, 45);
      backGeoBranch.addChild(sphereObj);
      background.setGeometry(backGeoBranch);
      worldobjects.addChild(background);
    }

    public ViewPlatform getView() {
      return platform;
    }

    public BranchGroup getWorldObjects() {
      return worldobjects;
    }
  }
}

Reply via email to