2D-Computergrafik - 2D computer graphics

2D-Computergrafik ist die computerbasierte Generierung digitaler Bilder – meist aus zweidimensionalen Modellen (wie geometrischen 2D-Modellen , Text und digitalen Bildern) und mit dafür spezifischen Techniken. Es kann sich auf den Teilbereich der Informatik beziehen, der solche Techniken umfasst, oder auf die Modelle selbst.

Rastergrafik- Sprites (links) und Masken (rechts)

2D-Computergrafiken werden hauptsächlich in Anwendungen verwendet, die ursprünglich auf traditionellen Druck- und Zeichentechnologien entwickelt wurden, wie Typografie , Kartografie , technisches Zeichnen , Werbung usw. In diesen Anwendungen ist das zweidimensionale Bild nicht nur eine Darstellung einer realen Weltobjekt, aber ein unabhängiges Artefakt mit semantischem Mehrwert; zweidimensionale Modelle werden daher bevorzugt, weil sie eine direktere Kontrolle über das Bild ermöglichen als 3D-Computergrafiken (deren Ansatz eher der Fotografie als der Typografie ähnelt ).

In vielen Bereichen, wie Desktop Publishing , Engineering und Business , kann eine auf 2D-Computergrafiktechniken basierende Beschreibung eines Dokuments viel kleiner sein als das entsprechende digitale Bild – oft um einen Faktor von 1/1000 oder mehr. Diese Darstellung ist auch flexibler, da sie mit unterschiedlichen Auflösungen gerendert werden kann , um unterschiedlichen Ausgabegeräten gerecht zu werden . Aus diesen Gründen werden Dokumente und Abbildungen häufig als 2D-Grafikdateien gespeichert oder übertragen .

2D-Computergrafik begann in den 1950er Jahren auf der Grundlage von Vektorgrafiken . Diese wurden in den folgenden Jahrzehnten weitgehend durch rasterbasierte Geräte verdrängt . Die PostScript- Sprache und das X Window System- Protokoll waren bahnbrechende Entwicklungen auf diesem Gebiet.

Techniken

2D - Grafik - Modelle kombinieren können geometrische Modelle (auch als Vektorgrafiken ), digitale Bilder (auch als Rastergrafiken ), Text sein typeset (definiert durch Inhalt, Schriftstil und Größe, Farbe, Position und Orientierung), mathematische Funktionen und Gleichungen , und mehr. Diese Komponenten können durch zweidimensionale geometrische Transformationen wie Translation , Rotation , Skalierung modifiziert und manipuliert werden . In der objektorientierten Grafik wird das Bild indirekt durch ein Objekt beschrieben , das mit einem Self- Rendering- Verfahren ausgestattet ist – einem Verfahren, das den Bildpixeln durch einen willkürlichen Algorithmus Farben zuweist . Komplexe Modelle können durch die Kombination einfacherer Objekte in den Paradigmen der objektorientierten Programmierung erstellt werden .

Eine Translation verschiebt jeden Punkt einer Figur oder eines Raumes um den gleichen Betrag in eine bestimmte Richtung.
Eine Reflexion an einer Achse gefolgt von einer Reflexion an einer zweiten Achse parallel zur ersten führt zu einer Gesamtbewegung, die eine Translation ist.

In der euklidischen Geometrie bewegt eine Translation jeden Punkt um einen konstanten Abstand in eine bestimmte Richtung. Eine Translation kann als starre Bewegung beschrieben werden : Andere starre Bewegungen umfassen Drehungen und Reflexionen. Eine Translation kann auch als Addition eines konstanten Vektors zu jedem Punkt oder als Verschiebung des Ursprungs des Koordinatensystems interpretiert werden . Ein Übersetzungsoperator ist ein Operator mit

Wenn v ein fester Vektor ist, funktioniert die Translation T v als T v ( p ) = p + v .

Wenn T eine Übersetzung ist, dann ist das Bild einer Teilmenge A unter der Funktion T die Übersetzung von A um T . Die Übersetzung von A durch T v wird oft als A + v geschrieben .

In einem euklidischen Raum ist jede Translation eine Isometrie . Die Menge aller Translationen bildet die zum Raum selbst isomorphe Translationsgruppe T und eine Normaluntergruppe der euklidischen Gruppe E ( n ). Die Quotientengruppe von E ( n ) zu T ist isomorph zur orthogonalen Gruppe O ( n ):

E ( n ) / TO ( n ).

Übersetzung

Da eine Translation eine affine Transformation, aber keine lineare Transformation ist , werden normalerweise homogene Koordinaten verwendet, um den Translationsoperator durch eine Matrix darzustellen und damit linear zu machen. Somit schreiben wir den 3-dimensionalen Vektor w = ( w x , w y , w z ) unter Verwendung von 4 homogenen Koordinaten als w = ( w x , w y , w z , 1).

Um ein Objekt durch einen Vektor v zu verschieben , müsste jeder homogene Vektor p (in homogenen Koordinaten geschrieben) mit dieser Translationsmatrix multipliziert werden :

Wie unten gezeigt, ergibt die Multiplikation das erwartete Ergebnis:

Die Umkehrung einer Translationsmatrix kann durch Umkehren der Richtung des Vektors erhalten werden:

In ähnlicher Weise ergibt sich das Produkt der Translationsmatrizen durch Addition der Vektoren:

Da die Addition von Vektoren kommutativ ist , ist die Multiplikation von Translationsmatrizen daher auch kommutativ (im Gegensatz zur Multiplikation beliebiger Matrizen).

Drehung

In der linearen Algebra ist eine Rotationsmatrix eine Matrix , die verwendet wird, um eine Rotation im euklidischen Raum durchzuführen .

dreht Punkte in der xy - kartesischen Ebene gegen den Uhrzeigersinn um einen Winkel θ um den Ursprung des Koordinatensystems CARTESIAN . Um die Drehung unter Verwendung einer Rotationsmatrix R durchzuführen , muss die Position jedes Punktes durch einen Spaltenvektor v dargestellt werden , der die Koordinaten des Punktes enthält. Ein gedrehter Vektor wird unter Verwendung der Matrixmultiplikation R v erhalten . Da die Matrixmultiplikation keinen Einfluss auf den Nullvektor (dh auf die Koordinaten des Ursprungs) hat, können Rotationsmatrizen nur verwendet werden, um Drehungen um den Ursprung des Koordinatensystems zu beschreiben.

Rotationsmatrizen bieten eine einfache algebraische Beschreibung solcher Rotationen und werden ausgiebig für Berechnungen in Geometrie , Physik und Computergrafik verwendet . In 2-dimensionalem Raum, kann eine Drehung einfach durch eine beschriebenen Winkel θ der Drehung , aber es kann auch durch die 4 Einträge einer Rotationsmatrix mit 2 Zeilen und 2 Spalten dargestellt werden. Im dreidimensionalen Raum lässt sich jede Drehung als Drehung um einen gegebenen Winkel um eine einzelne feste Drehachse interpretieren (siehe Eulers Rotationstheorem ) und kann somit einfach durch einen Winkel und einen Vektor mit 3 Einträgen beschrieben werden. Sie lässt sich aber auch durch die 9 Einträge einer Rotationsmatrix mit 3 Zeilen und 3 Spalten darstellen. Der Begriff der Drehung wird normalerweise nicht in Dimensionen über 3 verwendet; es gibt eine Vorstellung von einer Rotationsverschiebung , die durch eine Matrix dargestellt werden kann, aber keine zugeordnete einzelne Achse oder Winkel.

Rotationsmatrizen sind quadratische Matrizen mit reellen Einträgen. Genauer gesagt können sie als orthogonale Matrizen mit Determinante  1 charakterisiert werden :

.

Die Menge aller solcher Matrizen der Größe n bildet eine Gruppe , die als spezielle orthogonale Gruppe SO( n ) bekannt ist .

In zwei Dimensionen

Eine Drehung eines Vektors gegen den Uhrzeigersinn um den Winkel θ . Der Vektor wird zunächst an der x-Achse ausgerichtet.

In zwei Dimensionen hat jede Rotationsmatrix folgende Form:

.

Dadurch werden Spaltenvektoren durch die folgende Matrixmultiplikation gedreht :

.

Die Koordinaten (x',y') des Punktes (x,y) nach der Drehung lauten also:

,
.

Die Drehrichtung des Vektors ist gegen den Uhrzeigersinn, wenn θ positiv ist (zB 90°) und im Uhrzeigersinn, wenn θ negativ ist (zB -90°).

.

Nicht standardmäßige Ausrichtung des Koordinatensystems

Eine Drehung um den Winkel θ mit nicht standardmäßigen Achsen.

Wenn ein rechtshändiges kartesisches Standardkoordinatensystem verwendet wird, mit der x- Achse nach rechts und der y- Achse nach oben, erfolgt die Drehung R( θ ) gegen den Uhrzeigersinn. Wenn ein linkshändiges kartesisches Koordinatensystem verwendet wird, wobei x nach rechts, aber y nach unten gerichtet ist, ist R( θ ) im Uhrzeigersinn. Solche nicht standardmäßigen Ausrichtungen werden in der Mathematik selten verwendet, sind jedoch in 2D-Computergrafiken üblich, bei denen der Ursprung oft in der oberen linken Ecke und die y- Achse entlang des Bildschirms oder der Seite liegt.

Siehe unten für andere alternative Konventionen, die die Richtung der Rotation ändern können, die von einer Rotationsmatrix erzeugt wird .

Gemeinsame Drehungen

Besonders praktisch sind die Matrizen für 90° und 180° Drehungen:

(90° Drehung gegen den Uhrzeigersinn)
(180° Drehung in beide Richtungen – eine halbe Umdrehung)
(270° gegen den Uhrzeigersinn, genauso wie eine 90° Rotation im Uhrzeigersinn)

In der euklidischen Geometrie , einheitliche Skalierung ( isotrope Skalierung , homogene Dilatation , Homothetie ) ist eine lineare Transformation , daß vergrößert (erhöht) oder verkleinert (abnimmt) , Objekte , die von einem Skalierungsfaktor , der die in alle Richtungen gleich ist. Das Ergebnis der gleichmäßigen Skalierung ist (im geometrischen Sinne) dem Original ähnlich . Normalerweise ist ein Skalierungsfaktor von 1 erlaubt, sodass auch kongruente Formen als ähnlich eingestuft werden. (Einige Schulbücher schließen diese Möglichkeit ausdrücklich aus, ebenso wie einige Quadrate von Rechtecken oder Kreise von Ellipsen ausschließen.)

Allgemeiner ist die Skalierung mit einem separaten Skalierungsfaktor für jede Achsenrichtung. Eine ungleichmäßige Skalierung ( anisotrope Skalierung , inhomogene Dilatation ) wird erhalten, wenn sich mindestens einer der Skalierungsfaktoren von den anderen unterscheidet; ein Sonderfall ist die gerichtete Skalierung oder Dehnung (in eine Richtung). Eine ungleichmäßige Skalierung ändert die Form des Objekts; zB kann sich ein Quadrat in ein Rechteck oder in ein Parallelogramm verwandeln, wenn die Seiten des Quadrats nicht parallel zu den Skalierungsachsen sind (die Winkel zwischen den achsenparallelen Linien bleiben erhalten, aber nicht alle Winkel).

Skalierung

Eine Skalierung kann durch eine Skalierungsmatrix dargestellt werden. Um ein Objekt mit einem Vektor v = ( v x , v y , v z ) zu skalieren, müsste jeder Punkt p = ( p x , p y , p z ) mit dieser Skalierungsmatrix multipliziert werden :

Wie unten gezeigt, ergibt die Multiplikation das erwartete Ergebnis:

Eine solche Skalierung verändert den Durchmesser eines Objekts um einen Faktor zwischen den Skalierungsfaktoren, die Fläche um einen Faktor zwischen dem kleinsten und dem größten Produkt zweier Skalierungsfaktoren und das Volumen um das Produkt aller drei.

Die Skalierung ist genau dann einheitlich, wenn die Skalierungsfaktoren gleich sind ( v x = v y = v z ). Wenn alle Skalierungsfaktoren außer einem gleich 1 sind, haben wir eine Richtungsskalierung.

In dem Fall , wo v x = v y = v z = k , wird die Skalierung auch eine genannte Erweiterung oder Ausdehnung um einen Faktor k, die Erhöhung der Fläche um einen Faktor von k 2 und das Volumen um einen Faktor von k 3 .

Skalierung im allgemeinsten Sinne ist jede affine Transformation mit einer diagonalisierbaren Matrix . Es schließt den Fall ein, dass die drei Skalierungsrichtungen nicht senkrecht sind. Es umfasst auch den Fall, dass ein oder mehrere Skalierungsfaktoren gleich Null sind ( Projektion ) und den Fall von einem oder mehreren negativen Skalierungsfaktoren. Letzteres entspricht einer Kombination aus eigentlicher Skalierung und einer Art Spiegelung: entlang von Linien in eine bestimmte Richtung nehmen wir die Spiegelung im Schnittpunkt mit einer Ebene, die nicht senkrecht zu sein braucht; daher ist sie allgemeiner als die gewöhnliche Reflexion in der Ebene.

Homogene Koordinaten verwenden

In der projektiven Geometrie , die häufig in der Computergrafik verwendet wird , werden Punkte mit homogenen Koordinaten dargestellt . Um ein Objekt mit einem Vektor v = ( v x , v y , v z ) zu skalieren , müsste jeder homogene Koordinatenvektor p = ( p x , p y , p z , 1) mit dieser projektiven Transformationsmatrix multipliziert werden:

Wie unten gezeigt, ergibt die Multiplikation das erwartete Ergebnis:

Da die letzte Komponente einer homogenen Koordinate als Nenner der anderen drei Komponenten angesehen werden kann, kann mit dieser Skalierungsmatrix eine gleichmäßige Skalierung um einen gemeinsamen Faktor s (uniform scaling) erreicht werden:

Für jeden Vektor p = ( p x , p y , p z , 1) hätten wir

was homogenisiert würde zu

Direkte Malerei

Eine bequeme Möglichkeit, ein komplexes Bild zu erstellen, besteht darin, mit einer leeren "Leinwand" -Rasterkarte (einem Array von Pixeln , auch als Bitmap bekannt ) zu beginnen, die mit einer einheitlichen Hintergrundfarbe gefüllt ist, und dann "zeichnen", "malen" oder "einfügen" einfache Farbflecken in einer geeigneten Reihenfolge darauf. Insbesondere kann die Leinwand der Bildspeicher für eine Computeranzeige sein .

Einige Programme legen die Pixelfarben direkt fest, aber die meisten verlassen sich auf eine 2D- Grafikbibliothek oder die Grafikkarte des Computers , die normalerweise die folgenden Operationen implementieren:

  • fügen Sie ein bestimmtes Bild an einem bestimmten Versatz auf die Leinwand ein;
  • eine Zeichenfolge mit einer bestimmten Schriftart an einer bestimmten Position und einem bestimmten Winkel schreiben;
  • malen Sie eine einfache geometrische Form , z. B. ein Dreieck, das durch drei Ecken definiert ist, oder einen Kreis mit gegebenem Mittelpunkt und Radius;
  • Zeichnen Sie ein Liniensegment , einen Bogen oder eine einfache Kurve mit einem virtuellen Stift einer bestimmten Breite.

Erweiterte Farbmodelle

Text, Formen und Linien werden mit einer vom Kunden angegebenen Farbe gerendert. Viele Bibliotheken und Karten bieten Farbverläufe , die praktisch für die Erzeugung von sich fließend variierenden Hintergründen, Schatteneffekten usw. sind (siehe auch Gouraud-Schattierung ). Die Pixelfarben können auch einer Textur entnommen werden, zB einem digitalen Bild (damit emuliert man aufreibbare Rastertöne und die sagenumwobene Schachbrettfarbe, die es früher nur in Cartoons gab ).

Das Malen eines Pixels mit einer bestimmten Farbe ersetzt normalerweise seine vorherige Farbe. Viele Systeme unterstützen jedoch das Malen mit transparenten und durchscheinenden Farben, die nur die vorherigen Pixelwerte modifizieren. Die beiden Farben können auch auf komplexere Weise kombiniert werden, z. B. durch Berechnen ihres bitweisen exklusiven oder . Diese Technik ist als Farbinvertierung oder Farbinversion bekannt und wird häufig in grafischen Benutzeroberflächen zum Hervorheben, Zeichnen mit Gummibändern und anderen flüchtigen Malen verwendet – da das erneute Malen derselben Formen mit derselben Farbe die ursprünglichen Pixelwerte wiederherstellt.

Schichten

Ein 2D - animierten Charakter Compositing mit 3D - Hintergründe mit Layern.

Die in der 2D-Computergrafik verwendeten Modelle sehen normalerweise keine dreidimensionalen Formen oder dreidimensionale optische Phänomene wie Beleuchtung, Schatten , Reflexion , Brechung usw. vor. Sie können jedoch in der Regel mehrere Schichten modellieren (konzeptionell aus Tinte, Papier, oder Film, opak, durchscheinend oder transparent – in einer bestimmten Reihenfolge gestapelt Die Reihenfolge wird normalerweise durch eine einzelne Zahl definiert (die Tiefe der Ebene oder der Abstand vom Betrachter).

Schichtmodelle werden manchmal als "2 12 -D-Computergrafik" bezeichnet. Sie ermöglichen die Nachahmung traditioneller Zeichen- und Drucktechniken auf der Basis von Film und Papier, wie Schneiden und Kleben; und erlauben Sie dem Benutzer, jede Ebene zu bearbeiten, ohne die anderen zu beeinflussen. Aus diesen Gründen werden sie in den meisten Grafikeditoren verwendet . Layered-Modelle ermöglichen auch ein besseres räumliches Anti-Aliasing komplexer Zeichnungen und liefern ein solides Modell für bestimmte Techniken wie Gehrungsverbindungen und die Gerade -Ungerade-Regel .

Schichtmodelle werden auch verwendet, um es dem Benutzer zu ermöglichen, beim Anzeigen oder Drucken eines Dokuments unerwünschte Informationen zu unterdrücken, z. B. Straßen oder Eisenbahnen aus einer Karte , bestimmte Prozessschichten aus einem integrierten Schaltplan oder handschriftliche Anmerkungen aus einem Geschäftsbrief.

In einem ebenenbasierten Modell wird das Zielbild durch "Malen" oder "Einfügen" jeder Ebene in der Reihenfolge abnehmender Tiefe auf der virtuellen Leinwand erzeugt. Konzeptionell wird jede Ebene zunächst einzeln gerendert , wodurch ein digitales Bild mit der gewünschten Auflösung entsteht, das dann Pixel für Pixel über die Leinwand gemalt wird. Vollständig transparente Teile einer Ebene müssen natürlich nicht gerendert werden. Das Rendern und Malen kann parallel erfolgen, dh jedes Schichtpixel kann auf die Leinwand gemalt werden, sobald es durch den Rendervorgang erzeugt wurde.

Ebenen, die aus komplexen geometrischen Objekten (wie Text oder Polylinien ) bestehen, können in einfachere Elemente ( Zeichen bzw. Liniensegmente ) zerlegt werden, die dann in einer bestimmten Reihenfolge als separate Ebenen gemalt werden. Diese Lösung kann jedoch unerwünschte Aliasing- Artefakte erzeugen , wo immer zwei Elemente dasselbe Pixel überlappen.

Siehe auch Portable Document Format#Layers .

Hardware

Moderne Computergrafikkarte zeigt fast überwiegend Rastertechniken verwenden, um den Bildschirm in ein rechteckiges Raster von Teilungs Pixeln , aufgrund der relativ niedrig Kosten der rasterbasierten Videohardware im Vergleich mit Vektorgrafikhardware. Die meisten Grafikhardware bietet interne Unterstützung für Blitting- Operationen oder Sprite- Zeichnen. Ein dem Blitting gewidmeter Co-Prozessor wird als Blitter- Chip bezeichnet .

Zu den klassischen 2D -Grafikchips und Grafikprozessoren der späten 1970er bis 1980er Jahre, die in 8-Bit bis frühen 16-Bit , Arcade-Spielen , Videospielkonsolen und Heimcomputern verwendet werden , gehören:

Software

Viele grafische Benutzeroberflächen (GUIs), darunter macOS , Microsoft Windows oder das X Window System , basieren hauptsächlich auf grafischen 2D-Konzepten. Eine solche Software stellt eine visuelle Umgebung für die Interaktion mit dem Computer bereit und enthält im Allgemeinen eine Form von Fenstermanager , um den Benutzer bei der konzeptionellen Unterscheidung zwischen verschiedenen Anwendungen zu unterstützen. Die Benutzerschnittstelle innerhalb einzelner Softwareanwendungen ist typischerweise ebenfalls 2D-Natur, teilweise aufgrund der Tatsache, dass die meisten gängigen Eingabegeräte , wie beispielsweise die Maus , auf zwei Bewegungsdimensionen beschränkt sind.

2D-Grafiken sind in Steuerungsperipheriegeräten wie Druckern, Plottern, Bogenschneidemaschinen usw. sehr wichtig. Sie wurden auch in den meisten frühen Videospielen verwendet ; und werden immer noch für Karten- und Brettspiele wie Solitär , Schach , Mahjongg usw. verwendet.

2D-Grafikeditoren oder Zeichenprogramme sind Software auf Anwendungsebene zum Erstellen von Bildern, Diagrammen und Illustrationen durch direkte Manipulation (über die Maus, ein Grafiktablett oder ein ähnliches Gerät) von 2D-Computergrafik-Grundelementen. Diese Editoren stellen im Allgemeinen sowohl geometrische Grundelemente als auch digitale Bilder bereit ; und einige unterstützen sogar prozedurale Modelle. Die Illustration wird intern normalerweise als geschichtetes Modell dargestellt, oft mit einer hierarchischen Struktur, um die Bearbeitung zu erleichtern. Diese Editoren geben im Allgemeinen Grafikdateien aus, bei denen die Ebenen und Grundelemente separat in ihrer ursprünglichen Form beibehalten werden. MacDraw , das 1984 mit der Macintosh- Computerlinie eingeführt wurde, war ein frühes Beispiel für diese Klasse; jüngste Beispiele sind die kommerziellen Produkte Adobe Illustrator und CorelDRAW sowie die kostenlosen Editoren wie xfig oder Inkscape . Es gibt auch viele 2D-Grafikeditoren, die auf bestimmte Arten von Zeichnungen wie elektrische, elektronische und VLSI-Diagramme, topografische Karten, Computerschriftarten usw. spezialisiert sind.

Bildredakteure sind spezialisiert auf die Bearbeitung digitaler Bilder , hauptsächlich durch Freihandzeichnen/Malen und Signalverarbeitung . Sie verwenden typischerweise ein Direkt-Malerei-Paradigma, bei dem der Benutzer virtuelle Stifte, Pinsel und andere freihändige künstlerische Instrumente steuert, um Farbe auf eine virtuelle Leinwand aufzutragen. Einige Bildbearbeitungsprogramme unterstützen ein mehrschichtiges Modell; Um jedoch Signalverarbeitungsvorgänge wie das Verwischen zu unterstützen, wird jede Ebene normalerweise als digitales Bild dargestellt. Daher werden alle vom Editor bereitgestellten geometrischen Primitive sofort in Pixel umgewandelt und auf die Leinwand gemalt. Der Name Rastergrafikeditor wird manchmal verwendet, um diesen Ansatz von allgemeinen Editoren zu unterscheiden, die auch Vektorgrafiken bearbeiten . Eines der ersten populären Bildeditoren war von Apple ‚s MacPaint , Begleiter zu Macdraw . Moderne Beispiele sind der kostenlose GIMP- Editor und die kommerziellen Produkte Photoshop und Paint Shop Pro . Auch diese Klasse umfasst viele Fachredakteure – für Medizin, Fernerkundung, digitale Fotografie usw.

Entwicklungsanimation

Mit dem Wiederaufleben der 2D-Animation sind kostenlose und proprietäre Softwarepakete für Amateure und professionelle Animatoren weit verbreitet. Das Hauptproblem bei der 2D-Animation sind die Arbeitsanforderungen. Mit Software wie RETAS UbiArt Framework und Adobe After Effects können Farbgebung und Compositing in kürzerer Zeit durchgeführt werden.

Es wurden verschiedene Ansätze entwickelt, um den Prozess der digitalen 2D-Animation zu unterstützen und zu beschleunigen. Durch das Generieren von Vektorgrafiken in einem Tool wie Adobe Flash kann ein Künstler beispielsweise softwaregesteuerte automatische Farb- und Zwischenfarben verwenden .

Programme wie Blender ermöglichen es dem Benutzer, entweder 3D-Animationen oder 2D-Animationen durchzuführen oder beides in seiner Software zu kombinieren, was das Experimentieren mit mehreren Animationsformen ermöglicht.

Siehe auch

Verweise