Bildgenerierung Flashcards
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