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