Skip to content

Tutorial 1: Der erste Szenengraph

lichtsprung edited this page Apr 28, 2011 · 5 revisions

Um eine funktionstüchtige Umgebung zu haben, in der man das Framework einsetzen kann, muss es sich im Classpath des Projekts befinden. Ist dies der Fall, kann man auf die Klassen des Frameworks zugreifen und den Szenengraph verwenden.

Die grundlegende Funktionsweise soll anhand eines kurzen Beispiels verdeutlicht werden. Einen neuen Szenengraph erzeugt man über den Aufruf des Standardkonstruktors der Klasse SceneGraph.

SceneGraph sceneGraph = new SceneGraph();

Dem SceneGraph-Objekt können nun beliebig viele Objekte, die das Interface Renderable implementieren, hinzugefügt werden. Für das Beispiel reicht es aus, die Objekte dem Root-Knoten hinzuzufügen. Später kann es durchaus sinnvoll sein, die Geometrie-Objekte an einen Kindsknoten anzuhängen. Dazu aber später mehr.

sceneGraph.addGeometry(new Line2d(400, 400, 450, 400));
sceneGraph.addGeometry(new Triangle2d(50, 200, 200, 200, 125, 50));

Die beiden Zeilen fügen dem SceneGraph einmal eine Linie und ein Dreieck im zweidimensionalen Raum hinzu. Bei den Koordinaten handelt es sich um Punkte im Weltkoordinatensystem. Der SceneGraph selbst kümmert sich nicht darum, ob oder wie er ausgegeben wird. Hierzu benötigt man ein zusätzliches Objekt, einen RenderVisitor, der jeden Knoten im SceneGraph besucht und die darstellbaren Objekte in den Bildraum projeziert. Die Art und Weise, wie er die Objekte darstellen soll, wird dem RenderVisitor über eine Renderer-Implementierung mitgeteilt, diese wird für eine Standard-2D-Ausgabe vom Framework zur Verfügung gestellt. dem RenderVisitor-Objekt wird hierfür über die setRenderer-Methode die Instanz des entsprechenden Renderers übergeben, in diesem einfachen Fall ist es eine Instanz der Klasse RendererJ2D. Der Konstruktor nimmt als Parameter die x- und y-Dimension des Bildraums entgegen.

RenderVisitor visitor = new RenderVisitor();
visitor.setRenderer(new RendererJ2d(800, 600));

Nachdem die beiden Hauptkomponenten erstellt wurden, die für eine 2D-Szene benötigt werden, erstellt man ein Objekt der Klasse Scene2D und übergibt dieser Instanz den SceneGraph und den RenderVisitor. Die Szene verwaltet die einzelnen Objekte und kümmert sich im Falle einer Animation um die Aktualisierung der einzelnen Komponenten.

Scene2d scene2d = new Scene2d();
scene2d.setScenegraph(sceneGraph);
scene2d.setRenderVisitor(visitor);

Der Aufruf der Methode start() führt dazu, dass der RenderVisitor alle Knoten des Graphen einmal besucht und die Linie und das Dreieck auf den 2D-Bereich zeichnet.

scene2d.start();

Führt man das Programm aus, sollte man ein Fenster öffnen, in dem auf weißem Grund die Linie und das Dreieck dargestellt werden.

Das vollständige Programm sieht dann wie folgt aus:

SceneGraph sg = new SceneGraph();
sceneGraph.addGeometry(new Line2d(400, 400, 450, 400));
sceneGraph.addGeometry(new Triangle2d(50, 200, 200, 200, 125, 50));

RenderVisitor visitor = new RenderVisitor();
visitor.setRenderer(new RendererJ2d(800, 600));

Scene2d scene2d = new Scene2d();
scene2d.setScenegraph(sceneGraph);
scene2d.setRenderVisitor(visitor);
scene2d.start();

Im nächsten Beispiel wollen wir uns die grundlegende Technik angucken, wie Animationen verwirklicht werden können.

Clone this wiki locally