fh-hof java3d - grundlagen richard göbel. fh-hof java3d konzept erzeugung eines szenengraphen als...
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);