# PositionPathInterpolator



## Illuvatar (4. Aug 2004)

Ich benutze in meinem Programm folgende Methode(n):

```
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?


----------



## Illuvatar (7. Aug 2004)

*push*


----------



## nagash56 (9. Aug 2004)

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

```
new Alpha(1 , Alpha.INCREASING_ENABLE, 0,0, 3500, 1000, 500, 3500, 1000,500)
```


----------



## Illuvatar (10. Aug 2004)

Mit 
	
	
	
	





```
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 (10. Aug 2004)

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..

```
ppi.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 1000);
```


----------



## Illuvatar (10. Aug 2004)

Nein, das ist es leider nicht.
Der Interpolator wird ja auch an die viewPlatformTransform - TransformGroup angehängt.


----------

