fh-hof java3d - grundlagen richard göbel. fh-hof java3d konzept erzeugung eines szenengraphen als...

27
FH-Hof Java3D - Grundlagen Richard Göbel

Upload: wanda-blouch

Post on 05-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Java3D - Grundlagen

Richard Göbel

Page 2: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

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.

Page 3: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Szenengraph: Aufbau

VirtualUniverse Objekt

Locale Objekte

Group Objekte

Shape3D Objekte

Page 4: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

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.

Page 5: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Aufbau des Programms – Funktion „main“

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); }}

Page 6: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Aufbau des Programms - Konstruktor

public class Cube extends Canvas3D { . . . public Cube() { super(SimpleUniverse.getPreferredConfiguration()); SimpleUniverse u = new SimpleUniverse(this); u.getViewingPlatform().setNominalViewingTransform(

); BranchGroup scene = createSceneGraph(); u.addBranchGraph(scene); } . . .}

Page 7: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Aufbau des Programms - Szenengraph

public class Cube extends Canvas3D {

. . .

public BranchGroup createSceneGraph() {

BranchGroup objRoot = new BranchGroup();

objRoot.addChild(new ColorCube(0.2));

objRoot.compile();

return objRoot;

}

. . .

}

Page 8: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

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)

Page 9: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

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);

Page 10: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Mauskontrolle

BranchGroup objRoot = new BranchGroup();TransformGroup trans = new TransformGroup();objRoot.add(trans);trans.setCapability(

TransformGroup.ALLOW_TRANSFORM_WRITE);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);

trans.addChild( . . . );

Page 11: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Koordinaten des virtuellen Universums

Y

X

Z

DarstellungsflächeBeobachter Szene

Page 12: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Geometrische Primitive

Punkt Linie Dreieck Viereck (Quad)

Page 13: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Unterklassen von GeometryArray

Einzelne Punkte ohne Verbindung lassen sich mit Hilfe eines PointArray speichern.

Ein Objekt der Klasse LineArray speichert Paare von Punkten, wobei jeweils zwei aufeinander folgende Punkte mit einer Linie verbunden sind.

Eine Menge von Dreiecken kann mit einem TriangleArray gespeichert werden. Hier besteht ein Dreieck aus jeweils drei aufeinander folgenden Punkten.

In einem QuadArray werden vier aufeinander folgende Punkte als Viereck interpretiert.

Ein GeometryStripArray enthält Linien oder Dreiecke, die gemeinsame Punkte enthalten.

Page 14: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Unterklassen GeometryStripArray

LineStripArray TriangleStripArray TriangleFanArray

0

1

3

2

0

1

2

3 5

4

6

7

1

2 3

0

4

Page 15: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Inhalt eines GeometryArray

Punkte der Geometrie

Farben der Form, die zunächst den Punkten

zugeordnet werden.

Normal-Vektoren welche die Ausrichtung der

Oberfläche festlegen (Beleuchtung).

Information über die Abbildung eines

Texturbildes auf die Oberfläche der Form.

Page 16: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Konstruktor für ein GeometryArray

<GeometryArray>(int vertexCount, int vertexFormat) mit:

vertexCount: Anzahl der Punkte vertexFormat: Enthaltene Informationen

Deklaration der enthaltenen Information mit den folgenden Konstanten:

COORDINATES NORMALS COLOR_3 oder COLOR_4 TEXTURE_COORDINATE_2 oder

TEXTURE_COORDINATE_3

Beispiel:ta = new TriangleArray(12, TriangleArray.COORDINATES

| TriangleArray.COLOR_3);

Page 17: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Methoden für ein GeometryArray

setCoordinate(int index, PointXX coordinate)

setCoordinates(int index, PointXX[]

coordinates)

setColor(int index, ColorXX color)

setColors(int index, ColorXX[] colors)

setNormal(int index, VectorXX normal)

setNormals(int index, VectorXX[] normals)

Page 18: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Beispiel für eine Geometrie

private Geometry testGeometry() {

TriangleArray ta

= new TriangleArray (3,

TriangleArray.COORDINATES

| TriangleArray.COLOR_3);

ta.setCoordinate(0, new Point3f(0f,0f,0f));

ta.setCoordinate(1, new Point3f(1f,0f,0f));

ta.setCoordinate(2, new Point3f(0f,1f,0f));

Color3f red = new Color3f(1f,0f,0f);

ta.setColor(0,red);

ta.setColor(1,red);

ta.setColor(2,red);

return ta }

Einbindung: new Shape3D(testGeometry())

Page 19: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Klassen für Punkte, Vektoren und Farben

Aufbau eines Klassennamen:

Typ des Objekts (Point, Vector oder Color).

Anzahl der Komponenten (2, 3 oder 4)

Datentyp der Komponenten (f für float, d für

Double)

Beispiele:

Point3f

Color4d

Page 20: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Appearance: Konzept

Objekte der Klasse Appearance definieren die Darstellung einer Geometrie:

Die Darstellung von Punkten: PointAttributes Darstellung von Linien: LineAttribute Darstellung von Polygonen: PolygonAttributes . Farbe: ColoringAttributes Transparenz:

TransparencyAttributes Oberflächenmaterial: Material Texturen: Texture und

TextureAttributes Weitere Attribute:

RenderingAttributes.

Page 21: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Appearance- Beispiel für die Anwendung

Appearance ap = new Appearance();

ap.setPolygonAttributes(

new PolygonAttributes(PolygonAttributes.POLYGON_LINE,

PolygonAttributes.CULL_BACK,

0));

ap.setLineAttributes(

new LineAttributes(1f,

LineAttributes.PATTERN_DASH,

false));

trans.addChild(new Shape3D(testGeometry(),ap));

Page 22: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Appearance- Vorder- und Rückseite

0

1

2

0

1

2

3 5

4

6

7

Page 23: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Klassen für Geometrien von Basisformen

Basisformen lassen sich mit entsprechenden Unterklassen der Klasse Group erzeugen:·

Klasse Box: Quader Klasse Cone: Kegel Klasse Cylinder: Zylinder Klasse Sphere: Kugel

Beispiel: Erzeugen eines Kegels

trans.addChild(new Cone(0.2f, 0.6f, new Appearance()));

Page 24: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Geometrie für 2D-Texte

Ein Objekt der Klasse Text2D erzeugt eine

Unterklasse von Shape3D für einen Text:

Text2D text2D

= new Text2D( "FH Hof",

new Color3f(0.5f,0.5f,1f), "Helvetica",

48, Font.ITALIC);

<Gruppe>.addChild(text2D);

Page 25: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Geometrie für 3D-Texte - Ansatz

Objekt der Klasse Font3D aus einem Font

erzeugen

Konstruktor der Klasse Font3D ein Objekt der

Klasse FontExtrusion übergeben.

Geometrie mit Hilfe eines Objekts der Klasse

Text3D aus Font3D und Text erzeugen.

Darstellung der Geometrie mit Hilfe eines

Objekts der Klasse Shape3D.

Page 26: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Geometrie für 3D-Texte - Anweisungen

Font font = new Font("Helvetica", Font.PLAIN, 2);

Font3D font3D = new Font3D(font, new FontExtrusion());

Text3D textGeom = new Text3D(font3D,

new String("FH Hof"),

new Point3f(1f,0f,-5f));

<Gruppe>.addChild(new Shape3D(textGeom,

new Appearance()));

Page 27: FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe

FH-Hof

Hintergrund setzen - Anweisungen

Background backg = new

Background(0.5f,0.5f,1f);

// ggf. Geometry für Hintergrund setzen

backg.setGeometry( . . . );

backg.setApplicationBounds(

new BoundingSphere(new Point3d(), 100));

objRoot.addChild(backg);