Hi Volks,
wer sich ein wenig mit Java3D beschäftigt hat, dem ist bestimmt das folgende Bildchen bekannt:
Der Einstieg in Java3D ist zu Beginn etwas mühselig. Um es dem Neuling etwas zu erleichtern, haben die Java3D-Entwickler einige Hilfsklassen zur Verfügung gestellt. Das oben dargestellte Bild zeigt einen eleganten Weg den sonst etwas aufwendig zu programmierenden Sichtzweig einfach abzukürzen. Dafür wird die Hilfsklasse SimpleUniverse angeboten. Ein Großteil des im Bild gestrichelten Bereiches wird hier mit sinnvollen Voreinstellungen in einer Klasse beschrieben. Um das so minimalistisch erzeugte Universum zu füllen, ist nun der Inhaltszweig (linker Bereich, ausserhalb des gestrichelten Bereiches) mit geometrischen Körpern zu bestücken. Ein geometrischer Körper ist jedoch erst sichtbar, wenn man ihn mit gewissen Aussehenseigenschaften gekoppelt hat. Um auch hier die Sache etwas abzukürzen, finden wir eine weitere Hilfsklasse in Form einer ColorCube. Diese ColorCube beinhaltet also Geometrie und Aussehen in einem Objekt. Mit dieser Kenntnis sind wir nun in der Lage ein einfaches Java3D-Programm zu erstellen. Das folgende Programm nutzt die oben erwähnten Hilfsklassen zuzüglich eines einfachen Maus-Verhaltens.
Wie kann ich die Sache laufen lassen?
- Ueberpruefe, ob Du das Java3D-SDK und die Java3D-JRE korrekt installiert hast.
- Schreibe den Code in eine Datei mit dem Namen "MySimpleUniverse.java".
- Gehe in die Eingabeaufforderung und compiliere den Code mit "javac MySimpleUniverse.java".
- Fuehre den Bytecode aus mit "java MySimpleUniverse".
Das Ergebnis sollte aehnlich diesem Bild aussehen:
Versuche jetzt mit der linken Maustaste den Wuerfel zu drehen!
So, ich hoffe die Neugier etwas geschürt zu haben und freue mich über mehr Diskussionen im Java3D-Bereich.
hoon
PS: Nächster Beitrag: VirtualUniverse :roll:
wer sich ein wenig mit Java3D beschäftigt hat, dem ist bestimmt das folgende Bildchen bekannt:
Der Einstieg in Java3D ist zu Beginn etwas mühselig. Um es dem Neuling etwas zu erleichtern, haben die Java3D-Entwickler einige Hilfsklassen zur Verfügung gestellt. Das oben dargestellte Bild zeigt einen eleganten Weg den sonst etwas aufwendig zu programmierenden Sichtzweig einfach abzukürzen. Dafür wird die Hilfsklasse SimpleUniverse angeboten. Ein Großteil des im Bild gestrichelten Bereiches wird hier mit sinnvollen Voreinstellungen in einer Klasse beschrieben. Um das so minimalistisch erzeugte Universum zu füllen, ist nun der Inhaltszweig (linker Bereich, ausserhalb des gestrichelten Bereiches) mit geometrischen Körpern zu bestücken. Ein geometrischer Körper ist jedoch erst sichtbar, wenn man ihn mit gewissen Aussehenseigenschaften gekoppelt hat. Um auch hier die Sache etwas abzukürzen, finden wir eine weitere Hilfsklasse in Form einer ColorCube. Diese ColorCube beinhaltet also Geometrie und Aussehen in einem Objekt. Mit dieser Kenntnis sind wir nun in der Lage ein einfaches Java3D-Programm zu erstellen. Das folgende Programm nutzt die oben erwähnten Hilfsklassen zuzüglich eines einfachen Maus-Verhaltens.
Code:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import javax.media.j3d.*;
public class MySimpleUniverse extends Applet
{
// Inhaltszweig
public BranchGroup erzeugeInhalt()
{
// Erzeugen einer (Wurzel)Gruppe die den geamten Inhalt des Universum aufnehmen soll
BranchGroup inhalt = new BranchGroup();
// Erzeugen eines geometrischen Objektes inklusive voreingestellten Aussehens
ColorCube farbigerWuerfel = new ColorCube(0.4);
// Erzeugen einer Transformgruppe mit Zugriffsrechten fuer Maussteuerung
TransformGroup tg = new TransformGroup();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// Gebe dem verwaisten Wuerfel drehfreudige Eltern
tg.addChild(farbigerWuerfel);
// Erzeuge ein Mausdrehobjekt in einem geplanten Bereich mit Ziel-Transformgruppe
MouseRotate rotor = new MouseRotate();
rotor.setSchedulingBounds(new BoundingSphere());
rotor.setTransformGroup(tg);
// Einhaengen der Transformgruppe und des Mausverhaltens in die Wurzelgruppe
inhalt.addChild(tg);
inhalt.addChild(rotor);
// Optimiert den gesamten Inhaltszweig - nicht unbedingt erforderlich
inhalt.compile();
return inhalt; // Los, gibs mir!
}
// Sichtzweig
public SimpleUniverse erzeugeSicht()
{
// Erzeugen eines minimalen virtuellen Universums mit Hilfe der SimpleUniverse-Klasse
SimpleUniverse minimalesUniversum = null;
// Besorgen der besten Konfiguration hinsichtlich der
// Anzeigeumgebung (Farbtiefe, Tranzparenzwerte der Pixel, ...)
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
// Erzeugen des aeusserst schweren Anzeigeflaeche-Objektes
Canvas3D canvas3d = new Canvas3D(config);
// Hinzufügen der Anzeigeflaeche zum Clientbereich des Fensters
add(canvas3d);
// Uebergabe des Canvas3D-Objekts als Anzeigeflaeche
minimalesUniversum = new SimpleUniverse(canvas3d);
// setNominalViewingTransform() stellt den Betrachter 2,41m auf die positive
// z-Achse mit Sichtrichtung nach unten in negative z-Achse
minimalesUniversum.getViewingPlatform().setNominalViewingTransform();
return minimalesUniversum; // Her mit dem Mist!
}
// Diese Methode wird vom Browser beim Laden des Applets aufgerufen.
public void init()
{
// Erzeuge neues Layout für Container
setLayout(new BorderLayout());
// Sei Gott und erzeuge ein minimales Universum mit Sicht auf den Inhalt
SimpleUniverse su = erzeugeSicht();
// Sei Gott und erzeuge den Inhalt des Universums mit Maussteuerung
BranchGroup suInhalt = erzeugeInhalt();
// Es werde Licht! - verbindet Universum inklusive Sicht mit Inhalt
su.addBranchGraph(suInhalt);
}
// Startpunkt fuer die Laufzeitumgebung
public static void main(String[] args)
{
new MainFrame(new MySimpleUniverse(), 800, 600);
}
}
Wie kann ich die Sache laufen lassen?
- Ueberpruefe, ob Du das Java3D-SDK und die Java3D-JRE korrekt installiert hast.
- Schreibe den Code in eine Datei mit dem Namen "MySimpleUniverse.java".
- Gehe in die Eingabeaufforderung und compiliere den Code mit "javac MySimpleUniverse.java".
- Fuehre den Bytecode aus mit "java MySimpleUniverse".
Das Ergebnis sollte aehnlich diesem Bild aussehen:
Versuche jetzt mit der linken Maustaste den Wuerfel zu drehen!
So, ich hoffe die Neugier etwas geschürt zu haben und freue mich über mehr Diskussionen im Java3D-Bereich.
hoon
PS: Nächster Beitrag: VirtualUniverse :roll: