Präsentation

Werbung
Grafikprogrammierung
mittels Java3D
Transformationen
Frank Krack
Geometrische Transformationen
Skalierung
Translation
Rotation
Objekte in Java3D

Objekte werden anhand der Fläche gespeichert

Einfache Vorstellung mit Punkten

alle Punkte eines Objekts
V = {vi | vi = (xi, yi, zi) Є R3, i Є N}
Translation

Verschiebung

Addition aller Punkte  t x 
mit Translationsvektor  t y 
t 
 z
 x   tx   x  tx 

    
 y   ty    y  ty 

z    
   tz   z  tz 
tx = 1.0, ty = 1.0, tz = -1.5
Homogene Translation

Translation als Matrizenmultiplikation

homogenen Koordinaten
1

0
0

0

0 0 tx   x   x  tx 

   
1 0 ty   y   y  ty 
   


0 1 tz
z
z  tz 
   

0 0 1  1  1

Skalierung

Dehnung / Stauchung
 x 
 
 Multiplikation aller Punkte   y 
 
mit Skalierungsvektor
 z
 x   x   x * x 
    

 y    y    y * y 
 z      z * 
z 
   z 
 x = 0.25,  y = 0.5,  z = 1.0
Homogene Skalierung

Skalierung als Matrizenmultiplikation

homogenen Koordinaten
 x

0
0

0

0
0
y
0
0
z
0
0
0   x   x * x 

   
0   y   y * y 
   


0
z
z
*

z 
   

1  1  1

Rotation

Drehung um eine Achse

Multiplikation aller Punkte
mit Rotationsmatrix
0
1

RX ( )  p   0 cos 
 0 sin 

x
  x 

   

 sin     y    y * cos   z * sin  
cos    z   y * sin   z * cos  
0
Rotation

Rotation um Y-Achse
 cos 

RY ( )  p   0
  sin 


0 sin    x   x * cos   z * sin  
   

1
0  y  
y

0 cos    z    x * sin   z * cos  
Rotation um Z-Achse
 cos 

RZ ( )  p   sin 
 0

 sin 
cos 
0
0   x   x * cos   y * sin  
   

0    y    x * sin   y * cos  

1   z  
z

Homogene Rotation

Rotation als Matrixmultiplikation mit homogenen
Koordinaten

z.B. Drehung um Z-Achse
 cos 

 sin 
 0

 0

 sin 
cos 
0
0
0 0   x   x * cos   y * sin  
   

0 0   y   x * sin   y * cos  
   


1 0
z
z
   






0 1  1  1

Mathematik 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)
Transform3D

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
Transform3D
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
Transform3D
Funktionen
void rotX(double angle)
void rotY(double angle)
void rotZ(double angle)
Setzt den Wert der Transformation auf
eine Rotation um die entsprechende
Achse. Der Winkel angle ist im Bogenmass.
3
1 
4
315
2
360

4
45

3

2
270
1
Umrechnug:
Math.PI / 2.0d = Math.toRadians (90.0d);
2
90

4
225

180
3

4
135
zusammengesetzte Transformationen



Folge von Transformationen
Matrizen-Produkt
Vorsicht!!!

Die Matrixmultiplikation ist
assoziativ: A*B*C = (A*B)*C = A*(B*C)
nicht kommutativ: A*B != B*A
Translation * Rotation != Rotation * Translation
Rotation1 * Rotation2 != Rotation2 * Rotation1
wichtige Reihenfolge
Zusammengestzte Transformationen
xr

yr
zr 
xr
Rotation um Achse im Punkt x
r
Translation zum Ursprung T1  xr
 Rotation Rz( )
Translation zum Startpunkt T2 xr

Rxr
yr
zr
/ 
= T2 * Rz( ) * T1
yr
 yr
yr
zr 
 zr 
zr 
yr
zr 
Transform3D
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
TransformGroup

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
Package: javax.media.j3d.TransformGroup
TransformGroup
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
Quellen

Sun Java 3D Tutorial
http://developer.java.sun.com/developer/onlineTraining/java3d/

Skript Graphische Datenverarbeitung
Prof. Dr. Werner Heinzel
Herunterladen