Kernaussagen zu Eingaben/Interaktion, Geometrie und Repräsentation in Computergraphik
- Ziele: Grundlagen der Eingabegeräte; physische/logische Geräte; Eingabemodi; ereignisgesteuerte Eingabe; Double Buffering; Programmierung von Eingaben mit WebGL.
- Projekt-Skizze (Ivan Sutherland, MIT 1963):
- Benutzer sieht Objekt auf dem Display; Benutzer wählt das Objekt mit einem Eingabegerät; Objekt verändert sich (Bewegung/Rotation/Transformation); Vorgang wiederholen.
- Graphische Eingabe:
- Geräte beschrieben durch physikalische Eigenschaften (Maus, Tastatur, Trackball, Grafiktablett, Joystick, Space Ball) oder logische Eigenschaften (was an die API zurückgegeben wird).
- Modi: Wie und wann Eingaben erhalten werden (Request vs. Event).
- Physische Geräte: Photodetektor, Threshold-Detektor, Trackball, Maus, Light Pen, Data Tablet, Joystick, Space Ball.
- Inkrementelle (Relative) Geräte:
- Data Tablet liefert direkte absolute Position; Maus/Trackball/Joystick liefern inkrementelle Eingaben oder Geschwindigkeiten.
- Müssen zu einer absoluten Position integriert werden; z.B. Rotation von Zylindern in der Maus; Roll des Trackballs; Erzeugt variable Empfindlichkeit.
- Logische Geräte:
- Aus C/C++-Code nicht direkt als Gerät erkennbar; Code liefert logische Eingaben (Zahl), unabhängig vom physischen Gerät.
- Graphische logische Geräte (PHIGS/GKS): Locator, Pick, Keyboard, Stroke, Valuator, Choice.
- X Window Input: Client-Server-Modell; Client ist das OpenGL-Programm; Graphics Server besitzt Display, Maus, Tastatur.
- Eingabemodi:
- Trigger sendet Information an das OS; Maus liefert Positionswerte; Tastatur ASCII-Codes.
- Request Mode: Eingaben werden nur beim Trigger geliefert (z.B. Tastatureingaben; Backspace, Edit, Enter).
- Event Mode: Mehrere Eingabegeräte; Trigger jedes Mal erzeugt ein Event; Ereignisse werden in einer Warteschlange abgelegt.
- Event-Typen: Window (Fenster-Events), Mouse, Motion, Keyboard, Idle.
- Callbacks: Callback-Funktionen/Event-Listener für erkannte Ereignisse; Browser-Ereignisschleife; Callback wird bei Eintreten des Ereignisses ausgeführt.
- Ausführung in einem Browser:
- URL, Browser, Web-Server, HTML, JS; Dateien werden asynchron geladen; JS-Engine; CPU/GPU; Framebuffer; Canvas.
- onload-Event: init()-Aufruf sicherstellen; window.onload = init;
- Rotierendes Quadrat: vier Punkte; Animation durch Neuberechnung mit varying θ; (
- (-
sin(θ), cos(θ)) etc.; Werte von θ ändern das Bild.)
- Besserer Weg: Vertex-Shader verwenden; θ als Uniform; Vertex-Shader berechnet Vertex-Koordinaten; rekursives Rendern.
- Render-Funktion (Beispiel):
- extthetaLoc=extgl.getUniformLocation(program,"theta");
- extrender(){ gl.clear(gl.COLOR<em>BUFFER</em>BIT); theta+=0.1; gl.uniform1f(extthetaLoc,exttheta); gl.drawArrays(gl.TRIANGLESTRIP,0,4); render();}
- Vertex-Shader (Beispiel):
- extattributevec4vPosition; extuniformfloattheta; extvoidmain() extglextPosition.x=−<br/>extsin(heta)vPosition.x+<br/>extcos(heta)vPosition.y; glextPosition.y=<br/>extsin(heta)vPosition.y+<br/>extcos(heta)vPosition.x; glextPosition.z=0.0; glextPosition.w=1.0;
- Double Buffering:
- Rendering erfolgt in einem Back-Puffer; Browser verwendet Double Buffering; Anzeige des Front-Puffers; Puffer-Swap erforderlich.
- Triggering einer Puffer-Swap:
- Browser aktualisiert ca. 60 Hz; zwei Optionen: Interval Timer, requestAnimationFrame.
- Interval Timer:
- setInterval(extrender,extinterval);
- requestAnimFrame:
- extfunctionrender() gl.clear(gl.COLOR<em>BUFFER</em>BIT); theta+=0.1; gl.uniform1f(thetaLoc,theta); gl.drawArrays(gl.TRIANGLESTRIP,0,4); requestAnimFrame(render);
10. Geometry
- Ziele: Einführung der Geometrie-Elemente; Skalare, Vektoren, Punkte; koordinausen-freie Operationen; Grundprimitiven: Liniensegmente, Polygone.
- Grundelemente: Geometrie in n-D; drei Basiselemente: Skalare, Vektoren, Punkte.
- Koordinaten-freie Geometrie: Physikalische Punkte existieren unabhängig von Koordinatensystem; Ergebnisse sollen unabhängig vom System sein; Beispiel: zwei Dreiecke sind identisch, wenn entsprechende Seitenlängen und eingeschlossener Winkel identisch.
- Skalare: Elemente eines Feldes mit Addition/Multiplikation; Beispiele Real-/Komplexzahlen; allein Skalar hat keine geometrischen Eigenschaften.
- Vektoren: Größe + Richtung; Beispiele: Kraft, Geschwindigkeit; wichtigste Grafikkonzeption: gerichtete Strecken.
- Vektor-Operationen: Inverses, Skalar-Multiplikation, Nullvektor, Summe zweier Vektoren; Well-known Head-to-Tail-Axiom.
- Lineare Vektorräume: Operationen: \ u = α v; u+v; Ausdrücke wie v = u + 2w - 3r.
- Vektoren haben keine Position; Vektorräume allein reichen nicht für Geometrie.
- Punkte: Ort in Raum; Operationen zwischen Punkten und Vektoren; Punkt-Punkt-Subtraktion ergibt Vektor; P = v + Q; v = P - Q.
- Affine Räume: Punkt + Vektorraum; Operationen: Vektor-Vektor-Addition; Skalar-Vektor-Multiplikation; Punkt-Vektor-Addition; 1-Punkt-Operationen: 1 · P = P; 0 · P = 0.
- Geraden: Punkt-α-Form P(α) = P0 + α d; Richtung d.
- Parametrische Form: x(α) = α x0 + (1-α) x1; y(α) = α y0 + (1-α) y1; Robust gegenüber anderen Formen.
- Strahlen und Liniensegmente: α ≥ 0 → Strahl; 0 ≤ α ≤ 1 → Linieabschnitt.
- Konvexität: Objekt konvex, wenn zwischen jedem Punkt zwei Punkte im Objekt alle Zwischengpunkte liegen.
- Affine Summen: P = α1 P1 + α2 P2 + … + αn Pn, Σ αi = 1; Falls zusätzlich αi ≥ 0, dann konvexe Hull.
- Konvexe Hülle: kleinstes konvexes Objekt, das Punkte P1..Pn enthält.
- Kurven und Flächen: Kurven P(α) (eine Funktion), Flächen P(α, β) (zwei Parameter); lineare Funktionen ergeben Ebenen/Polygone.
- Ebenen: Eine Ebene definiert durch Punkt und zwei Vektoren oder drei Punkte; P(α,β) = R + αu + βv; oder R + α(Q-R) + β(P-Q).
- Dreiecke: konvex-Abbildung als affine Summe; P(α,β) = α P1 + β P2 + (1-α-β) P3.
- Baryzentrische Koordinaten: Punkt in Dreiecksinnerem als affine Summe P = α1 P1 + α2 P2 + α3 P3, mit α1+α2+α3 = 1 und αi ≥ 0.
- Normalen: Jeder Ebene normaler Vektor n; aus P(α,β) = R + αu + βv folgt n = u × v; (P(α) - P) · n = 0.
11. Representation
- Ziele: Einführung von Dimension und Basis; Koordinatensysteme zur Repräsentation von Vektorräumen; Frames zur Repräsentation von affinen Räumen; Wechsel von Frames und Basen; homogene Koordinaten.
- Lineare Unabhängigkeit: α1 v1 + α2 v2 + … + αn vn = 0 ⇒ αi = 0; LI bedeutet, dass kein Vektor durch die anderen dargestellt werden kann.
- Dimension: Maximale Anzahl LI-Vektoren; in einem n-dimensionalen Raum bilden n LI-Vektoren eine Basis; jedes Vektor v lässt sich eindeutig als v = Σ αi vi darstellen.
- Representation: Brauchen Bezugssysteme, um Punkte/Objekte zu referenzieren; Weltkoordinaten vs. Kamerakoordinaten.
- Koordinatensysteme: v = Σ αi vi; Representation a = [α1, α2, …, αn]^T; relationale Darstellung hängt vom gewählten Basis ab.
- Beispiele: v = 2 v1 + 3 v2 - 4 v3 → a = [2, 3, -4]^T; in WebGL Startbasis vs. Kamera-Basis.
- Welche Darstellung korrekt? Beide; Vektoren haben keinen festen Ort.
- Frames: Bezugssystem + Ursprung; Frame definiert durch (P0, v1, v2, v3); Punkt P = P0 + Σ βi vi; Vektor v = Σ αi vi.
- Verwechslung Punkte vs. Vektoren: P = P0 + Σ βi vi (Punkte) vs. v = Σ αi vi (Vektoren); Vektor kann überall platziert werden.
- Eine einzige Repräsentation: Homogene Koordinaten; Punkte als [β1 β2 β3 1]^T; Vektoren als [α1 α2 α3 0]^T; P0 als Ursprungsvektoranteil.
- Homogene Koordinaten: 4D-Repräsentation (x, y, z, w); x' = w x, y' = w y, z' = w z; Rückführung: x = x'/w, y = y'/w, z = z'/w (w ≠ 0); w = 0 entspricht Vektor.
- Homogene Koordinaten in CG: Schlüssel zu Transformationsabläufen; alle Standardtransformationen (Rotation, Translation, Skalierung) lassen sich mit 4×4 Matrizen implementieren; Hardware-Pipeline arbeitet mit 4D; für Orthographically view kann w=0 (Vektoren) bzw. w=1 (Punkte) beibehalten; für Perspektive erforderliche Perspektiv-Division.
- Wechsel von Koordinatensystemen: Zwei Repräsentationen desselben Vektors in zwei Basen v1..vn und u1..un; Koeffizienten a = [α1 … αn]^T und b = [β1 … βn]^T; Beziehungen durch Transformationsmatrix.
- Darstellung zweiter Basis in Bezug auf erste: u1 = γ11 v1 + γ12 v2 + γ13 v3; u2 = γ21 v1 + γ22 v2 + γ23 v3; u3 = γ31 v1 + γ32 v2 + γ33 v3; Matrix M3×3 aus γ-Koeffizienten; a = M^T b (xy-Notation je nach Konvention).
- Change of Frames in Homogenen Koordinaten: Q0, u1, u2, u3 in Bezug auf P0, v1, v2, v3; 4×4 Matrix γ-Satz; P0, v1, v2, v3 vs Q0, u1, u2, u3.
- Arbeiten mit Repräsentationen innerhalb zweier Frames: a = [α1 α2 α3 α4]^T; b = [β1 β2 β3 β4]^T; α4 = β4 = 1 für Punkte; α4 = β4 = 0 für Vektoren; Matrix M ist 4×4; a = M^T b.
- Affine Transformationen: Jede lineare Transformation entspricht einem Frame-Wechsel; affine Transformationen erhalten Geraden; 12 Freiheitsgrade (DOF) im 4×4-Fall, da 4 Elemente festgelegt sind.
- Welt- und Kameraframes: Weltkoordinatenbasis; Model-View-Transformation (M) verändert die Weltkoordinaten in Kamerakoordinaten; initial M = I.
- Kamerabewegung: Kamera-Frame wird verschoben/gedreht; Beispielmatrix durch Translation d; 4×4-Matrix mit Translationsteil und Rotations-/Skalenteilen.
- Nächstes Thema: Transformationen (weiterführend).