Hallo zusammen,
ich bin relativer Anfänger in Java3D und hab folgendes Problem:
Ich entwickle zur Zeit ein Sonnensystem mit den verschiedene Planeten, deren Monden und der Sonne. Zur Ansicht des Universums verwendet ich eine Kamera die 2 Behavoirs besitzt (zum bewegen und zum schauen). Mit dieser Kamera kann ich mich momentan frei im Universum bewegen.
Nun möchte ich per Tastendruck(auf Tastendrücke kann ich schon reagieren ;-)). die Kamera so verändern, daß sie so positioniert ist, daß sie auf einen Planeten Richtung Sonne schaut, also sagen wir hinter einem Planeten instaliert ist.
Also 1) Wie kann ich also zwischen den verschiedenen Ansicht auf die Planeten und der normalen freibeweglichen Kamera hin und her wechseln?
und 2) Wie bekomm ich es hin, daß die Kamera in der "Planetenansicht" immer mit dem Planeten mitwandert und auf die Sonne gerichtet ist?
zum Verständnis hier meine Klasse Kamera:
die 3 Behaviors sind von Behavior abgeleitete Klassen.
[HIGHLIGHT="Java"]public class Camera extends BranchGroup {
private TransformGroup transformGroup;
FreeLookBehavior freeLookBehavior = null;
FreeMoveBehavior freeMoveBehavior = null;
PlanetLookBehavior planetLookBehavior = null;
////////////////////////////////////////////////////////////////////////////
public Camera(TransformGroup tg) {
transformGroup = tg;
enableFreeCamera();
}
////////////////////////////////////////////////////////////////////////////
public void enableFreeCamera(/*SimpleUniverse u*/) {
resetCamera(); // Kamera neu initialisieren
// Initialisierung der Behaviors
freeLookBehavior = new FreeLookBehavior(transformGroup);
this.addChild(freeLookBehavior);
freeLookBehavior.setSchedulingBounds(Universe.BigBounds);
freeLookBehavior.setEnable(true);
freeMoveBehavior = new FreeMoveBehavior(transformGroup);
this.addChild(freeMoveBehavior);
freeMoveBehavior.setSchedulingBounds(Universe.BigBounds);
freeMoveBehavior.setEnable(true);
}
////////////////////////////////////////////////////////////////////////////
public void enablePlanetCamera(/*int PlanetId oder BranchGroup Planet ?*/) {
// ... psoitionierung der Kamera wie bewerkstäligen ?
}
////////////////////////////////////////////////////////////////////////////
public FreeLookBehavior getLookBehavior() {
return freeLookBehavior;
}
////////////////////////////////////////////////////////////////////////////
public FreeMoveBehavior getMoveBehavior() {
return freeMoveBehavior;
}
////////////////////////////////////////////////////////////////////////////
public void setActivateLookBehavior(boolean active) {
freeLookBehavior.setEnable(active);
}
////////////////////////////////////////////////////////////////////////////
public void setActivateMoveBehavior(boolean active) {
freeMoveBehavior.setEnable(active);
}
////////////////////////////////////////////////////////////////////////////
public void setSpeed(double speed) {
freeMoveBehavior.setSpeed(speed);
}
////////////////////////////////////////////////////////////////////////////
public double getSpeed() {
return freeMoveBehavior.getSpeed();
}
////////////////////////////////////////////////////////////////////////////
private void resetCamera() {
freeMoveBehavior.setEnable(false);
freeLookBehavior.setEnable(false);
planetLookBehavior.setEnable(false);
this.removeChild(freeLookBehavior);
this.removeChild(freeMoveBehavior);
this.removeChild(planetLookBehavior);
}
}[/HIGHLIGHT]
ich bin relativer Anfänger in Java3D und hab folgendes Problem:
Ich entwickle zur Zeit ein Sonnensystem mit den verschiedene Planeten, deren Monden und der Sonne. Zur Ansicht des Universums verwendet ich eine Kamera die 2 Behavoirs besitzt (zum bewegen und zum schauen). Mit dieser Kamera kann ich mich momentan frei im Universum bewegen.
Nun möchte ich per Tastendruck(auf Tastendrücke kann ich schon reagieren ;-)). die Kamera so verändern, daß sie so positioniert ist, daß sie auf einen Planeten Richtung Sonne schaut, also sagen wir hinter einem Planeten instaliert ist.
Also 1) Wie kann ich also zwischen den verschiedenen Ansicht auf die Planeten und der normalen freibeweglichen Kamera hin und her wechseln?
und 2) Wie bekomm ich es hin, daß die Kamera in der "Planetenansicht" immer mit dem Planeten mitwandert und auf die Sonne gerichtet ist?
zum Verständnis hier meine Klasse Kamera:
die 3 Behaviors sind von Behavior abgeleitete Klassen.
[HIGHLIGHT="Java"]public class Camera extends BranchGroup {
private TransformGroup transformGroup;
FreeLookBehavior freeLookBehavior = null;
FreeMoveBehavior freeMoveBehavior = null;
PlanetLookBehavior planetLookBehavior = null;
////////////////////////////////////////////////////////////////////////////
public Camera(TransformGroup tg) {
transformGroup = tg;
enableFreeCamera();
}
////////////////////////////////////////////////////////////////////////////
public void enableFreeCamera(/*SimpleUniverse u*/) {
resetCamera(); // Kamera neu initialisieren
// Initialisierung der Behaviors
freeLookBehavior = new FreeLookBehavior(transformGroup);
this.addChild(freeLookBehavior);
freeLookBehavior.setSchedulingBounds(Universe.BigBounds);
freeLookBehavior.setEnable(true);
freeMoveBehavior = new FreeMoveBehavior(transformGroup);
this.addChild(freeMoveBehavior);
freeMoveBehavior.setSchedulingBounds(Universe.BigBounds);
freeMoveBehavior.setEnable(true);
}
////////////////////////////////////////////////////////////////////////////
public void enablePlanetCamera(/*int PlanetId oder BranchGroup Planet ?*/) {
// ... psoitionierung der Kamera wie bewerkstäligen ?
}
////////////////////////////////////////////////////////////////////////////
public FreeLookBehavior getLookBehavior() {
return freeLookBehavior;
}
////////////////////////////////////////////////////////////////////////////
public FreeMoveBehavior getMoveBehavior() {
return freeMoveBehavior;
}
////////////////////////////////////////////////////////////////////////////
public void setActivateLookBehavior(boolean active) {
freeLookBehavior.setEnable(active);
}
////////////////////////////////////////////////////////////////////////////
public void setActivateMoveBehavior(boolean active) {
freeMoveBehavior.setEnable(active);
}
////////////////////////////////////////////////////////////////////////////
public void setSpeed(double speed) {
freeMoveBehavior.setSpeed(speed);
}
////////////////////////////////////////////////////////////////////////////
public double getSpeed() {
return freeMoveBehavior.getSpeed();
}
////////////////////////////////////////////////////////////////////////////
private void resetCamera() {
freeMoveBehavior.setEnable(false);
freeLookBehavior.setEnable(false);
planetLookBehavior.setEnable(false);
this.removeChild(freeLookBehavior);
this.removeChild(freeMoveBehavior);
this.removeChild(planetLookBehavior);
}
}[/HIGHLIGHT]
Zuletzt bearbeitet von einem Moderator: