# JAVA3D und die "Kamera"



## Andre Schaaf (21. Okt 2007)

Schönen guten Tag,

nun ich habe irgendwie eine Blockade. Ich möchte gern die "Kamera" im Raum bewegen können mit einem PathInterpolator. Leider ist es mir irgendwie nicht vergönnt.

Ich weis das ich mir mit 

getSimpleUniverse().getViewingPlatform().getViewPlatformTransform()

die Transformgroup des Hauptknotens holen kann und dann darin Translation und Rotation ausführen kann. Das klappt
auch alles soweit. Aber ich habe absolut keine Ahnung wie ich dort einen PathInterpolator reinbringen soll.

Wenn jemand damit erfahrung hat wie man sowas anstellen kann
wäre ich für eine Info/Beispielcode wirklich super dankbar.

So far.

MFG Andre Schaaf


----------



## Andre Schaaf (21. Okt 2007)

Gelöst


----------



## merlin2 (21. Okt 2007)

Poste die Lösung, damit auch andere etwas davon haben.


----------



## Andre Schaaf (21. Okt 2007)

Gut ... mach ich

das ist eine abwandlung eine codebeispiels hier aus dem forum was
ich vorhins gefunden habe

this.camPos=this.camera.getCameraPosition();

	    Alpha alpha=new Alpha(1,duration);
		Transform3D t=new Transform3D();

		alpha.setStartTime(System.currentTimeMillis()+1);		
		//alpha.setTriggerTime(1000);

	      PositionPathInterpolator ppi = new PositionPathInterpolator (alpha, this.camera.getTransformGroup(), new Transform3D(), new float[]{0, 1}, new Point3f[]{
	            new Point3f (this.camPos.x, this.camPos.y, this.camPos.z),  //Ausgangspunkt
	            new Point3f (this.targetPoint.x+(float)(this.objDimension.x/2), this.targetPoint.y+(float)(this.objDimension.y/2), this.targetPoint.z+(float)(2*this.objDimension.z))  //Endpunkt
	         });

	      ppi.setSchedulingBounds(new BoundingSphere());  //Bounds

	      BranchGroup bg = new BranchGroup();

	      bg.setCapability(BranchGroup.ALLOW_DETACH);	      
	      bg.addChild(ppi);

	      this.camera.getTransformGroup().addChild(bg);  //live machen

	      System.out.println(this.camera.getCameraPosition());
	      try {
	         Thread.sleep(duration);  //Auf Alpha warten
	      }
	      catch (Exception ex) {}
	      bg.detach();  //Behavior aus SceneGraph entfernen

	      System.out.println(this.camera.getCameraPosition());

----------

was mir aber nun noch sorgenbereitet ist der winkel der kamera ... um mal zu beschreiben was ich machen möchte

ich möchte gern den sichtvektor der kamera haben da ich sie dann mit den winkeln auf eine bestimmte position drehen kann. aber irgendwie gibts da keine möglichkeit (nach meinem wissen) diesen vektor auszulesen. über transformgroup bekomme ich ja nur den punkt an dem die kamera steht aber nicht in welche richtung sie schaut.

hat das jemand schonmal probiert oder gelöst ? 
wenn ja wie

mfg andre


----------



## merlin2 (22. Okt 2007)

Du kannst aus einer TransformGroup auch die Rotation, nicht nur die Translation auslesen. Siehe API.


----------



## Andre Schaaf (22. Okt 2007)

Also irgendwie werde ich nicht daraus schlau. Wie soll ich denn aus der Transformgroup die Rotation auslesen können ? Die API hat mir dabei nicht wirklich geholfen muss ich mal so sagen.


----------



## Marco13 (23. Okt 2007)

Bei der TransformGroup die Capability "ALLOW_TRANSFORM_READ" setzen, und dann mit "getTransform" die Transform3D rausholen. Da steckt alles drin, auch die Rotation. Nur ein bißchen versteckt :wink:


----------

