Geometrische Transformationen Geometrische Transformationen ...
Geometrische Transformationen Geometrische Transformationen ...
Geometrische Transformationen Geometrische Transformationen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
t.jung@fhtw-berlin.de<br />
Heute<br />
<strong>Geometrische</strong><br />
<strong>Transformationen</strong><br />
Thomas Jung<br />
Repräsentation von 3D-Oberflächen<br />
Aufbau von Szenen<br />
<strong>Transformationen</strong> im 3D-Raum<br />
Projektionstranformationen<br />
Anwendung in OpenGL<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Motivation<br />
Wie geht das ?<br />
Geometrietransformationen<br />
bilden die Basis für die Computergrafik<br />
sind Bestandteil aller grafischen Systeme<br />
bilden die erste Stufe der Grafikpipeline<br />
Verständnis ist Voraussetzung für alle<br />
weiteren Vorlesungen und Übungen<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Repräsentation von<br />
3D-Oberflächen<br />
Punktmenge mit jeweils 3 Koordinaten<br />
Zusammenfassung zu Polygonen<br />
Aufbau von Szenen<br />
Betrachter<br />
Bildschirm<br />
Welt<br />
Objekte<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de
© Thomas Jung, t.jung@fhtw-berlin.de<br />
<strong>Transformationen</strong><br />
Plazieren Objekte im Raum bezüglich<br />
eines Referenzkoordinatensystems<br />
Transformieren Objektkoordinaten in<br />
einheitliche Weltkoordinaten<br />
Bilden Objekte auf den Bildschirm ab<br />
Ermöglichen Objektbewegungen<br />
Transformationsarten<br />
<strong>Transformationen</strong> im 3D-Raum<br />
Rotation<br />
Translation<br />
Scherung<br />
Stauchung<br />
Skalierung<br />
Projektionen auf 2D-Fläche<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Translation (Verschiebung)<br />
Skalierung<br />
x '= x+<br />
d y'<br />
= y+<br />
x<br />
d y<br />
x'= x∗s<br />
y'<br />
= y∗<br />
x<br />
s y<br />
⎡x⎤<br />
⎡dx⎤<br />
⎡x'<br />
⎤<br />
P = ⎢ ⎥ T = ' =<br />
⎣ y<br />
⎢ ⎥ P ⎢ ⎥<br />
⎦ ⎣ dy ⎦ ⎣y'<br />
⎦<br />
P '= P + T<br />
⎡x'<br />
⎤ ⎡sx<br />
⎢ ⎥ = ⎢<br />
⎣y'<br />
⎦ ⎣ 0<br />
0 ⎤ ⎡x⎤<br />
s<br />
⎥∗⎢<br />
⎥<br />
y ⎦ ⎣y⎦<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
x = r ∗cosα<br />
y = r ∗sinα<br />
x'<br />
= x∗cosβ<br />
− y∗sin<br />
β<br />
y'<br />
= x∗sin<br />
β + y∗cosβ<br />
⎡x'<br />
⎤ ⎡cosβ<br />
−sin<br />
β ⎤ ⎡ ⎤<br />
⎢ ⎥ = ⎢<br />
⎥ ∗ x<br />
⎢ ⎥<br />
⎣y'<br />
⎦ ⎣sin<br />
β cosβ<br />
⎦ ⎣y⎦<br />
Rotation<br />
x'<br />
= r ∗cos(<br />
α + β)<br />
= r ∗cosα<br />
∗cosβ<br />
− r ∗sinα<br />
∗sin<br />
β<br />
y'<br />
= r ∗sin(<br />
α + β)<br />
= r ∗cosα<br />
∗sin<br />
β + r ∗sinα<br />
∗cosβ<br />
β<br />
α<br />
Homogene Koordinaten<br />
3D−Raum<br />
Homogen ⎡ x ⎤<br />
⎡x<br />
⎤ ⎢w⎥<br />
⎢<br />
y<br />
⎥ ⎢ ⎥<br />
⎢ ⎥ y<br />
⇒ ⎢ ⎥<br />
⎢z<br />
⎥ ⎢w⎥<br />
⎢ ⎥ ⎢ ⎥<br />
⎣w⎦<br />
⎢<br />
z<br />
⎥<br />
⎢⎣<br />
w⎥⎦<br />
Homogen<br />
3D−Raum<br />
⎡x⎤<br />
⎡x⎤<br />
⎢<br />
y<br />
⎥<br />
⎢<br />
y<br />
⎥<br />
⇒ ⎢ ⎥<br />
⎢ ⎥ ⎢z<br />
⎥<br />
⎢⎣<br />
z ⎥⎦<br />
⎢ ⎥<br />
⎣1<br />
⎦<br />
Zur Vereinheitlichung aller<br />
<strong>Transformationen</strong><br />
Matrix-Vektor-Multiplikation<br />
w = 0 bedeutet Richtung<br />
Z. B. Beleuchtungsrichtung<br />
x = y = z = w = 0 verboten!<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de
© Thomas Jung, t.jung@fhtw-berlin.de<br />
3D-Rotationsmatrizen<br />
Rotation um x-Achse<br />
Rotation um y-Achse<br />
Rotation um z-Achse<br />
⎡1<br />
0 0 0⎤<br />
⎢<br />
⎥<br />
⎢<br />
0 cosα<br />
− sinα<br />
0<br />
Rot<br />
⎥<br />
x<br />
( α)<br />
=<br />
⎢0<br />
sinα<br />
cosα<br />
0⎥<br />
⎢<br />
⎥<br />
⎣0<br />
0 0 1⎦<br />
⎡ cosα<br />
0 sinα<br />
0⎤<br />
⎢<br />
⎥<br />
= ⎢<br />
0 1 0 0<br />
Rot<br />
⎥<br />
y<br />
( α)<br />
⎢−<br />
sinα<br />
0 cosα<br />
0⎥<br />
⎢<br />
⎥<br />
⎣ 0 0 0 1⎦<br />
⎡cosα<br />
− sinα<br />
0 0⎤<br />
⎢<br />
⎥<br />
= ⎢<br />
sinα<br />
cosα<br />
0 0<br />
Rot ( α)<br />
⎥<br />
z<br />
⎢ 0 0 1 0⎥<br />
⎢<br />
⎥<br />
⎣ 0 0 0 1⎦<br />
Drehsinn gemäß Rechter-/Linker-Hand-Regel<br />
Weitere <strong>Transformationen</strong><br />
Translation<br />
Skalierung<br />
Scherung<br />
⎡1<br />
0 0 Tx<br />
⎤<br />
⎢<br />
⎥<br />
⎢<br />
0 1 0 Ty<br />
Tran(<br />
T<br />
⎥<br />
x,<br />
Ty<br />
, Tz<br />
) =<br />
⎢0<br />
0 1 T ⎥<br />
0<br />
⎢<br />
⎣ 0 0 1<br />
z<br />
⎥<br />
⎦<br />
⎡S<br />
0 0 0⎤<br />
x<br />
⎢<br />
⎥<br />
= ⎢<br />
0 S<br />
y<br />
0 0<br />
Skal(<br />
S<br />
⎥<br />
x,<br />
S<br />
y<br />
, Sz<br />
)<br />
⎢ 0 0 S 0⎥<br />
⎢<br />
⎣ 0 0<br />
z<br />
0<br />
⎥<br />
1⎦<br />
⎡1<br />
0 Shz<br />
0⎤<br />
⎢<br />
⎥<br />
= ⎢<br />
0 1 Shy<br />
0<br />
Shear(<br />
Sh , )<br />
⎥<br />
z<br />
Shy<br />
⎢0<br />
0 1 0⎥<br />
0<br />
⎢<br />
⎣ 0 0 1<br />
⎥<br />
⎦<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Transformation von Objekten<br />
Homogene <strong>Transformationen</strong><br />
Beispiel<br />
⎡x′<br />
1<br />
⎢<br />
′<br />
⎢<br />
y1<br />
⎢ 0<br />
⎢<br />
⎣ 1<br />
x′<br />
2<br />
y′<br />
2<br />
0<br />
1<br />
( x 1 / y1)<br />
α<br />
( x 3 / y3)<br />
( x 2 / y2)<br />
x′<br />
3 ⎤ ⎡cosα<br />
− sinα<br />
0<br />
y′<br />
⎥ ⎢<br />
3⎥<br />
= ⎢<br />
sinα<br />
cosα<br />
0<br />
0 ⎥ ⎢ 0 0 1<br />
⎥ ⎢<br />
1 ⎦ ⎣ 0 0 0<br />
Tran ( d x<br />
)*<br />
Rot z<br />
d x<br />
d<br />
x ⎤ ⎡x1<br />
0<br />
⎥ ⎢<br />
⎥ ⎢<br />
y1<br />
*<br />
0 ⎥ ⎢ 0<br />
⎥ ⎢<br />
1 ⎦ ⎣ 1<br />
( α )<br />
( x ′ 3 / y′<br />
3)<br />
( x ′ 2 / y′<br />
2)<br />
x<br />
y<br />
2<br />
2<br />
0<br />
1<br />
x3<br />
⎤<br />
y<br />
⎥<br />
3⎥<br />
0 ⎥<br />
⎥<br />
1 ⎦<br />
( x ′ 1 / y′<br />
1)<br />
Zusammenfassen von<br />
<strong>Transformationen</strong> in einer Matrix<br />
Interpretation von Matrizen<br />
Invertieren von<br />
Transformationsmatrizen<br />
Repräsentation von Orientierungen<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Verkettungen<br />
Was transformieren ?<br />
Kombination mehrerer <strong>Transformationen</strong> in<br />
einer homogenen Transformationsmatrix<br />
Multiplikationen sind assoziativ<br />
'<br />
''<br />
' ''<br />
P = T * P,<br />
P = T * P ⇒ P = ( T * T )* P<br />
i<br />
( T * T )* T<br />
1<br />
1<br />
2<br />
i<br />
3<br />
i<br />
= T *( T * T )<br />
1<br />
… aber nicht kommutativ !<br />
∋ T , ≠ T<br />
1<br />
T2<br />
: T1<br />
* T2<br />
T2<br />
*<br />
2<br />
2<br />
i<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
3<br />
i<br />
1<br />
2<br />
1<br />
i<br />
Alle Punkte eines Objekts innerhalb<br />
eines Koordinatensystems<br />
Ein Koordinatensystems bezüglich<br />
eines anderen Systems<br />
Von A<br />
y<br />
Ry<br />
z<br />
T<br />
x<br />
Rz<br />
Rx<br />
Nach B<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
⎡Rx<br />
⎢<br />
⎣ 0<br />
Richtungsvektoren<br />
R<br />
0<br />
y<br />
R<br />
0<br />
z<br />
4x4-Matrix<br />
T ⎤<br />
⎥<br />
1 ⎦
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Bedeutung der Matrixelemente<br />
Bedeutung der Matrixelemente<br />
x<br />
y<br />
z<br />
Rx<br />
Ry<br />
Rz<br />
T<br />
Von A<br />
Nach B<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎣<br />
⎡ +<br />
=<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎣<br />
⎡<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎣<br />
⎡<br />
=<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎣<br />
⎡<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎣<br />
⎡<br />
=<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎣<br />
⎡<br />
1<br />
1<br />
0<br />
1<br />
0<br />
*<br />
1<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
0<br />
*<br />
1<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
*<br />
1<br />
0<br />
0<br />
0<br />
0<br />
T<br />
R<br />
T<br />
R<br />
R<br />
R<br />
T<br />
T<br />
R<br />
R<br />
R<br />
R<br />
R<br />
R<br />
R<br />
y<br />
z<br />
y<br />
x<br />
z<br />
y<br />
x<br />
x<br />
z<br />
y<br />
x<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Invertieren von Matrizen<br />
Invertieren von Matrizen<br />
A ist Inverse zu B<br />
Nicht jede Transformation ist invertierbar<br />
Invertierung durch Determinanten- oder<br />
Gauß-Verfahren<br />
Spezielle Methoden für 3D-<strong>Transformationen</strong><br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
*<br />
−<br />
=<br />
⇒<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
= B<br />
A<br />
B<br />
A<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Invertieren von<br />
Transformationsketten<br />
Invertieren von<br />
Transformationsketten<br />
1<br />
1<br />
1<br />
2<br />
1<br />
1<br />
2<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
*<br />
*<br />
*<br />
)<br />
*<br />
*<br />
*<br />
(<br />
*<br />
)<br />
*<br />
(<br />
*<br />
*<br />
*<br />
)<br />
*<br />
(<br />
)<br />
*<br />
* (<br />
*<br />
)<br />
*<br />
(<br />
1<br />
*<br />
*<br />
)<br />
*<br />
(<br />
1<br />
*<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
=<br />
=<br />
=<br />
=<br />
=<br />
=<br />
T<br />
T<br />
T<br />
T<br />
T<br />
T<br />
B<br />
C<br />
C<br />
B<br />
B<br />
C<br />
B<br />
B<br />
C<br />
B<br />
C<br />
C<br />
C<br />
B<br />
C<br />
B<br />
C<br />
B<br />
C<br />
B<br />
A<br />
A<br />
n<br />
n<br />
L<br />
L<br />
Invertierung der Einzeltransformationen<br />
Umkehrung der Reihenfolge<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Spezielle Inverse<br />
Spezielle Inverse<br />
)<br />
,<br />
,<br />
(<br />
*<br />
)*<br />
,<br />
,<br />
(<br />
)<br />
,<br />
,<br />
(<br />
*<br />
)*<br />
,<br />
,<br />
(<br />
)<br />
,<br />
,<br />
(<br />
)<br />
,<br />
,<br />
(<br />
)<br />
,<br />
,<br />
(<br />
)<br />
,<br />
,<br />
(<br />
)<br />
(<br />
)<br />
(<br />
)<br />
(<br />
)<br />
(<br />
)<br />
(<br />
)<br />
(<br />
1<br />
1<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
1<br />
3<br />
3<br />
3<br />
2<br />
2<br />
2<br />
1<br />
1<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
3<br />
3<br />
2<br />
2<br />
2<br />
1<br />
1<br />
1<br />
1<br />
3<br />
3<br />
3<br />
2<br />
2<br />
2<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
z<br />
y<br />
x<br />
z<br />
y<br />
x<br />
S<br />
S<br />
S<br />
z<br />
R<br />
z<br />
R<br />
z<br />
R<br />
y<br />
R<br />
y<br />
R<br />
y<br />
R<br />
x<br />
R<br />
x<br />
R<br />
x<br />
R<br />
z<br />
y<br />
x<br />
z<br />
y<br />
x<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
y<br />
x<br />
z<br />
R<br />
z<br />
R<br />
z<br />
R<br />
y<br />
R<br />
y<br />
R<br />
y<br />
R<br />
x<br />
R<br />
x<br />
R<br />
x<br />
R<br />
T<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
z<br />
R<br />
y<br />
R<br />
x<br />
R<br />
S<br />
S<br />
S<br />
z<br />
y<br />
x<br />
z<br />
y<br />
x<br />
z<br />
y<br />
x<br />
z<br />
z<br />
y<br />
y<br />
x<br />
x<br />
Skal<br />
Rot<br />
T<br />
T<br />
T<br />
Tran<br />
T<br />
T<br />
T<br />
Tran<br />
Rot<br />
S<br />
S<br />
S<br />
Skal<br />
Rot<br />
Rot<br />
Rot<br />
Skal<br />
S<br />
S<br />
S<br />
Skal<br />
T<br />
T<br />
T<br />
Tran<br />
T<br />
T<br />
T<br />
Tran<br />
Rot<br />
Rot<br />
Rot<br />
Rot<br />
Rot<br />
Rot<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
−<br />
−<br />
=<br />
⎟<br />
⎟<br />
⎠<br />
⎞<br />
⎜<br />
⎜<br />
⎝<br />
⎛<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
=<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
=<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
=<br />
−<br />
−<br />
−<br />
=<br />
−<br />
=<br />
−<br />
=<br />
−<br />
=<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
α<br />
α<br />
α<br />
α<br />
α<br />
α<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Fehlerquellen<br />
Fehlerquellen<br />
Wechsel des Drehsinns<br />
Rechte-/Linke-Hand-Regel<br />
Transponierte Notation<br />
1x4-Matrix statt Vektor<br />
x<br />
y<br />
z<br />
x<br />
z<br />
y<br />
Links<br />
Rechts<br />
T<br />
T<br />
T<br />
P<br />
T<br />
P<br />
P<br />
P<br />
T<br />
'<br />
*<br />
'<br />
* =<br />
⇔<br />
=<br />
x<br />
y<br />
z<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Rotation/Orientierung<br />
Rotation/Orientierung<br />
Orientierung eines Objekts ist<br />
äquivalent zu Rotation aus Ruhelage<br />
3 Rotationsfreiheiten („Dimensionen“)<br />
Repräsentationen<br />
Rotationsmatrizen<br />
Eulerwinkel<br />
Quaternionen
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Rotationsmatrizen<br />
Interpolation von Orientierungen<br />
Vorteile<br />
Leicht Kombinierbar mit<br />
anderen Transformationsarten<br />
Effizientes Transformieren<br />
großer Punktmengen<br />
Leicht zu invertieren ⎡Rxx<br />
⎢<br />
⎢Rx<br />
y<br />
Nachteile<br />
⎢<br />
Nicht sehr anschaulich<br />
⎣<br />
Rxz<br />
Nicht direkt interpolierbar !<br />
Ry<br />
R<br />
R<br />
R<br />
yx<br />
yy<br />
yz<br />
Rz<br />
Rx<br />
R ⎤<br />
zx<br />
⎥<br />
Rz<br />
y ⎥<br />
R ⎥<br />
zz<br />
⎦<br />
Animierte Objekte ändern Position und<br />
Orientierung<br />
Zwischenwerte durch Interpolation<br />
y<br />
z<br />
x<br />
y<br />
z<br />
x<br />
z<br />
x<br />
y<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Eulerwinkel<br />
Rot ( xr<br />
, yr<br />
, zr<br />
) = Rotz<br />
( zr<br />
)* Rot<br />
y<br />
( yr<br />
)* Rotx<br />
( xr<br />
)<br />
Reihenfolge der Rotationen wichtig!<br />
Gleiche Orientierung durch mehrere Tripel<br />
Schlechte Interpolationseigenschaften<br />
Unnötig „lange“ Pfade<br />
Singularitäten (Gimbal Lock)<br />
Freiheitsgrad geht verloren<br />
Beispiel Rot x ,180°,<br />
z ) = Rot ( z )* Rot (180°)*<br />
Rot ( x )<br />
(<br />
r<br />
r<br />
z r y<br />
x r<br />
Quaternionen<br />
Jede Orientierung durch Rotation<br />
um eine Achse erreichbar<br />
Angabe von Achsel und Winkel<br />
OpenGL: glRotate-Befehl<br />
VRML: rotation-Feld im Transformation-Knoten<br />
⎛ ϖ ϖ ϖ<br />
Einheitsquaternionen<br />
⎜cos<br />
sin *<br />
x<br />
sin * ny<br />
⎝ 2 2 2<br />
Zur Interpolation von Orientierungen<br />
Erweiterung der komplexen Zahlen<br />
Liegen auf „vierdimensionaler Halbkugel“<br />
z<br />
ϖ ⎞<br />
n sin * nz<br />
⎟<br />
2 ⎠<br />
y<br />
x<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Zusammenfassung:<br />
<strong>Transformationen</strong> in 3D<br />
Objektoberfläche durch Punkte beschreiben<br />
Mehrere Koordinatensysteme sind nötig<br />
Homogene <strong>Transformationen</strong> zur Vereinheitlichung<br />
Transformation von Punkten innerhalb eines<br />
Systems oder von Systemen ineinander<br />
Matrixmultiplikation ist assoziativ aber nicht<br />
kommutativ<br />
<strong>Transformationen</strong> im 3D-Raum besitzen Inverse<br />
Invertierung von Transformationsketten kehrt die<br />
Reihenfolge der Einzeltransformationen um<br />
Rotationen auch durch Quaternionen beschreibbar<br />
Projektionen<br />
Bilden 3D-Raum auf Bildebene ab<br />
Orthogonale Projektion<br />
Perspektivische Projektion<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Parallele Projektion<br />
Keine perspektivischen Effekte<br />
Erhalt der x- und y-Koordinate<br />
z wird auf die Bildebene abgebildet<br />
Größenvergleich am Bildschirm (CAD)<br />
⎡1<br />
0<br />
⎢<br />
⎢<br />
0<br />
⎢0<br />
1<br />
0<br />
⎢<br />
⎣0<br />
0<br />
0 0⎤<br />
⎡x⎤<br />
⎡x⎤<br />
0 0<br />
⎥ ⎢ ⎥ ⎢ ⎥<br />
⎥ ⎢<br />
y<br />
⎥ = ⎢<br />
y<br />
* ⎥<br />
0 0⎥<br />
⎢z⎥<br />
⎢0⎥<br />
⎥ ⎢ ⎥ ⎢ ⎥<br />
0 1⎦<br />
⎣1⎦<br />
⎣1⎦<br />
Perspektivische<br />
Transformation<br />
Berücksichtigung des Abstands<br />
zwischen Objekt und Betrachter<br />
Kameramodell<br />
Betrachter im Ursprung<br />
0 d z<br />
schaut in Richtung der z-Achse<br />
Bildschirm bei (0 0 d)<br />
Strahlensatz:<br />
x’ = x*d/z<br />
y’ = y*d/z<br />
⎡1<br />
0<br />
⎢<br />
⎢<br />
0<br />
⎢0<br />
1<br />
0<br />
⎢<br />
⎣0<br />
0<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
0<br />
0<br />
1<br />
1<br />
d<br />
0⎤<br />
⎡x⎤<br />
⎡x<br />
xd<br />
⎤ ⎡ z ⎤<br />
⎥ ⎢ ⎥ ⎢ ⎥ ⎢ yd<br />
0<br />
⎥<br />
⎥ ⎢<br />
y<br />
⎥ = ⎢<br />
y z<br />
* ⎥ = ⎢ ⎥<br />
0⎥<br />
⎢z<br />
⎥ ⎢z<br />
⎥ ⎢ d ⎥<br />
⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥<br />
0⎦<br />
⎣1<br />
z<br />
⎦ ⎣ d⎦<br />
⎣ 1 ⎦<br />
0<br />
y’<br />
y<br />
Sichtvolumen<br />
Sichtbarer Bereich zwischen Frontplane<br />
und Backplane<br />
Objekte werden an den sechs Flächen des<br />
Sichtvolumens abgeschnitten (Klipping)<br />
Abbildung der Projektionsebene auf den<br />
Bildschirm<br />
Perspektivisches Sichtvolumen<br />
Viewport<br />
Bildspeicher<br />
lineare Adressierung<br />
Fenstersystem<br />
x,y-Koordinaten<br />
y nach unten<br />
Viewport<br />
Koordinaten<br />
im Fenster<br />
...<br />
...<br />
...<br />
...<br />
0 1 2 … 1024<br />
1025 2048<br />
x/y-offset<br />
Fenster<br />
Viewport<br />
5020<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
OpenGL-Transformationsmodell<br />
Objektnormalen<br />
Transformierte Normalen<br />
Oberstes<br />
Element<br />
aktiv !!!<br />
MODELVIEW<br />
PROJECTION<br />
VIEWPORT<br />
Objektkoordinaten<br />
Matrixstapel<br />
Aug-/Kamerakoordinaten<br />
Matrixstapel<br />
Normalisierte Gerätekoordinaten<br />
Bildschirmkoordinaten<br />
Matrixstapel<br />
Für effizienten Zugriff auf vorherige<br />
Transformationszustände<br />
Unterstützt hierarchische Szenen<br />
Wahl des aktuellen Matrixstapels<br />
glMatrixMode(GL_MODELVIEW); bzw.<br />
glMatrixMode(GL_PROJECTION);<br />
Manipulation des Matrixstapels<br />
glPushMatrix(); oberes Element duplizieren<br />
glPopMatrix(); oberes Element löschen<br />
glRotate(…), glTranslate(…), glScale(…), glMultMatrix(…);<br />
oberes Element verändern<br />
glLoadMatrix(…), glLoadIdentity(…); ob. Element setzen<br />
© Thomas Jung, t.jung@fhtw-berlin.de<br />
© Thomas Jung, t.jung@fhtw-berlin.de
© Thomas Jung, t.jung@fhtw-berlin.de<br />
Projektionstransformation<br />
Bei aktivem PROJECTION-Stapel aufrufen !<br />
OpenGL-Funktionen<br />
glOrtho(left, right, bottom, top, near, far);<br />
glFrustum(left, right, bottom, top, near, far);<br />
Funktionen aus der GLu-Bibliothek<br />
Komfortabler aber schwieriger zu interpretieren<br />
gluOrtho2D(left, right, bottom, top);<br />
gluPerspective(fovy, aspect, near, far);<br />
fovy: vertikales Blickfeld in Grad, aspect: Breite/Höhe<br />
Zusammenfassung (2. Teil)<br />
Projektionen bilden den Raum auf eine Ebene ab<br />
Sie sind deshalb nicht invertierbar<br />
Orthogonale Projektionen für CAD<br />
Perspektivische Verzerrung z. B für Walkthroughs<br />
Der dargestellte Bereich wird durch das<br />
Sichtvolumen (Pyramidenstumpf) begrenzt<br />
OpenGL-Transformationsmodell (Matrixstapel, ...)<br />
VRML-Konzepte zur Transformation von Objekten<br />
© Thomas Jung, t.jung@fhtw-berlin.de