RotationInterpolator und Winkel

Status
Nicht offen für weitere Antworten.

alexey

Mitglied
Hallo!
ich habe eine Kugel und RotationInterpolator. Der Rotator dreht die Kugel. ich will jede z.B. 50ms nach Winkel abfragen. Kann ich das herausfinden, wenn ich nur Link zum Rotator habe?
Danke im Voraus!
 

Developer_X

Top Contributor
das geht damit leider nicht, das ist das blöde daran, aber versuchs mal in einem Thread wie hier:
Java:
float rotation;
Transform3D Transform3DA= new Transform3D();
Transform3DA.rotY(Math.toRadians(rotation));
TransformGroup TransformGroupA = new TransformGroup();
TransformGroupA.setTransform(Transform3DA);
Sphere sphere = new Sphere();
TransformGroupA.addChild(sphere);
	     TransformGroupA.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);	
                  
                  (new Thread(){@Override public void run(){while(!isInterrupted()){      	              
////////////////////////////////////////////////	
	                
					rotation = rotation + 0.005f;	              
	   				Transform3DA.rotY(Math.toRadians(rotation);
	   				TransformGroupA.setTransform(Transform3DA);
	   			System.out.println("Siehste, alle 50 millisekunden");
////////////////////////////////////////////////	   				
try{sleep(50);}catch(InterruptedException e){interrupt();}}}}).start();
//IrgendeineBranchGroup.addChild(TransformGroupA);
 

Noctarius

Top Contributor
das geht damit leider nicht, das ist das blöde daran, aber versuchs mal in einem Thread wie hier:
Java:
float rotation;
Transform3D Transform3DA= new Transform3D();
Transform3DA.rotY(Math.toRadians(rotation));
TransformGroup TransformGroupA = new TransformGroup();
TransformGroupA.setTransform(Transform3DA);
Sphere sphere = new Sphere();
TransformGroupA.addChild(sphere);
	     TransformGroupA.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);	
                  
                  (new Thread(){@Override public void run(){while(!isInterrupted()){      	              
////////////////////////////////////////////////	
	                
					rotation = rotation + 0.005f;	              
	   				Transform3DA.rotY(Math.toRadians(rotation);
	   				TransformGroupA.setTransform(Transform3DA);
	   			System.out.println("Siehste, alle 50 millisekunden");
////////////////////////////////////////////////	   				
try{sleep(50);}catch(InterruptedException e){interrupt();}}}}).start();
//IrgendeineBranchGroup.addChild(TransformGroupA);

Jetzt tu bitte sowas nicht auch noch anderen an!
 

alexey

Mitglied
Danke für die Antworten. leider muss man das unbedingt mit Hilfe eines Interpolators erledigen. Ich habe so verstanden, ohne Link zur Kugel, geht das nicht. Und wenn ich doch Zugang zur Kugel habe? Und noch eine Frage: kann mir jemand erklären: wie so doch geht das nicht ohne Link zur Kugel? Interpolator hat doch eigene Matrix, die er ändert....
 

Illuvatar

Top Contributor
Mit TransformInterpolator#getTarget kommst du an die TransformGroup und damit auch an das momentane Transform3D-Objekt.
TransformInterpolator (Java 3D 1.5.1)
Daraus den Winkel abzufragen wird allerdings weniger einfach - kommt auch darauf an, ob du die Drehachse kennst, ob die Drehung orthogonal zur Achse verläuft etc. (zumindest bei der einzigen Möglichkeit das zu berechnen die mir gerade einfällt)
Einfacher vermutlich: Hol dir das Alpha-Objekt per getAlpha. Den Winkel müsstest du dann per
Code:
winkel = startWinkel * (1 - alpha.getValue()) + endWinkel * alpha.getValue();
erhalten - der Winkel wird schließlich nach genau diesem Wert linear interpoliert.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben