Hallo,
Ich habe mich mit dem Interactions-Tutorial von Sun befasst und möchte nun eine ganz einfache Navigation erstellen mit der man sich im SimpleUniverse "bewegen" kann. Dazu habe ich zwei Klassen geschrieben, eine Main und eine Klasse abgeleitet von Behavior. Wie kann ich meine Behavior-Klasse nun in die Main Klasse integrieren damit ich nicht die Objekte sondern die "Kamera" bewege?
Hier der Code (Ich habe ihn vereinfacht damit er übersichtlicher ist):
Ich hoffe Ihr könnt mir helfen. Danke!
Ich habe mich mit dem Interactions-Tutorial von Sun befasst und möchte nun eine ganz einfache Navigation erstellen mit der man sich im SimpleUniverse "bewegen" kann. Dazu habe ich zwei Klassen geschrieben, eine Main und eine Klasse abgeleitet von Behavior. Wie kann ich meine Behavior-Klasse nun in die Main Klasse integrieren damit ich nicht die Objekte sondern die "Kamera" bewege?
Hier der Code (Ich habe ihn vereinfacht damit er übersichtlicher ist):
Code:
package j3d;
import javax.swing.JFrame;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.TransformGroup;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.BoundingSphere;
import javax.vecmath.Point3d;
import com.sun.j3d.utils.geometry.ColorCube;
public class Main {
public static void main(String[] args) {
// Fenster erstellen
JFrame frame = new JFrame("3D Navigation mit Behaviors");
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLocation( 100, 100 );
frame.setSize( 500, 400 );
// Canvas3D-Objekt erstellen
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D( config );
frame.add( canvas );
// SimpleUniverse-Objekt erzeugen
SimpleUniverse universe = new SimpleUniverse( canvas );
universe.getViewingPlatform().setNominalViewingTransform();
// BranchGroup erstellen
BranchGroup objRoot = new BranchGroup();
// Behavior-Objekt
TransformGroup cam = universe.getViewingPlatform().getViewPlatformTransform();
Camera camera = new Camera( cam );
camera.setSchedulingBounds( new BoundingSphere( new Point3d(), 1000 ) );
// Farbwürfel
ColorCube wuerfel = new ColorCube( 0.4 );
objRoot.addChild( wuerfel );
// BranchGroup dem Universum übergeben
universe.addBranchGraph( objRoot );
// Fenster sichtbar machen
frame.setVisible( true );
}
}
Code:
package j3d;
import javax.media.j3d.Behavior;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Transform3D;
import java.awt.event.KeyEvent;
import javax.media.j3d.WakeupOnAWTEvent;
import java.util.Enumeration;
public class Camera extends Behavior {
private TransformGroup targetTG = null;
private Transform3D rotation = new Transform3D();
private double angle = 0.0d;
public Camera( TransformGroup targetTG ) {
// Referenz auf das Object of change
this.targetTG = targetTG;
}
public void initialize() {
// Trigger
this.wakeupOn( new WakeupOnAWTEvent( KeyEvent.KEY_PRESSED ) );
}
public void processStimulus( Enumeration criteria ) {
// Rotieren
angle += 0.1;
rotation.rotY( angle );
targetTG.setTransform( rotation );
// Trigger
this.wakeupOn( new WakeupOnAWTEvent( KeyEvent.KEY_PRESSED ) );
}
}
Ich hoffe Ihr könnt mir helfen. Danke!