Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D Ziel der Vorlesung Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D Relativ „einfache“ 3D-Programmierung Volle Programmkontrolle in der virtuellen Welt Wahl eines zentralen Themas für Beispiele: Virtuelles Haus? Raumschiffe im Weltraum? anderes Thema?
Inhalt der Vorlesung Grundlagen von Java3D Darstellung der Geometrie unterschiedlicher Formen Automatisches Erzeugen einer Geometrie Interaktion mit der virtuellen Welt Animation Licht Texturen
Material zur Vorlesung Unterlagen Java3D Tutorial Java3D API Dokumentation (Java Verzeichnis) Skript Folien Entwicklungsumgebung JDK 1.4: S:\Dozenten\GOEBEL\Programm\java Java3D: S:\Dozenten\GOEBEL\Programm\java\jre\lib\ext Wichtig: Benötigte Packages importieren
Erzeugung eines Szenengraphen als virtuelle Welt Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe eines Renderer Der Renderer: ist kein Java-Programm nutzt Hardware-Unterstützung für die effiziente Darstellung von 3D Grafiken Die Geschwindigkeit der Darstellung ist weitgehend unabhängig von der Effizienz des Benutzerprogramms.
Szenengraph: Aufbau
Szenengraph: Darstellung Die Klasse JFrame mit einem Objekt der Klasse Canvas3D stellt einen Szenengraph dar. Ein Objekt der Klasse SimpleUniverse enthält eine Objekt der Klasse Locale sowie ein Objekt der Klasse ViewingPlatform. Dem Objekt der Klasse SimpleUniverse wird das Canvas3D-Objekt als Darstellungsbereich übergeben. Gruppen und Formen lassen sich mit addChild zu dem Universum hinzufügen.
Szenengraph: Erzeugung des JFrame public class Cube extends Canvas3D { . . . public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(200,200); frame.getContentPane().add(new Cube()); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); }}); frame.setVisible(true); }
Szenengraph: Virtuelles Universum public class Cube extends Canvas3D { . . . public Cube() { super(SimpleUniverse.getPreferredConfiguration()); SimpleUniverse u = new SimpleUniverse(this); u.getViewingPlatform().setNominalViewingTransform( ); BranchGroup scene = createSceneGraph(); u.addBranchGraph(scene); }
Szenengraph: Erzeugung des JFrame public class Cube extends Canvas3D { . . . public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); objRoot.addChild(new ColorCube(0.2)); objRoot.compile(); return objRoot; }
Transformationen: Konzept TransformGroup enthält alle Objekte, auf die eine Transformation angewendet wird. Die Art der Transformation wird durch eine Matrix der Klasse Transform3D definiert Belegung der Matrix zum Beispiel mit den folgenden Methoden: void setRotation(AxisAngle4d a1) void setScale(double scale) void setTranslation(Vector3d trans)
Transformationen: Beispiel TransformGroup trans = new TransformGroup(); objRoot.addChild(trans); trans.addChild(new ColorCube(0.2)); Transform3D m1 = new Transform3D(); m1.setRotation(new AxisAngle4d(0,1,0,Math.PI / 4)); trans.setTransform(m1);
Mauskontrolle TransformGroup trans = new TransformGroup(); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); trans.addChild( . . . ); MouseRotate mRot = new MouseRotate(trans); MouseTranslate mTrans = new MouseTranslate(trans); BoundingSphere bounds = new BoundingSphere(); mRot.setSchedulingBounds(bounds); mTrans.setSchedulingBounds(bounds); trans.addChild(mRot); trans.addChild(mTrans);