# [JAVA3D] Es werden 2 Fenster erzeugt und auf dem falschen gezeichnet



## Deception (16. Sep 2010)

Hey,
mein Problem besteht darin, dass ich ein Frame erzeuge, ihm den Canvas3D hinzufüge und ihn dann Visible setze.
Zuerst startet ein kleines Bild mit den Bildobjekten darin und ich kann ein Objekt auch super in der Welt bewegen. Der eigentlich Frame startet allerdings als extra Fenster in der von mir gewünschten Größe, ohne das Canvas3D.
Ich habe es eigentlich wie in den Tutorials gemacht und bin das auch schon einige mal durchgegangen, aber finde den Fehler nicht. Google und die Forensuche konnte mir leider auch nicht weiterhelfen.
Hier der Quelltext (absichtlich alles, vllt liegt ja der Fehler irgendwo, wo ich ihn nicht vermute. )

```
public class BehaviorStarting extends Applet
{

	private SimpleUniverse universe;
	private BranchGroup _rootbg;
	
	public BehaviorStarting()
	{
		super();
		initializeUniverse();
		initializeFrame();
		_rootbg = erzeugeSzenenGraph();
		_rootbg.compile();
		universe.addBranchGraph(_rootbg);

	}
	private TransformGroup erzeugeTeddy()
	{
		TransformGroup transGroup = new TransformGroup();
		Transform3D scale = new Transform3D();
		Transform3D translate = new Transform3D();
		scale.set(0.2);
		translate.setTranslation(new Vector3d(0.0,0.5,0.0));
		scale.mul(translate);
		transGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE | TransformGroup.ALLOW_COLLIDABLE_WRITE | TransformGroup.ALLOW_COLLIDABLE_READ);
		BranchGroup teddy = loadBGFromFile("teddy");
		teddy.addChild(erzeugeLicht(new Color3f(0.5f,0.5f,0.5f)));
		
		transGroup.addChild(teddy);
		transGroup.setTransform(scale);
		return transGroup;
	}
	private TransformGroup erzeugeWelt()
	{
		TransformGroup worldGroup = new TransformGroup();
		Transform3D translate = new Transform3D();
		translate.setTranslation(new Vector3d(0.0,-0.5,0.0));
		BranchGroup world = loadBGFromFile("worldtests_Scene");
		world.addChild(erzeugeLicht(new Color3f(1.0f,1.0f,1.0f)));
		worldGroup.setCapability(TransformGroup.ALLOW_COLLIDABLE_WRITE | TransformGroup.ALLOW_COLLIDABLE_READ);
		worldGroup.setTransform(translate);
		worldGroup.addChild(world);
		return worldGroup;
	}
	private BranchGroup erzeugeSzenenGraph()
	{
		BranchGroup root = new BranchGroup();
		TransformGroup teddy = erzeugeTeddy();
		
		//KeyNavigatorBehavior behave = new KeyNavigatorBehavior(teddy);
		MyKeyBehavior behave = new MyKeyBehavior(teddy);
		behave.setViewingPlatform(universe.getViewingPlatform());
		behave.setSchedulingBounds(new BoundingSphere(new Point3d(),1000.0));
		behave.setSchedulingBounds(new BoundingSphere());
		root.addChild(erzeugeWelt());
		root.addChild(behave);
		root.addChild(teddy);
		root.addChild(setupLight());
		return root;
	}
	private AmbientLight setupLight()
	{
		BoundingSphere bounds = new BoundingSphere (new Point3d (0.0, 0.0, 0.0), 100.0);
      	Color3f ambientColor = new Color3f (0.5f, 0.5f, 0.5f);
      	AmbientLight ambientLightNode = new AmbientLight (ambientColor);
      	ambientLightNode.setInfluencingBounds (bounds);
      	return ambientLightNode;
	}
	private void initializeFrame()
	{
		setLayout(new BorderLayout());
		GraphicsConfiguration gc = SimpleUniverse.getPreferredConfiguration();
		Canvas3D canvas = new Canvas3D(gc);
		add("Center", canvas);
	}
	private void initializeUniverse()
	{
		this.universe = new SimpleUniverse();
		universe.getViewingPlatform().setNominalViewingTransform();
	}
	private BranchGroup loadBGFromFile(String s)
	{
		Scene m = null;
		ObjectFile loader = new ObjectFile();
		loader.setFlags (ObjectFile.RESIZE | ObjectFile.TRIANGULATE | ObjectFile.STRIPIFY);

		try
		{
			m = loader.load("data/"+s+".obj");
		}
		catch(Exception e)
		{
			
		}
		
		BranchGroup g = m.getSceneGroup();
		return g;
	}
	private DirectionalLight erzeugeLicht(Color3f farbe)
	{
		DirectionalLight d_Licht = new DirectionalLight(
				farbe, new Vector3f (-1.0f, -1.0f, -1.0f));
		d_Licht.setInfluencingBounds (new BoundingSphere (new Point3d(0.0d,0.0d,0.0d), 100.0d));
		return d_Licht;
	}
	public static void main(String[] args)
	{
		new MainFrame(new BehaviorStarting(),500,500);
		
	}
}
```
Hoffe mein Fehler ist erkennbar und mir kann jemand helfen, da ich langsam mit größeren Welten umgehen will. 
Liebe Grüße,
Jens


----------



## Marco13 (16. Sep 2010)

:autsch: Schräg :autsch: Dem SimpleUniverse muss im Konstruktor der Canvas übergeben werden (das muss also beides in eine Methode). Warum auch immer er da ansonsten dieses alberne zweite Fenster aufmacht... ???:L :bahnhof:


----------



## truesoul (17. Sep 2010)

Hallo, 

der Grund wird wohl daran liegen das du dem SimpleUniverse nirgends wo das Cancas3D Objekt übergibts.

```
universe = new SimpleUniverse(Canvas3D);
```
Da du aber das Canvas3D Objekt dem Fenster übergibt macht er wohl dieses seperat auf , was wirklich Schräg ist.  :autsch:

EDIT:
Oops , guten Morgen ... das schrieb schon der Marco , naja , der Kaffee wirkt noch nicht 

MFg


----------



## Deception (20. Sep 2010)

Danke ihr 2  das hat alles gelöst!


----------

