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

Post on 05-Apr-2015

108 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

FH-Hof

Java3D - Grundlagen

Richard Göbel

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.

FH-Hof

Szenengraph: Aufbau

VirtualUniverse Objekt

Locale Objekte

Group Objekte

Shape3D Objekte

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.

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

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

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;

}

. . .

}

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)

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

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

FH-Hof

Koordinaten des virtuellen Universums

Y

X

Z

DarstellungsflächeBeobachter Szene

FH-Hof

Geometrische Primitive

Punkt Linie Dreieck Viereck (Quad)

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.

FH-Hof

Unterklassen GeometryStripArray

LineStripArray TriangleStripArray TriangleFanArray

0

1

3

2

0

1

2

3 5

4

6

7

1

2 3

0

4

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.

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

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)

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

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

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.

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

FH-Hof

Appearance- Vorder- und Rückseite

0

1

2

0

1

2

3 5

4

6

7

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

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

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.

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

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

top related