Marc Alexa, TU Berlin, 2012 Car Wheels Body Transformations

Transcrição

Marc Alexa, TU Berlin, 2012 Car Wheels Body Transformations
CG
Root
Car
Wheels
Light
Body
Transformations
Wheelgeo
Marc Alexa, TU Berlin, 2012 1
CG
 3D Graphik-­‐Pipeline Anwendung • • 3D Dateneingabe Repräsenta?on von 3D Daten – Primi?ve – Transforma?onen – Räumliche Datenstrukturen    Geometrieverarbeitung Rasterisierung Ausgabe Marc Alexa, TU Berlin, 2012 2
CG
Primi1ve Punkte Marc Alexa, TU Berlin, 2012 3
CG
Primi1ve Linien Marc Alexa, TU Berlin, 2012 4
CG
Primi1ve Dreiecke Marc Alexa, TU Berlin, 2012 5
CG
Primi1ve Körper Marc Alexa, TU Berlin, 2012 6
CG
Primi1ve Körper … werden tesseliert Marc Alexa, TU Berlin, 2012 7
CG
Primi1ve Posi1onierung  absolute Koordinaten? Marc Alexa, TU Berlin, 2012 8
CG
Primi1ve Posi1onierung  Transforma?on + rela?ve Koordinaten • • • • Transla?on Rota?on Skalierung Scherung  affine Abbildungen / Transforma?onen! Marc Alexa, TU Berlin, 2012 9
CG
Koordinaten  Verbindet “Zeichenebene” oder “Raum” mit R2 bzw. R3  Koordinatenursprung und –achsen sind problemabhängig • Bsp. Rechtwinklige Koordinaten in der unteren Ecke eines Zimmers  Affine Räume haben • keinen festen Ursprung und • keine festen Achsen • (im Gegensatz zu linearen Räumen) Marc Alexa, TU Berlin, 2012 10
Koordinaten CG
Der affine Raum  Eine Teilmenge X eines Vektorraumes V heißt affiner Unterraum von V • falls es ein v V und einen Untervektorraum W V gibt, • so dass X= v+W={u V | es gibt ein w W mit u = v+w}.  Eindimensionale Unterräume des R3 sind Geraden, zweidimensionale Unterräume sind Ebenen. Linearer Unterraum
Marc Alexa, TU Berlin, 2012 Affiner Unterraum
11
Affine Abbildungen CG
…als lineare Abbildung  Eine Abbildung Φ: Rn−> Rm ist genau dann affin, • wenn Φ in der Form Φ(v)=A(v)+b darstellbar ist, • wobei A eine lineare Abbildung und b Rm ist.  Affine Abbildungen setzen sich aus einer linearen Abbildung (dem mul?plika?ven Teil) und einer Transla?on (dem addi?ven Teil) zusammen. Lineare Abb.
Marc Alexa, TU Berlin, 2012 Translation
12
CG
Affine Abbildungen Matrizenschreibweise  Affine Abbildungen werden durch homogene (erweiterte) 4 x 4 -­‐ Matrizen beschreiben • Einheitliche Darstellung  einfache Implemen?erung • Hintereinanderausführung verschiedener Transforma?onen  nur Mul?plika?on der Matrizen Marc Alexa, TU Berlin, 2012 13
CG
Transla1on  Transla?onen sind affine Abbildungen • Der lineare Teil einer Transla?on T ist die Iden?tät • Die 4x4-­‐Matrix zur Beschreibung einer Transla?on um den Vektor (x0,y0,z0)t
 Homogene Koordinaten sind einfach deutbar als ein erweitertes Rechenschema! Marc Alexa, TU Berlin, 2012 14
CG
Skalierung, Scherung und Rota1on  Die affinen Abbildungen Skalierung, Scherung, Rota?on lassen den Ursprung invariant  Sie besitzen keinen Transla?onsanteil  Es sind genau die linearen Transforma?onen  3x3-­‐Matrizen wären ausreichend Marc Alexa, TU Berlin, 2012 15
CG
Skalierung, Scherung und Rota1on  Homogene Form  Dabei bes?mmen die Bilder der Basisvektoren (1,0,0)t, (0, 1, 0)t, (0, 0, 1)t eine lineare Abbildung  Zur Vereinfachung beim Schreiben werden Vektoren im Text transponiert: Marc Alexa, TU Berlin, 2012 16
CG
Skalierung, Scherung und Rota1on  Mul?pliziert man die Ortsvektoren der Punkte von rechts, so stehen die Bilder der Basisvektoren der linearen Abbildung A in den Spalten der A beschreibenden Matrix. Die lineare Abbildung wird
also durch folgende Matrix
beschrieben:
Marc Alexa, TU Berlin, 2012 17
CG
Skalierung  Eine Skalierung S ergibt für die affinen Basisvektoren folgende Beziehung: • S((1,0,0,)t) = (s1, 0, 0)t • S((0, 1, 0)t) = (0, s2, 0)t • S((0, 0, 1)t) = (0, 0, s3)t. Marc Alexa, TU Berlin, 2012 18
CG
Skalierung  Die zugehörige 3 x 3 Matrix ergibt sich daher zu  In homogenen Koordinaten Marc Alexa, TU Berlin, 2012 19
CG
Skalierung  Der Sonderfall s1 = s2 = s3 = s bedeutet die gleiche Skalierung für alle Koordinaten  Die zugehörige homogene Matrix hat dann die Form Marc Alexa, TU Berlin, 2012 20
CG
Scherung  Eine Scherung SH ergibt für die affinen Basisvektoren folgende Beziehung • SH((1, 0 , 0)t) = (1, s1, s3)t • SH((0, 1, 0)t) = (s2, 1, s4)t • SH((0, 0, 1)t) = (s5, s6, 1)t Marc Alexa, TU Berlin, 2012 21
CG
Scherung  Die dazugehörige 3 x 3 Matrix wird daher zu  In homogenen Koordinaten folgt Marc Alexa, TU Berlin, 2012 22
CG
Rota1on  Eine Rota?on Rα um den Winkel α um die z-­‐Achse in mathema?sch posi?ve Richtung ergibt für die affinen Basisvektoren folgende Beziehung: • Rα((1, 0, 0)t) = ( cos α, sin α, 0) • Rα((0, 1, 0)t) = (-­‐sin α, cos α, 0) • Rα((0, 0, 1)t) = (0, 0, 1) Marc Alexa, TU Berlin, 2012 23
CG
Rota1on  Die zugehörige 3 x 3 Matrix ergibt sich daher zu  In homogenen Koordinaten folgt für die Rota?on Rα um die z-­‐Achse Marc Alexa, TU Berlin, 2012 24
CG
Rota1on  Die Drehwinkel sind in dem Rechtssystem x,y,z immer posi?v: Marc Alexa, TU Berlin, 2012 25
CG
Rota1on  Bei Rota?on Rα um die x-­‐bzw. y-­‐Achse ergeben sich analog folgende homogene Darstellungen. • Drehung mit dem Winkel α um die x-­‐Achse • Drehung mit dem Winkel α um die y-­‐Achse Marc Alexa, TU Berlin, 2012 26
CG
Rota1on um beliebige Achse  Drehung R(x,y,z) um beliebige Achse in Richtung des normierten Vektors r=(x,y,z)t um den Winkel α z
s
z
R
α
t
r
s
r
y
x
t
z
R-1
x
s
Rα(x)
α
r
y
y
x
t
R(x,y,z)=R-1Rα(x)R
Marc Alexa, TU Berlin, 2012 27
Rota1on um beliebige Achse CG
Berechnung von R  Orthonormale Basis (r,s,t) bes?mmen • erster Basisvektor ist r • zweiter Basisvektor s soll senkrecht auf r stehen: oder ( falls
)
• driner Basisvektor t = r x s z
s
z
t
R
α
r
s
r
y
x
Marc Alexa, TU Berlin, 2012 t
z
R-1
x
s
Rα(x)
α
r
y
y
x
t
28
Rota1on um beliebige Achse CG
Berechnung von R  Vektoren (r,s,t) werden in die Spalten der Transforma?onsmatrix geschrieben  T-­‐Matrix ist orthogonal und transponiert • ex−> r, ey−> s, ez−> t. (das ist R-1) • Für orthogonale Matrizen A gilt stets A-1=At.
 Also: R ergibt sich, indem man die Vektoren (r,s,t) in die Zeilen von A schreibt z
s
z
t
R
α
r
s
r
y
x
Marc Alexa, TU Berlin, 2012 t
z
R-1
x
s
Rα(x)
α
r
y
y
x
t
29
CG
Rota1on um beliebige Achse  Dreht man im Uhrzeigersinn um den Vektor (x,y,z) und den Winkel α, so gilt mit den Abkürzungen s=sin(α), c=cos(α) und t=1-cos(α)
 Für kleine Winkel α (α < 1°) kann man sin α durch die Bogenlänge α und cos α durch 1 approximieren Marc Alexa, TU Berlin, 2012 30
CG
Rota1on um beliebigen Punkt  Die disku?erten Rota?onen lassen den Ursprung fest  Rota?onsachse durch einen anderen Punkt • Verschiebung des Rota?onszentrums in den Ursprung • anschließende Rota?on und • Zurückverschiebung in das Rota?onszentrum z
s
α
z
T
r
α
s
t
x
Marc Alexa, TU Berlin, 2012 z
T-1
s
r
x
R(r)
t
r
t
y
y
α
y
x
31
CG
Rota1on um beliebigen Punkt  Beispiel • Rota?on in posi?ver Richtung um eine Achse durch den Punkt (x0, y0, z0) und um den Winkel α • Die Richtung der Rota?onsachse sei die z-­‐Richtung. Marc Alexa, TU Berlin, 2012 32
CG
    Transforma1onen in OpenGL OpenGL ist ein endlicher Automat Es gibt für alles einen aktuellen Zustand Alle Koordinaten durchlaufen die “aktuelle” Transforma?on Transforma?onen werden mit der aktuellen Transforma?onen verbunden • Die Matrizen werden mul?pliziert Marc Alexa, TU Berlin, 2012 33
CG
Transforma1onen in OpenGL  glRotatef(angle, 0.0, 0.0, 1.0)  glTranslatef(1.0, 0.0, 0.0);  glScalef(2.0, 0.5, 0.5);  glutSolidCube(1.0); Marc Alexa, TU Berlin, 2012 34
CG
OpenGL Matrizenstack  Die bisher „aktuelle“ Matrix genannte Matrix ist tatsächlich als Stack implemen?ert.  Ou benö?gt man einen Zwischenspeicher für Matrizen  Lösung: Matrixstack • glPushMatrix(); – kopiert die oberste Matrix („merke dir wo du bist“) • glPopMatrix(); – envernt die oberste Matrix („gehe dahin zurück, wo du warst“)  Push und Pop bilden quasi Klammern um Transforma?onen  der Matrixstack fasst typ. 32 Einträge Marc Alexa, TU Berlin, 2012 35
Beispiel CG
Armbewegung 0.4
 Ober-­‐ und Unterarm seien Quader  Arm an dem Schultergelenk (s) und dem Ellbogen (e) sollen durch Eingabe der Werte im Wertebereich bewegt werden  Geometrische Primi?ve sind Würfel im Bereich (-­‐0.5,0.5) mit gluWireCube(1.0) Marc Alexa, TU Berlin, 2012 1
2
1.5
36
Trafo
rechter Arm
CG
Weltkoordinaten
Rechter Arm
glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
Oberarm
glTranslatef (1.0, 0.0, 0.0);
glScalef (2.0, 0.4, 1.0);
glTranslatef (2.0, 0.0, 0.0);
glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
Unterarm
glTranslatef (0.75, 0.0, 0.0);
glScalef (1.5, 0.4, 1.0);
Marc Alexa, TU Berlin, 2012 37
Trafo
rechter Arm
CG
Lokale Koordinatensysteme
Rechter Arm
glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
Oberarm
glTranslatef (1.0, 0.0, 0.0);
glScalef (2.0, 0.4, 1.0);
glTranslatef (2.0, 0.0, 0.0);
glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
Unterarm
glTranslatef (0.75, 0.0, 0.0);
glScalef (1.5, 0.4, 1.0);
Marc Alexa, TU Berlin, 2012 38
CG
Trafo
rechter Arm
Beispiel Code glClear (GL_COLOR_BUFFER_BIT);
glColor3f(0,0,0);
glLoadIdentity();
gluLookAt( 0,0,10, 0,0,0, 0,1,0);
glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
glPushMatrix();
glTranslatef (1.0, 0.0, 0.0);
glScalef (2.0, 0.4, 1.0);
glutWireCube (1.0);
glPopMatrix();
glTranslatef (2.0, 0.0, 0.0);
glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
glTranslatef (0.75, 0.0, 0.0);
glScalef (1.5, 0.4, 1.0);
glutWireCube (1.0);
glFlush();
Marc Alexa, TU Berlin, 2012 Rechter Arm
glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
Oberarm
glTranslatef (1.0, 0.0, 0.0);
glScalef (2.0, 0.4, 1.0);
glTranslatef (2.0, 0.0, 0.0);
glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
Unterarm
glTranslatef (0.75, 0.0, 0.0);
glScalef (1.5, 0.4, 1.0);
39
Beispiel Auto CG
2
0.5
glPushMatrix();
glScalef(2,0.5,1);
glutWireCube(1.0);
glPopMatrix();
glPushMatrix();
glTranslatef(-1,-0.25,-0.5);
glutWireSphere(0.1,10,10);
glPopMatrix();
Marc Alexa, TU Berlin, 2012 Aufgabe: Auto fährt und
Räder drehen sich
glTranslatef( x, 0, 0);
glRotatef(alpha, 0.0, 0.0, 1.0);
40
CG
Szenengraph Idee  … aus Transforma?onssicht • Jeder Teilbaum kann in seinem eigenen, lokalen Koordinatensystem verstanden werden • Die Traversierung der Hierarchie akkumuliert die Matrizen der gesamten Welt und posi?oniert die „lokalen“ Koordinatensystem an die rich?ge Stelle – Die Autofähre fährt über den Fluss, darauf fährt ein Auto, das wiederum aus Karosserie und Rädern besteht • Der Zustand (hier die Transforma?onen) werden gespeichert, damit sie nach Verlassen des Teilbaums restauriert werden können  Szenengraph: Logische Gruppierung der lokalen Koordinatensystem, angepasst an die Verarbeitung im endlichen Automaten OpenGL • Problem: was gibt es für Knoten und was steht da drin… Marc Alexa, TU Berlin, 2012 41
CG
Szenengraph minimale Konstruk1on  Ein minimaler Szenengraph besteht aus 3 Knotentypen: • Gruppen, • Transforma?onen (sind auch Gruppen) • Geometrien (inkl. Materialien und Texturparameter).  Sie haben eine gemeinsame Vaterklasse und eine render()-­‐methode. Marc Alexa, TU Berlin, 2012 42
Szenengraph CG
minimale Konstruk1on  Gruppe : • für alle Kinder: render()  Transforma?on: • • • • glPushMatrix() glMultMatrix() für alle Kinder: render() glPopMatrix() Rechter Arm
Oberarm
 Geometrie: • • • • glMaterial*() glBegin() ... glEnd() Marc Alexa, TU Berlin, 2012 Unterarm
43
Szenengraph CG
Struktur Root
 Gerichtet  Azyklisch  Heterogen  Logische Struktur und Kontrolle in den inneren Knoten  Geometrie / darstellbare Primi?ve in den Blänern Car
Wheels
Light
Body
Transformations
Wheelgeo
• Z.B. polygonale Netze Marc Alexa, TU Berlin, 2012 44
CG
Szenengraph Systeme  Es gibt eine Reihe von relevanten Systemen • Open Inventor • Performer • OpenSG • Java3D • X3D…  Die ersten 3 basieren auf OpenGL Marc Alexa, TU Berlin, 2012 45
CG
Szenengraph OpenSG  Designentscheidungen und Konstruk?on am Beispiel OpenSG  OpenSG • Mul?-­‐threading, mul?-­‐pipe • Open source • www.opensg.org Marc Alexa, TU Berlin, 2012 46
OpenSG CG
Knoten-­‐Graph  OpenSG ist ein Baum!  Warum kein DAG? • Zeiger können Knoten nicht iden?fizieren • Posi?on (z.B. akkumulierte Matrix) kann nicht gespeichert werden  DAG ist gar nicht nö?g für Mehrfachverwendung von Daten • Schlanker ‚backbone‘ (type Node) • Wiederverwendbare ‚cores‘ (type NodeCore) – Enthalten die knotenspezifischen Daten – Können mehrfach verwendet werden Marc Alexa, TU Berlin, 2012 47
OpenSG CG
Knotentypisierung (NodeCores) Node
Core
Env
Impostor
Group
Mesh
Drawable
Super
Surface
Billboard
Surface
Particles
Transform
Light
Point
Switch
Text
Directional
Dist.
LOD
Geom
Spot
Transform
Set
Slices
Geometry
Comp.
Transform
Volume
Prog.
Mesh
Bitmap
Texture
Marc Alexa, TU Berlin, 2012 48
CG
OpenSG Gruppenknoten  Group • Basis aller Gruppen • Traversiert alle Teilbäume  Transform • Beschreibt Transforma?on in lokale Koordinaten  Switch • Erlaubt keinen, einen, oder alle Teilbäume zu traversieren  Billboard • Dreht das lokale Koordinatensystem zum Betracher  DistanceLOD  Lights Marc Alexa, TU Berlin, 2012 49
OpenSG CG
DistanceLOD  DistanceLOD wählt einen Teilbaum abhängig von der Envernung zum Betrachter • Enthält eine sor?erte Liste von Envernungen, einen Wert mehr als Teilbäume • Die Liste definiert Intervalle für die Teilbäume Range[0]
nothing
Marc Alexa, TU Berlin, 2012 Range[1]
Child 0
Range[2]
Child 1
Range[3] Range[4]
Child 2
Child 3
nothing
50
CG
OpenSG DistanceLOD Marc Alexa, TU Berlin, 2012 51
OpenSG CG
Light  Lichtquellen brauchen zwei Bezugsknoten im Szenengraphen Root
• Einen Teilbaum der von der Lichtquelle beleuchtet wird – Definiert durch den Knoten im Baum – Alle Teilbäume werden beleuchtet • Einen Knoten der durch sein lokales Koordinatensystem Posi?on und Orien?erung beschreibt Frontlight
Street
Mountains
Car
Wheels
Beacon
Body
– Definiert durch einen weiteren Knoten (beacon) Marc Alexa, TU Berlin, 2012 52
OpenSG CG
Knotentypisierung (NodeCores) Node
Core
Env
Impostor
Group
Mesh
Drawable
Super
Surface
Billboard
Surface
Particles
Transform
Light
Point
Switch
Text
Directional
Dist.
LOD
Geom
Spot
Transform
Set
Slices
Geometry
Comp.
Transform
Volume
Prog.
Mesh
Bitmap
Texture
Marc Alexa, TU Berlin, 2012 53
OpenSG CG
Wie kommt die Szene auf den Schirm?  Traversieren des Graphen • Verschiedene ‘traversal ac?ons’ – Draw/render: Absetzen der OpenGL calls – Picking: Schneiden der Geometrie mit z.B. einem Strahl  Abbildung durch eine Kamera auf den Viewport Root
• Background – Ini?alisierung des Viewports Scene
Transform
• Camera • Foreground – Wird nach dem rendern aufgerufen Beacon
Camera
Viewport
Marc Alexa, TU Berlin, 2012 54
CG
Szenengraphen Zusammenfassung  Gerichteter azyklischer Graph bestehend aus • Geometrie • (Transforma?ons-­‐)Gruppen • Ak?onen (typ. Traversierung)  Datenstruktur zur Speicherung und Strukturierung von Szenendaten  Bearbeitet wird eine Szene, indem Ak?onen auf den Graphen oder Teilgraphen angewendet werden: • • • • Rendering Picking Berechnen von Bounding Boxen Schreiben in ein File Marc Alexa, TU Berlin, 2012 55

Documentos relacionados