PositionPathInterpolator

Status
Nicht offen für weitere Antworten.

Illuvatar

Top Contributor
Ich benutze in meinem Programm folgende Methode(n):
Code:
public void moveCameraToStandard ()
	{
		moveCameraToPoint (new Point3f (0, 0, 40));
	}
	private void moveCameraToPoint (Point3f p)
	{
		Transform3D act = new Transform3D(); //Früherer Transform der "Kamera"
		simpleU.getViewingPlatform().getViewPlatformTransform().getTransform(act);
		Vector3f p2 = new Vector3f();  //Vector mit den Koordinaten des früheren Transforms
		act.get (p2);
		PositionPathInterpolator ppi = new PositionPathInterpolator (new Alpha (1, 3500),  //3500ms?
			simpleU.getViewingPlatform().getViewPlatformTransform(),
			new Transform3D(),
			new float[]{0, 1},
			new Point3f[]{
				new Point3f (p2.x, p2.y, p2.z),  //Ausgangspunkt
				new Point3f (p.x, p.y, p.z)  //Endpunkt
			});
		ppi.setSchedulingBounds(new BoundingSphere());  //Bounds
		BranchGroup bg = new BranchGroup();
		bg.setCapability(bg.ALLOW_DETACH);
		bg.addChild(ppi);
		simpleU.getViewingPlatform().getViewPlatformTransform().addChild(bg);  //live machen
		System.out.println (ppi.getAlpha().finished());  //Ausgabe: true
		try {
			Thread.sleep(4000);  //Auf Alpha warten
		}
		catch (Exception ex) {}
		bg.detach();  //Behavior aus SceneGraph entfernen
	}
Trotz den im Alpha eingestellten 3500ms macht die Kamera einen "Sprung" an den Zielpunkt. Ich dachte aber der PositionPathInterpolator würde das Objekt "langsam" zum Zielort bringen. Liege ich da falsch? Oder habe ich irgendeinen Fehler drin?
 

nagash56

Aktives Mitglied
Ich glaub du musst für dein Alpha einen anderen Konstruktor wählen oder den Wert per Methode setzen. Das Beschleunigen am Anfang bzw. Verlangsamen am Ende ist die increasingAlphaRampDuration... siehe API.

probiers mal mit
Code:
new Alpha(1 , Alpha.INCREASING_ENABLE, 0,0, 3500, 1000, 500, 3500, 1000,500)
 

Illuvatar

Top Contributor
Mit
Code:
new Alpha(3, 0, 0, 3500, 1500, 0)
wird die Bewegung so ausgeführt wie ich will...
allerdings nur einmal (mit wenigre als 3 im Konstruktor hab ich das oben beschriebene Problem) und nur , wenn ich die Methode das erste Mal ausführe, danach tut sich gar nix mehr.
 

nagash56

Aktives Mitglied
Ok dann rat ich jetzt mal ins blaue:

Du erzeugst für deinen PositionPathinterpolator eine Standardboundingsphere mit Radius 1... Und wenn du die Kamera bewegst ist sie außerhalb dieser Kugel (nach dem ersten Methodenaufruf) und deswegen tut sich danach nix mehr? *shrug* Also vielleicht gehts wenn die BoundingSphere größer machst..
Code:
ppi.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 1000);
 

Illuvatar

Top Contributor
Nein, das ist es leider nicht.
Der Interpolator wird ja auch an die viewPlatformTransform - TransformGroup angehängt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben