# Koordinatensystem verschieben?



## thisisme (30. Dez 2006)

Hallo zusammen!

Ich hab mal eine Verständnisfrage:

in meiner ViewPlatform hab ich doch ein Koordinatensystem, das für mein 3D-Objekt (z.B. den ColorCube) den Bezugspunkt darstellt oder? Wenn ich meinen Würfel jetzt verschieb scheint das Koordinatensystem in der alten Position zu bleiben, richtig? Ich habe nämlich das Problem, dass sich mein Würfel noch um die alte Achsenposition dreht, wenn ich ihn erst verschieb und anschließend drehe. 

Hier mal Ausschnitte aus meinen 2 Behavior-Klassen:

```
private class MyMovement extends Behavior {

		private TransformGroup targetTG;
		private Transform3D trans = new Transform3D();
		private double move = 0.0; 

		@Override
		public void initialize() { ...}
		
		private void moveLeft() {
			move += 0.1;
			trans.setTranslation(new Vector3d(move, 0, 0));
			targetTG.setTransform(trans);
		}
[...]
```


```
privateclass MyRotation extends Behavior {

		private TransformGroup targetTG;
		private Transform3D trans = new Transform3D();
		private Transform3D transTemp = new Transform3D();
		private double angle = 0.0;
	
		@Override
		public void initialize() {...}
		
		private void rotateY() {
			angle += 0.01; 		 
			trans.rotY(angle); 
			trans.mul(transTemp);
			targetTG.setTransform(trans);
		}
```


----------



## Illuvatar (30. Dez 2006)

Ist die targetTG beides Mal die gleiche?


----------



## thisisme (31. Dez 2006)

Nein, ich verwende unterschiedliche TransformGroups für die beiden Interaktionen, da ich das lieber trennen wollte.


----------



## Illuvatar (1. Jan 2007)

Das ist eigentlich auch gut so... und die Rotation hängt unterhalb der Verschiebung?


----------



## thisisme (1. Jan 2007)

Im Moment hab ich es so (da ist jetzt noch eine 3. TranformGroup (zoom) dazwischen, die hat mit dem Problem aber eigentlich nichts zu tun):


```
BranchGroup objRoot = new BranchGroup();
TransformGroup objRotate = new TransformGroup();
TransformGroup objZoom = new TransformGroup();
TransformGroup objMove = new TransformGroup();

ColorCube cube = new ColorCube(0.3);
objMove.addChild(cube);
		
objZoom.addChild(objMove);
objRotate.addChild(objZoom);
objRoot.addChild(objRotate);
		
// rotation erstellen
MyRotation rotate = new MyRotation(objRotate);
rotate.setSchedulingBounds(new BoundingSphere());
		
// zoom erstellen
MyZoom zoom = new MyZoom(objZoom);
zoom.setSchedulingBounds(new BoundingSphere());
		
// move erstellen
MyMovement move = new MyMovement(objMove);
move.setSchedulingBounds(new BoundingSphere());
		
// alle zur Wurzel hinzufuegen
objRoot.addChild(rotate);
objRoot.addChild(zoom);
objRoot.addChild(move);
```


----------



## Illuvatar (5. Jan 2007)

Probier mal - ohne zu testen - das hier:


```
BranchGroup objRoot = new BranchGroup(); 
TransformGroup objRotate = new TransformGroup(); 
TransformGroup objZoom = new TransformGroup(); 
TransformGroup objMove = new TransformGroup(); 

ColorCube cube = new ColorCube(0.3); 
objZoom.addChild(cube); 
       
objRotate.addChild(objZoom); 
objMove.addChild(objRotate); 
objRoot.addChild(objMove); 
       
// rotation erstellen 
MyRotation rotate = new MyRotation(objRotate); 
rotate.setSchedulingBounds(new BoundingSphere()); 
       
// zoom erstellen 
MyZoom zoom = new MyZoom(objZoom); 
zoom.setSchedulingBounds(new BoundingSphere()); 
       
// move erstellen 
MyMovement move = new MyMovement(objMove); 
move.setSchedulingBounds(new BoundingSphere()); 
       
// alle zur Wurzel hinzufuegen 
objRotate.addChild(rotate); 
objZoom.addChild(zoom); 
objMove.addChild(move);
```


----------



## thisisme (6. Jan 2007)

Super, deine Lösung funktioniert! Hab mir grad mal den Graphen dazu aufgemalt, um den Untreschied zu sehen. 

Vielen Dank!


----------

