24.11.2013 Aufrufe

Geometrische Transformationen Geometrische Transformationen ...

Geometrische Transformationen Geometrische Transformationen ...

Geometrische Transformationen Geometrische Transformationen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!