Bildgenerierung Flashcards
(45 cards)
Scan Conversion bei Strecken- Naives Verfahren
Basiert auf der linearen Gleichung y = mx + b. Um eine Linie zwischen zwei Punkten (x1, y1) und (x2, y2) zu zeichnen, berechnet man zunächst die Steigung m und den y-Achsenabschnitt b. Anschließend werden für jeden x-Wert die entsprechenden y-Werte berechnet und die resultate als Pixel im Raster dargestellt.
Scan Conversion bei Strecken - inkrementell und unterschied reel und ganzzahlig
Reel:
wir nehmen m ist zwischen 0 und 1
Berechne steigung m, dann intialisiere variable akkumulator d mit 0 und iteriere über alle x werte.
Für jeden iterierten x wert wird die steigung auf d addiert, falls d > 0.5 ist (Fall NO) wird y++ und d– berechnet. Falls d <= 0.5 wird y beibehalten und die schleife geht weiter (Fall O). Anschließend wird natürlich der Pixel an den berechneten x und y koordinaten im Raster dargestellt.
Ganzzahlig:
Berechne zwischenwerte wie M = 2* (delta Y), halb = delta x, eins = 2 * halb, und initalisiere akkumulator d mit 0 und iteriere über x Werte.
Jedes mal wird m auf d addiert.
Falls d größer als “halb” ist muss y um 1 erhöht werden und “eins” von d abgezogen werden.
Anschließend wird natürlich der Pixel an den berechneten x und y koordinaten im Raster dargestellt.
Painters algorithmus
Idee: zeichne objekte von hinten nach vorne, d.h. je weiter weg desto früher wird objekt gezeichnet. Problem ist dass objekte die vollst. überdeckt würden trotzdem gezeichnet werden und sortierung schwer ist falls objekt sich schneiden (im 3d raum z.b wenn die objekte auf 2d projeziert werden)
bei polygonen
Sichtbarkeitskriterium: Wenn 𝑃𝑖 vollständig sichtbar ist und 𝑃𝑗 teilweise oder vollständig verdeckt ist, liegt 𝑃𝑖 vor 𝑃𝑗. In einem dreidimensionalen Raum bedeutet dies, dass kein Teil von 𝑃𝑗 über oder vor 𝑃𝑖 liegt, wenn Sie die Szene betrachten.
Tiefenkriterium: Die durchschnittliche Tiefe (Entfernung von einem Beobachtungspunkt, z. B. von der Kamera oder den Augen) der Eckpunkte von 𝑃𝑖 ist geringer als die durchschnittliche Tiefe der Eckpunkte von 𝑃𝑗. Das bedeutet, dass 𝑃𝑖 näher am Beobachtungspunkt liegt als 𝑃𝑗 und somit vor 𝑃𝑗 liegt.
Was hilft gegen Doppelpufferung
Gleichzeitiges Verändern und Auslesen des Bildwiederholspeichers führt zu unerwünschten Effekten.
Abhilfe: Verwende zwei Pixmaps.
Es wird immer nur die Pixmap modifiziert, die gerade nicht vom Video Controller ausgelesen wird
Scan Conversion bei Kreisen 2 Naive verfahren
- Naiver Ansatz_
wähle kleine schrittweite delta t
berechne achtel aus formel mit sinus und cosinus
berechne alle anderen achteln aus diesen koordinaten - Naiver Ansatz berechne
y >= x ist
inkrementiere x
berechne y koordinate aus formel mit wurzel
berechne alle anderen achteln aus diesen koordinaten
-> schneller als voriger ansatz aber langsam wg. Wurzel
Scan Conversion bei Kreisen 2 Naive verfahren 1 inkrementeller Ansatz
- Naiver Ansatz_
wähle kleine schrittweite delta t
berechne achtel aus formel mit sinus und cosinus
berechne alle anderen achteln aus diesen koordinaten - Naiver Ansatz berechne
y >= x ist
inkrementiere x
berechne y koordinate aus formel mit wurzel
berechne alle anderen achteln aus diesen koordinaten
-> schneller als voriger ansatz aber langsam wg. Wurzel - Inkrementeller Ansatz.
Von 3d zu geräte koordinaten
Im 3D-Koordinaten system können Modellierungstransformationen durchgeführt werden (Translation, Skalierung, Rotation usw.) und hat reelle Koordinaten
normalisierte Sichtkoordinaten -> 3d Clipping -> Projektion der normalisierten Sichtkoordinaten also
wird auf eine Projektionsebene projeziert (2D) mit Reelen Koordinaten
Diese Projektionsebene wird zu Geräte koordinaten umgerechnet i.d.R ganzzahlig
Falls Pixeldichte von Bildschirm ungleichmäßig bei Überführung von Projektionsebene auf Geräte koordinaten
Streckfaktor muss berechnet werden da pixel in einer richtung dichter sind als in der anderen. Dies wird beim abbilden von Projektionsebene auf Gerätekoordinaten berücksichtigt damit das Bild nicht verzerrt ist.
Pixelbasierter Clipping-Ansatz
-Algorithmus zur Darstellung von 3D-Objekten auf einem 2D-Bildschirm
-Bestimmung des Pixelbereichs, auf den das Projektionsfenster abgebildet wird
-Abbildung der relevanten Größen jedes Objekts auf Pixelkoordinaten
-Durchführung einer Scan Conversion, um die Pixel des Objekts zu erzeugen
-Überprüfung, ob jeder erzeugte Pixel innerhalb des zuvor bestimmten Pixelbereichs liegt
-Modifikation der Pixel, die innerhalb des Pixelbereichs liegen
Nachteile:
-unter Umständen unnötige Scan Conversion durchgeführt
- erlaubt kein 3D Clipping
- nur für pixel-orientierte Ausgabegeräte anwendbar
Vorteile:
- extrem einfach (auch für Hardware)
- erlaubt Clipping beliebiger Objekte; der Aufwand ist unabhängig von der Komplexität
- erlaubt Cliiping gegenüber beliebigen Flächen, nicht nur Projektionsfenster
2D-analytischer Ansatz
1.projizieren
2. abschneiden mit Projektionsfenster
3. alle sichtbaren Teilobjekte erzeugen
Vorteile:
-Scan conversion nur für sichtbare teile
-Cliiping nur einmal
-geht auch auf Vektor-orient. geräten
Nachteile:
-erlaubt kein 3D-clipping
-auch nicht sichtbaren Teile projiziert
-deutlich komplexere berechnungen, Scan conversion wird komplizierter
streckenclipping naiv
speichere alle punkte die im projektionsfenster liegen, entweder 0, 1, oder 2 in eine Liste. speichere alle schnittpunkte die die linie mit den 4 himmelsrichtungen hat in eine Liste. Falls liste nicht leer ist, dann ist die sichtbare strecke die verbindung der zwei punkten in der liste, sonst ist die linie nicht sichtbar. Probleme: Liste enthält nur einen Punkt oder Gerade schneidet eine Ecke (beide himmelsrichtungen gleichzeitig) und wird mehrfach berechnet…
streckenclipping cohen sutherland
weise endpunkten codes zu. (O.N,W,S)
wdh in einer schleife:
1. Falls Code1 und Code2 ungleich 0000
2. sind beide codes also code1 or code2 = 0000? dann ist die linie sichtbar.
3. finde erstes bit in (code1 or code2) das eine 1 ist, falls es so eine 1 gibt finde schnittpunkt mit der position des bits an position p
4. ersetze schnittpunkt mit q1 von code1, falls bit an p gesetzt ist. sonst ersetze q2 mit q
Vorteil: viele einfache fälle sind schnell ermittelt.
Nachteil viele operationen bzgl. schnittpunkte -> ineffizient
Strecken-Clipping nach Cyrus, Beck, Liang und Barsky
Idee: die Strecke sukzessive durch Schneiden mit den Fenstergeraden verkürzen, wie bei Cohen/Sutherland
aber: Schnittpunkte aus der Parameterdarstellung der Strecke gewinnen,
denn: Wenn der Parameterwert des Schnittpunkts bekannt ist, muss der Schnittpunkt selbst
oft gar nicht mehr explizit berechnet werden!
Polygon-Clipping nach Sutherland/Hodgman
Einzelne Kanten abgehen und Schnittpunkte mit dem Fenster und gebe diese als neue Ecken züruck
Hardware-realisierung: pipielining also mehrere Kanten parallel ablaufen
3D-analytischer Ansatz
Sichtvolumen = Form bestehend aus 6 ebenen als Projektionsfenster
Alles was nicht innerhalb des Sichtvolumens ist ausblenden, Objekte vor der Projektionsebene ebenfalls
Pixel-Orientierter Sichtbarkeits-Ansatz
Projektionsstrahl geht durch Pixel auf Projektionsebene und nimmt die Farbe des am nächsten liegenden Schittpunkts mit einem objekt
Schnittest ohne vorverarbeitung, schnitt von projektionsstrahl und polygonen:
Bestimme Schnittpunkt mit polygonebene, dann gucke entlang des polygonzugs ob schnittpunkt für jeden vektor links des gerichteten vektors liegt
Schnittet mit vorverarbeitung
vorverarbeitung:
führe ein geeignetes (𝑢, 𝑣, 𝑤)-Koordinatensystem ein,
bestimme minimale und maximale 𝑣-Koordinaten 𝑣min bzw. 𝑣max
speichere die beiden monotonen Polygonzüge in Datenstrukturen, die für binäre Suche
geeignet sind
Algorithmus: Bestimme monoton fallende bzw. steigende Teile des Polygons, dann für jedes dieser unterteilten polygon zuüge unterteile es für jeden Pfeil nochmal in ebenen auf und mittels binärer suche schaue in welcher ebene S liegt. dann ermittle mithilfe von links rechts test ob S im polygonzug liegt oder nicht
Zell Raster Technik
gröberes Zellraster als die Pixelmap festlegen und nur in den Zellen die von den Objekten berührt werden (Ermittlung durch scanconversion genauer aber aufwändiger bzw. bounding box, ungenauer aber schneller) die schnittpunkte mit objekten berechnen. Problem ist dass lange objekte wie halbleiterbahnen auf chips viele Zellen berühren dadurch dass sie unglücklich liegen und somit zu sehr vielen schnittests führen.
z-Puffer-Algorithmus
Zeichne Objekte der reihe nach, und überprüfe die Sichtbarkeit nur den bereits gezeichneten Objekten gegenüber
Berechne Z (Abstand zur Projektionsebene) koordinate und speichere diese für jeden Pixel im sog. Z-Puffer , die Farbe eines Objekts wird dann genutzt, wenn es am nächsten an der Projektionsebene liegt
+ ziemlich einfach und effizient, da auch 3D Scan Conversion inkrementell möglich ist.
+ praktisch keine reelle Rechnung (keine Schnitttests!)
+ in der Regel Hardware-unterstützt:
analytischer ansatz der sichtbarkeit
nimm an das jede strecke sichtbar ist. Gucke alle anderen polygone die diese strecke nicht als seite an und schaue welche teile der strecke hinter diesen polygonen liegt. markiere diese teile der strecke als unsichtbar an.
2 Methoden polyeder sichtbarkeit
methode 1: Jede Außenseite mit pfeilen die gegenuhrzeiger sinn gehen beschriften. Jede Seite die aus deiner perspektive gegen den uhrzeiger sinn geht ist nun eine sichtbare seite
methode 2. <u, n> > 0 d.h. spitzer winkel bedeutet seite ist sichtbar
Silhouetten-Algorithmus
Die neu gezeichneten Polygone außerhald (auch teilweise außerhalb) des bisherigen Kontur, benutzen um die Kontur zu erweitern und somit das Bild von vorne nach hinten zu zeichnen
ambientes licht, diffuse reflexion, winkelabhängige reflexion (specular reflection)
Ambientes Licht ist eine unspezifische Lichtquelle, die eine Szene gleichmäßig erhellt. Die Rückstrahlung eines Objekts ist von der einfallenden Lichtintensität und den Materialeigenschaften abhängig, wobei das reflektierte ambientes Licht gleichmäßig über die Oberfläche verteilt ist.
Diffuxe Reflexion entsteht wenn licht auf eine unebene Fläche trifft und gleichmäßig in alle Richtungen reflektiert wird. Das diffuse reflektiete licht hängt von einfallswinkel der lichtquellen sowie der normalen einer fläche ab. Alle Lichtquellen sind dabei relevant
winkelabhängige Reflexion tritt auf, wenn Licht auf eine glatte Oberfläche trifft und in einer bestimmten Richtung reflektiert wird, abhängig vom Einfallswinkel des Lichts und der Position des Betrachters. Dadurch entstehen glänzende Highlights auf der Oberfläche, die sich verändern, wenn der Betrachter oder die Lichtquelle ihre Position ändern. In Richtung des ausfallswinkels am stärksten