Koordinatensystem verschieben?

Status
Nicht offen für weitere Antworten.

thisisme

Mitglied
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:
Code:
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);
		}
[...]
Code:
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);
		}
 
Nein, ich verwende unterschiedliche TransformGroups für die beiden Interaktionen, da ich das lieber trennen wollte.
 
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):

Code:
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);
 
Probier mal - ohne zu testen - das hier:

Code:
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);
 
Super, deine Lösung funktioniert! Hab mir grad mal den Graphen dazu aufgemalt, um den Untreschied zu sehen.

Vielen Dank!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben