Title: Grafikprogrammierung mittels Java3D
1Grafikprogrammierungmittels Java3D
- Transformationen
- Frank Krack
2Geometrische Transformationen
Skalierung
Translation
Rotation
3Objekte in Java3D
- Objekte werden anhand der Fläche gespeichert
- Einfache Vorstellung mit Punkten
- alle Punkte eines ObjektsV vi vi (xi, yi,
zi) ? R3, i ? N
4Translation
- Verschiebung
- Addition aller Punkte mit Translationsvektor
tx 1.0, ty 1.0, tz -1.5
5Homogene Translation
- Translation als Matrizenmultiplikation
- homogenen Koordinaten
6Skalierung
- Dehnung / Stauchung
- Multiplikation aller Punktemit Skalierungsvektor
x 0.25, y 0.5, z 1.0
7Homogene Skalierung
- Skalierung als Matrizenmultiplikation
- homogenen Koordinaten
8Rotation
- Drehung um eine Achse
- Multiplikation aller Punktemit Rotationsmatrix
9Rotation
- Rotation um Y-Achse
- Rotation um Z-Achse
10Homogene Rotation
- Rotation als Matrixmultiplikation mit homogenen
Koordinaten - z.B. Drehung um Z-Achse
11Mathematik in Java
- Matrix- und Vektoroperationen sind im
javax.vecmath-Package enthalten - Klassen
- Vector3f, Vector3d
- Matrix3f, Matrix3d, Matrix4f, Matrix4d
- Unterstützung für
- Vektoroperationen (z.B. Skalar- und
Vektorprodukt) - Matrixoperationen (Transformation von Punkten)
12Transform3D
- speichert eine Transformation in einer 4x4-Matrix
Konstruktor Transform3D t3d_trans new
Transform3D() Standardkonstruktur initialisiert
die Matrix als Einheitsmatrix Transform3D
t3d_trans new Transform3D(float
matrix) Erzeugt eine Transformationsobjekt und
übergibt in einem 16 Elemente großen Array die
Transformationsmatrix. Package
javax.media.j3d.Transform3D
13Transform3D
Funktionen void setTranslation(Vector3d
trans) setzt nur die Translationswerte des
Vektors trans in die Transformationsmatrix void
set(Vector3f trans) Änderung der Matrix in
Einheitsmatrix mit Translationswerten trans void
setScale(Vector3d scale) void setScale(double
scale) Setzt den Wert der Transformation auf
eine Skalierung für alle drei Dimensionen
unterschiedlich bzw. gleichmäßig
14Transform3D
Funktionen void rotX(double angle) void
rotY(double angle) void rotZ(double angle) Setzt
den Wert der Transformation aufeine Rotation um
die entsprechendeAchse. Der Winkel angle ist im
Bogenmass. Umrechnug Math.PI / 2.0d
Math.toRadians (90.0d)
15zusammengesetzte Transformationen
- Folge von Transformationen
- Matrizen-Produkt
- Vorsicht!!!
- Die Matrixmultiplikation ist
- assoziativ ABC (AB)C A(BC)
- nicht kommutativ AB ! BA
- Translation Rotation ! Rotation
Translation - Rotation1 Rotation2 ! Rotation2 Rotation1
16wichtige Reihenfolge
17Zusammengestzte Transformationen
- Rotation um Achse im Punkt
- Translation zum Ursprung T1
- Rotation Rz( )
- Translation zum Startpunkt T2
- R T2 Rz( ) T1
18Transform3D
Funktionen void set (Vector3f trans, float
scale) void set (Vector3d trans, double
scale) binden gleichzeitig eine Translation und
eine Skalierung in die Matrix ein void
setRotation(AxisAngle4d) Rotation um eine
beliebige Achse im Raum void mul(Transform3D
t3d_t1) this this t3d_t1 void
mul(Transform3D t3d_t1, Transform3D
t3d_t2) führen Multiplikation der Matrizen aus
this t3d_t1 t3d_t2
19TransformGroup
- Verzweigung im Szenen-Graphen, die eine
Transformation speichert
Konstruktor TransformGroup tg new
TransformGroup() Standardkontruktor, der eine
Verzweigung mit einer neutralen Transformation
(Einheitsmatrix) erzeugt TransformGroup tg new
TransformGroup(Transform3D transform) Erzeugt
eine Verzweigung mit einem Transform3D-Objekt Pac
kage javax.media.j3d.TransformGroup
20TransformGroup
- Funktionen
- void setTransform(Transform3D transform)
- Setzt die Transformation der TransformGroup
- void addChild(Node child)
- - Hängt einen Knoten als Kind ein
- Kind kann wieder eine TransformGroup sein
- nachfolgende Transformation ist relativ zur
vorhergehenden
21Quellen
- Sun Java 3D Tutorialhttp//developer.java.sun.com
/developer/onlineTraining/java3d/ - Skript Graphische DatenverarbeitungProf. Dr.
Werner Heinzel