Startseite   |  Site map   |  A-Z artikel   |  Artikel einreichen   |   Kontakt   |  
  


informatik artikel (Interpretation und charakterisierung)

Grafik

Banking

Effekte:


1. Java
2. Viren

Split Screen: Diese Technik dient dazu, zwei unabhängige Bereiche am Bildschirm anzuzeigen. Dabei wird über das Line-Compare- (oder auch Split-Screen-) Register der Bildschirm in einen oberen beweglichen und einen unteren statischen Teil gespalten (in den 200-Zeilen-Modi ist dieser Wert zu verdoppeln). Während der Darstellung des Bildes zählt der VGA permanent die aktuelle (physikalische !) Zeile mit. Diese Zeilennummer befindet sich in einem (leider !!!) nicht über Port-Adressen zugänglichen Register, das jedoch intern zu einem Vergleich mit dem Line-Compare-Register (CRTC, Index 18h) herangezogen wird. Erreicht es den Wert, den dieses Register vorgibt, so wird der Adreßzähler mit 0 geladen, das heißt die Darstellung beginnt in dieser Zeile mit den Daten, die sich an Offset 0 des Bildschirmspeichers befinden. Weil sich die Zeilennummer grundsätzlich nicht in 8 Bit unterbringen läßt (der VGA kennt keinen Modus mit weniger als 350 Zeilen, auch 200-Zeilen-Modi werden durch 400 physikalische zeilen erzeugt), ist das Line-Compare-Register auf drei, bei Super-VGA-Karten sogar auf vier Register aufgeteilt. Weil auch andere Register, die vor allem das vertikale Timing betreffen, 8 Bit überschreiten, wird aus Platzgründen kein zusätzliches Register eingeführt, sondern alle "überlaufenden" Bits dieser Register in zwei (bei Super-VGA drei) neuen Registern zusammengefaßt. Das erste dieser Register ist das Overflow-Register, das - nomen est omen - die Überläufe der vertikalen Timing-Register aufnimmt. Unter anderem befindet sich hier in Bit 4 (übrigens das einzige dieses Registers, das nicht über das Protection-Bit des Registers 11h geschützt ist) das Bit 8 des Line-Compare-Registers. Line-Compare-Bit 9, das bei diesen Auflösungen jedoch noch nicht benötigt wird, befindet sich im zweiten Überlaufregister, dem Register Maximum Row Address, an Bit 6. Möchte man Line Compare also setzen, muß man die Bits der Zeilennummer durch Bit-Verschiebungen und Maskierungen auf diese drei Register verteilen. Setzt man den Bildschirmstart mit Hilfe der Linear-Starting-Address-Register 0Ch und 0Dh auf eine größere Position, beispielsweise den Start der Seite 2, dann wird in der oberen Hälfte unterhalb der im Line-Compare-Register gesetzten Zeile der Inhalt des Bildschirmspeicher-Starts angezeigt. Nun läßt sich der obere Bereich durch die Linear-Starting-Address beliebig verschieben und in alle Richtungen scrollen, während der untere immer den gleichen Inhalt aufweist.

Scrolling:
Bis jetzt benutzten wir das Register Linear Starting Address des CRTC (Register Nr. 0Ch/0Dh) zum Umschalten der Bildschirmseiten. Dazu wurde der Offset dieser Seite berechnet (Seitennummer x 16.000) und in dieses Register geschrieben. Genausogut lassen sich aber auch beliebige Zwischenwerte schreiben und der Anfang des dargestellten Bereichs somit frei im RAM verschieben. Wird ein neues Bild durch den Kathodenstrahl aufgebaut, bezieht dieser die Bilddaten nicht mehr aus dem Anfang des Bildschirmspeichers, sondern vom Beginn der im Register Linear Starting Address festgelegten Stelle. Auf diese Weise läßt sich der physikalische Bildschirm, d. h. der Bereich, der letzten Endes auf dem Monitor erscheint, wie ein Fenster über das ganze VGA-RAM verschieben, so daß immer ein beliebiger Ausschnitt eines 256 KB großen Bildes angezeigt wird. Verschiebt man diesen Bildschirmstart innerhalb des RAM, bewegt sich das Fenster in diese Richtung, so daß die Grafik auf dem Monitor entgegengesetzt bewegt wird. Eine Erhöhung der Linear Starting Address um 80 bedeutet also eine Verschiebung des Bildinhalts um eine Zeile (320 Pixel / 4 Planes = 80 Byte lang) nach oben. Der Inhalt der Zeile 0 befindet sich außerhalb des Fensters, und Zeile 200 rückt von unten nach und erscheint als unterste Zeile. Jetzt sind also die Zeilen 1 - 200 sichtbar. Durch weiteres Erhöhen des Registers in Schritten von 80 Byte kann man unter minimalem Einsatz von Rechenleistung ein vertikales Scrolling des gesamten Bildschirminhalts erreichen. Oft möchte man nicht nur vertikal, sondern auch horizontal scrollen, man denke nur an ein vier Bildschirmseiten großes Logo, das immer nur ausschnittsweise sichtbar ist und sozusagen "unter" dem Bildschirm hin und her bewegt wird. Die Lösung scheint sehr einfach: Bisher wurde das Register Linear Starting Address immer noch in Schritten von 80 bewegt, warum also nicht einfach in Einerschritten zählen? In diesem Fall wird jedoch das, was am linken Bereich herausgescrollt wird, direkt am rechten Rand wieder angefügt. Dies resultiert einfach daraus, daß die Zeilen immer noch direkt hintereinander im Speicher liegen. Hat man nun den Bildschirmstart zum Beispiel um ein Byte verschoben (Linksverschiebung um 40 Pixel), so stellt der CRTC in der ersten Rasterzeile die Bytes 1 bis 80 (statt normalerweise 0 - 79) dar; das Byte 80 gehört jedoch eigentlich schon zur zweiten Zeile der Vorlage, dadurch wird jedes Byte, das am linken Rand herausgescrollt wird, eine Zeile höher am rechten Rand wieder angefügt. Die Lösung des Problems liegt darin, den Bildschirm virtuell auf 640 Pixel Breite zu vergrößern. Angezeigt werden dabei weiterhin nur 320 Punkte, aber rechts "neben" dem Monitor werden weitere theoretische Punkte angefügt, so daß die vier Bildschirmseiten nicht mehr übereinander liegen wie beim vertikalen Scrolling, sondern ein Quadrat bilden. Dann erscheinen links herausgescrollte Punkte ganz rechts außen (x-Koordinaten 636 - 639) im unsichtbaren Bereich, und neue Punkte werden vom unsichtbaren Bereich in den sichtbaren hineingescrollt. Anders gesagt kann man das Fenster, das der Bildschirm ja eigentlich im Mode X darstellt, auch horizontal bewegen, weil jetzt Platz dazu da ist (waagrecht nebeneinander liegende Bildschirmseiten). Doch wie erzeugt man diesen besonderen Modus? Der VGA besitzt natürlich auch hierfür ein Register. Es handelt sich dabei um das Register 13h des CRTC: Row Offset. Hinter diesem unscheinbaren Namen verbergen sich ungeahnte Nöglichkeiten. Hier wird nämlich die Sprungweite angegeben, um die beim Erreichen des rechten Rands durch den Kathodenstrahl der interne Zeiger auf die Daten (Linear Counter) weiterbewegt werden soll. Dies entspricht also dem Abstand der Zeilen innerhalb des Bildschirmspeichers, also deren Länge! Normalerweise enthält dieses Register sowohl im Mode 13h als auch im Mode X den Wert 40, was einer Breite von 80 Byte entspricht. Das Register zählt in Word-Schritten, d. h. 80 Byte Breite werden als 40 Word gezählt. Im Mode 13h sind die Zeilen zwar 320 Byte lang, aber auch die Berechnungsgrundlage, die der größten durch die CPU adressierbaren Einheit entspricht, wird vervierfacht von einem Byte auf ein Doubleword, wodurch als programmierter Wert wieder 320/8 = 40 herauskommt. Nun lassen sich natürlich auch größere Werte einsetzen. Schreibt man in dieses Register zum Beispiel den Wert 80, heißt das, daß die Zeilen einen Abstand, also eine Länge, von 160 Byte haben (entspricht 640 Pixel). Dadurch entstehen natürlich Lücken von 80 Byte Länge zwischen den einzelnen 80-Byte-Zeilen, die von den rechts überstehenden, unsichtbaren Zeilenhälften aufgefüllt werden.

Zusammenfahren eines Bildes:
Eine Anwendung der Kombination aus Split Screen und Scrolling besteht im Zusammenfahren eines Bildes aus zwei Hälften. Dabei wird die obere Hälfte, die von oben zur Mitte gefahren wird, durch die Linear Starting Address kontrolliert, sie wird also einfach nur vertikal (in diesem Fall nach unten) gescrollt. Dabei ist darauf zu achten, daß Bildschirmseite 1 leer oder mit einer bestimmten Farbe gefüllt ist, da sie zu Beginn zur Hälfte sichtbar ist. Die untere Hälfte wird durch das Splitting gesteuert: Durch Verringern der Zeilennummer wird der Beginn des Split-Screens nach oben geschoben, also zur Mitte hin.

Smooth-Scrolling im Textmodus:
Scrolling im Textmodus funktioniert eigentlich genauso wie im Grafikmodus: Über die Startadresse Linear Starting Address) wird der sichtbare Ausschnitt des Bildschirmspeichers verschoben. Die Sache hat jedoch einen Haken: Dieses Scrolling ruckelt stark, weil immer um ganze Zeichen verschoben wird, während im Grafikmodus um einzelne Punkte verschoben werden kann. Das liegt am Aufbau des Bildschirmspeichers im Textmodus: Informationen für einzelne Punkte liegen hier nicht mehr vor, so daß auch die Linear Starting Address sich immer auf ganze Zeichen bezieht und nur ein sehr grobes Scrolling erlaubt. Die Rettung kommt mal wieder von neuen Registern des VGA, die nur darauf warten, sich dieser Problematik anzunehmen. Es handelt sich dabei um das horizontale und das vertikale Panning-Register. Unter Panning versteht man generell die Verschiebung des Bildinhalts um einen Punkt, wobei diese beiden Register eben dies auch im Textmodus erlauben. Um nun sanft zu scrollen, verschiebt man einfach den Bildinhalt durch Panning in Einzelschritten in die gewünschte Richtung. Hat man dabei ein Zeichen weit grscrollt, setzt man das entsprechende Panning-Register wieder auf seinen Ursprungswert und modifiziert nun das Register Linear Starting Address. Dies ist erforderlich, weil Panning nur bis zu einem Zeichen Breite bzw. Höhe möglich ist und somit nur zur Feinsteuerung dienen kann, während die Linear Starting Address weiterhin für das Grobscrolling sorgt. Das Vertikal-Panning wird durch das Register 8 des CRTC (Initial Row Address) erzeugt, dessen Bits 4 - 0 angeben, mit welcher Grafikzeile bei der Darstellung der ersten Scan-Zeile begonnen wird. Erhöht man diesen Wert also um 1, wird mit der Zeile 1 innerhalb des Zeichensatzes begonnen, der Bildschirminhalt bewegt sich um eine Zeile nach oben. Für das horizontale Panning dagegen ist der Attribute Controller zuständig, dessen Register 13h (Horizontal Pixel Panning) für gleichmäßige Bewegung in x-Richtung sorgt. Bei diesem Register ist jedoch die etwas ungewöhnliche Wertezuweisung zu beachten: Ein Wert von 0 bedeutet ein Panning um einen Pixel, eine 1 bis 7 bedeutet Panning um 2 bis 8 Pixel, wogegen ein Wert von 8 auf agr kein Panning hindeutet. Die erforderliche Formatumwandlung wird - ohne langsame If-Strukturen - durch eine einfache Rechnung erledigt:
Register-Wert = (Panning-Wert - 1) mod 9
Wegfließendes Bild:
Es wurde bereits öfter der Double-Scan-Modus des VGA erwähnt. Diese Zeilenverdoppelung (um bei physikalischer Auflösung von 400 Zeilen 200 Grafikzeilen darzustellen) wird je nach BIOS entweder über das dafür zuständige Bit 7 (Double-Scan Enable) des CRTC-Registers 9 (Maximum Row Address) erreicht oder durch Einsetzen von 1 statt 0 in die Bits 4 - 0. In diesen Bits befindet sich in den Textmodi die Anzahl der Rasterzeilen pro Zeichenzeile minus 1, in VGA-Textmodi also 15, es bestimmt damit die Anzahl Rasterzeilen, in denen immer wieder die gleichen Informationen aus dem Bildschirmspeicher geholt werden. Im Textmodus sind diese Rasterzeilen natürlich trotzdem nicht gleich, weil jedesmal eine andere Zeile des Zeichensatzes verwendet wird. Im Grafikmodus gibt es jedoch keinen Zeichensatz, so daß tatsächlich immer wieder die gleichen Daten dargestellt werden. Ein Wert von 1 in diesen Bits sorgt also auch für eine Zeilenverdopplung, es wird praktisch von jeder Zeile eine Kopie erzeugt. Was passiert nun, wenn man noch höhere Werte einsetzt? Genau das Erwartete: Es werden noch mehr Kopien erzeugt, die Pixel werden in y-Richtung in die Länge gezogen, die vertikale Auflösung halbiert. Im Prinzip ist dieses Vorgehen auch im Textmodus möglich, führt dort jedoch zu unansehlichen Bildern. Dies kommt daher, daß der VGA hier zwar wie im Grafikmodus auch die Speicherinhalte verdoppelt, verdreifacht usw., daß für diese neuen Zeilen aber keine Zeichensatzinformationen mehr vorliegen, so daß hier nur Bit-Müll erscheint. Dieser Effekt bleibt also auf den Grafikmodus beschränkt. Bei der Wahl eines geeigneten Bildes ist zu beachten, daß am oberen Rand mindestens 13 Zeilen schwarz sind oder eine andere gemeinsame Farbe haben, weil das Bild sonst nicht herausfließt, sondern einfach nur in die Länge gezogen wird. Bei 400 Zeilen vertikaler Auflösung und einem maximalen Wert von 31 für das Register Maximum Row Address wird jede Zeile 32mal dargestellt, was zu 400/32 = 12.5 sichtbaren Zeilen führt, die alle die gleiche Farbe aufweisen müssen, damit das ganze Bild hinterher einfarbig ist.
Copper-Balken:
Die bisherigen Effekte ließen sich alle im wesentlichen durch einfache Umprogrammierung bestimmter VGA-Register erzielen. Die CPU übernahm dabei nur die Steuerung, z. B. die stetige Veränderung der Bildschirmstartadresse zum Scrolling. Jetzt erhält die CPU eine neue Aufgabe: Sie soll nicht mehr nur steuern, sondern auch Kontrollaufgaben wahrnehmen. Kopieren ist dagegen weiterhin tabu. Das bedeutet, daß die CPU ständig den VGA überwacht, und an bestimmten Rasterzeilen Modifikationen an VGA-Registern vornimmt. Dadurch läßt sich ein Effekt erzeugen, der bereits zu C64-Zeiten beliebt war: die Copper-Balken. Dabei handelt es sich um waagrecht verlaufende Balken bestimmter Farbe, die sich ständig in y-Richtung herauf- und herunterbewegen, während andere Grafikeffekte wie Text-Scroller gleichzeitig und teilweise vor ihnen ablaufen. Aus dem Erscheinungsbild dieser Balken läßt sich bereits ihre grundlegende Funktionsweise herleiten: Der Bildschirmspeicher enthält an den betreffenden Stellen überhaupt keine Daten, er ist z. B. mit Nullen gefüllt, so daß von hier aus keine Copper ausgehen können. Allerdings wird in jeder neuen Rasterzeile neu definiert, was diese Null eigentlich bedeutet, so daß sie einmal für ein schwaches Rot, in einer anderen Zeile aber für ein helles Gelb stehen kann. Auf diese Art und Weise lassen sich übrigens auch wesentlich mehr als 256 Farben auf dem Bildschirm darstellen, weil theoretisch jede Rasterzeile 256 Farben enthalten kann, die nach jeder Zeile eine andere Bedeutung haben. In der Praxis ist diese Farbenvielfalt jedoch sehr eingeschränkt, weil innerhalb eines Retrace nicht eine ganze Palette gesetzt werden kann, sondern nur eine bestimmte Anzahl, je nach Rechnergeschwindigkeit. Nur durch umprogrammieren von Farbe 0 entstehen aber bereits 127 neue Farben. Programmiert man also nur ein paar Farben mehr um, läßt sich diese Zahl noch weiter vergrößern. Allerdings spielt diese Möglichkeit im Zeitalter der HiColor- und TrueColor-Karten kaum noch eine Rolle. Wird diese Farbe also im Rhythmus der Darstellung der Rasterzeilen gewechselt bzw. fließend verändert, lassen sich damit waagrechte Strukturen wie Balken darstellen. Andere Farben als 0 werden davon nicht berührt, so daß ohne weiteres im Vordergrund ein Text vorbeiscrollen kann, der beispielsweise die Farben 1 - 16 benutzt, während er an den Stellen, wo er Null enthält, durchscheint und die Copper-Balken im Hintergrund sichtbar werden. Auf diese Weise braucht man sich beim Bewegen des Scroll-Textes keine Gedanken über den Hintergrund zu machen, der auf konventionelle Weise zwischendurch immer wieder gesichert und zurückgeschrieben werden muß. Man kopiert einfach Byte-Blöcke auf den Bildschirm, die an den durchsichtigen Stellen eine 0 enthalten. Der große Vorteil besteht darin, daß zum Kopieren der schnelle Write-Mode 1 verwendet werden kann. Dieses Verfahren kann sehr gut mit dem des Genlock-Interfaces verglichen werden, das an Stellen, an denen das Video-Signal eine bestimmte Farbe anzeigt (meist Blau), ein Fernsehbild einblendet. Auch hier erfolgt die Mischung auf sehr niedriger Ebene und nicht im langsamen Bildschirmspeicher. Wie erzeugt man nun aber die verschiedenfarbigen Zeilen? Home-Computer besitzen meist einen sogenannten Rasterzeileninterrupt. Hier kann der Videocontroller programmiert werden, bei Erreichen einer bestimmten Rasterzeile einen Interrupt auszulösen, so daß sehr schnell auf dieses Ereignis reagiert und die Farbe neu gesetzt werden kann. Verfügen einige VGAs noch über einen Vertical-Retrace-Interrupt (oft über Dip-Schalter deaktiviert), so sieht die Sache beim Horizontal-Retrace wesentlich magerer aus. Keine uns bekannte Grafikkarte unterstützt diesen Interrupt. Also bleibt keine andere Wahl, als ständig den Zustand der VGA zu überwachen und die Rasterzeilen mitzuzählen, um in der gewünschten Zeile die Farbe zu ändern. Dazu muß zunächst ein definierter Ausgangszustand geschaffen werden, indem auf einen vertikalen Retrace gewartet wird. Wird das nächste Mal die Display Enable-Leitung aktiviert (abzulesen im Input-Status-Register, Bit 0 - Display Enable Complement), kann man sicher sein, daß man sich in Rasterzeile 0 befindet und kann durch permanentes Abfragen dieses Bits die aktuelle Zeile mitzählen. Weil die Darstellung einer Rasterzeile im Vergleich zur Darstellung des ganzen Bildes extrem kurz dauert (etwa 30 µs, reicht gerade für 990 Taktzyklen bei 33 Mhz Rechnertakt), kann man es sich nicht erlauben, daß während des Wartens Interrupts auftreten, die oft viel zu lange dauern. Aus dem Abschalten der Interrupts ergibt sich jedoch ein ernstes Problem: Möchte man nebenbei noch Sound abspielen, wird es zeitlich eng, und sehr gutes Timing ist gefordert, um zu verhindern, daß die Soundkarte ausgerechnet während des Wartens auf einen Horizontal-Retrace neue Daten verlangt . Diese Schwierigkeit ist jedoch zu vernachlässigen gegenüber der nötigen Rechenzeit, um den Copper-Effekt durch kopieren im Bildschirmspeicher zu erreichen. Belegt man nicht den ganzen Bildschirm mit Rasterzeilen - Coppern -, sondern nur z. B. die obere Hälfte, dann bleibt in der unteren Bildschirmhälfte noch genügend Rechenzeit, um Scroller über den Bildschirm zu fahren oder auch Soundberechnungen durchzuführen. Beim Timing ist außerdem gesteigerter Wert auf die Reihenfolge der Befehle zu legen; in der kurzen Zeit des eigentlichen Retrace (ca. 6 µs) ist es praktisch unmöglich, die Berechnungen für mehrere Balken durchzuführen, dies muß also vorher geschehen, während im Retrace selbst nur noch das Setzen der Farbe erfolgt.
Wobbler:
Mit Hilfe des Horizontal-Retrace lassen sich auch noch ganz andere Effekte als die Copper-Balken erzeugen. Wie wäre es zum Beispiel, wenn man statt der Farbe die horizontale Position in jeder Zeile veränderte? Legt man diesem Effekt eine Sinustabelle zugrunde, kann auf diese Weise der ganze Bildschirm mit einer Wellenbewegung überlagert werden, und das wegen der direkten Programmierung von CRTC-Registern sogar im Textmodus. Die horizontale Lage einer Rasterzeile kontrolliert man am besten mit Hilfe des CRTC-Registers 4. Dieses Register bestimmt, wie der Name Horizontal-Sync-Start bereits erahnen läßt, die Position, an der der horizontale Retrace einsetzt. Weil das Ende der Synchronisation relativ zum Anfang festgelegt wird, verschiebt man durch Modifikation dieses Registers lediglich die "Lage" des Retrace am Bildschirm, nicht jedoch seine Länge, was auch möglichst zu vermeiden ist, weil bei zu kurzem Retrace einige Monitore nicht mehr mitkommen und das Bild völlig entstellt wird. Die Technik des Wobblers besteht nun darin, wiederum bis zu einer festgelegten Rasterzeile abzuwarten und danach in jeder Zeile das Register 4 mit neuen Werten zu füttern. Diese Werte entnimmt man am besten einer Sinustabelle. Selbstverständlich lassen sich auch andere Funktionen verwenden, Sinus sieht aber unserer Meinung nach Wasserwellen am ähnlichsten. Besondere Beachtung verdient noch das Timing dieses Effekts. Im Gegensatz zum Copper sollte die Registermodifikation hier während der Darstellung des Bildes durch den Kathodenstrahl erfolgen. Beim Copper spielte die Farbgebung während des Retrace keine Rolle, dafür aber während der Display-Periode. Darum wurde hier während des Retrace umgeschaltet. Im Fall des Wobblers spielt die Position des Retrace jedoch während des Retrace bzw. der Dunkelperiode (Blank Time) eine große Rolle, während das Register bei der Darstellung der Bilddaten selber keinen Einfluß hat. Die Umschaltung muß also diesmal während der Zeit des Display Enable erfolgen, dazu wird einfach die Reihenfolge der beiden Warteschleifen vertauscht. Auch dieser Effekt funktioniert selbstverständlich wieder völlig unabhängig vom Bildinhalt, weil direkt auf unterster Ebene in das Timing der Bilddarstellung eingegriffen wird. Lediglich bei der Erzeugung der Sinustabelle muß die unterschiedliche Vorgabe der Register in den verschiedenen Modi berücksichtigt werden. Im Textmodus 3 beträgt der Wert gewöhnlich 85, im Mode 13h und Mode X dagegen 84. Dies spielt insofern eine Rolle, weil zum einen bei Nichtbeachtung die festen Bereiche des Bildschirms nach rechts oder links verschoben werden, weil diese durch den Nullpunkt der Sinustabelle bestimmt werden. Zum zweiten bewegt sich der Wert des Registers nur in bestimmten Bahnen. Wird hier zum Beispiel fälschlicherweise 87 als Nullpunkt verwendet und eine Amplitude von 4 dazuaddiert, liegt das Resultat jenseits des Annahmebereichs und zeigt keine Wirkung, der Sinus ist an dieser Stelle abgeflacht, Clipping heißt dieser Effekt in der HiFi-Szene. Nebenbei muß noch gesagt werden, daß das Horizontal-Sync-Start-Register, wie alle das Horizontal-Timing betreffenden Register, durch Bit 7 des CRTC-Registers 11h (Vertical Sync End) geschützt ist. Es muß also zunächst gelöscht werden, sollte aber zum Ende des Programms wieder gesetzt werden. Schließlich muß es wohl einen Sinn ergeben, daß das Protection-Bit standardmäßig gesetzt ist.
Paletten-Effekte:
Die Palette bietet hervorragende Möglichkeiten, durch wenige Befehle - und damit in kürzester Zeit - den gesamten Bildschirm zu verändern, weil alle Punkte eines Farbwertes auf einen Schlag auf eine neue Farbe gesetzt werden. In Nicht-Paletten-Modi müßte jeder einzelne Pixel neu gesetzt werden, was natürlich einen immensen Zeitaufwand bedeutet.
Ausblenden:
Der einfachste Effekt, der sich auf diese Weise erreichen läßt, ist das Ausblenden eines Bildes. Ähnlich wie beim Film wird dabei in relativ kurzer Zeit die Helligkeit des Bildes vom Normalwert auf Null reduziert. Dies läßt sich sehr einfach durch die Palette realisieren, indem in einer Schleife alle Farbwerte um 1 vermindert werden und die neu berechnete Palette dann gesetzt wird. Nun wartet man auf den nächsten Retrace und zählt wieder um 1 herunter, bis alles schwarz ist. An dieser Stelle zeigt sich auch ein großer Vorteil der direkten DAC-Programmierung gegenüber der Verwendung des BIOS: Ein Paletten-Zugriff im Text-Mode ist über das BIOS gar nicht möglich, während er im Grafikmodus lediglich unerträglich langsam ist. Daher bleibt in diesem Fall nur die direkte Registermanipulation.
Einblenden:
Die andere Richtung des Blendens ist das Einblenden, bei dem, von einem schwarzen Bild ausgehend, die Helligkeit bis zur eigentlichen Bildpalette hochgezogen wird. Im Prinzip funktioniert dies wie beim Ausblenden: Die Farbwerte werden bei jedem Durchlauf - natürlich synchronisiert mit dem Vertical-Retrace - immer um 1 oder mehr erhöht, bis der Zielwert (aus der Originalpalette des Bildes) erreicht ist. Als Abbruchbedingung kann natürlich nicht mehr das Erreichen von 0 herangezogen, sondern es muß ständig mit dem Zielwert verglichen werden.
Blenden von beliebiger Quelle auf Zielpalette:
Bis jetzt wurde immer entweder von einer Palette zu Schwarz oder umgekehrt geblendet. Was noch fehlt, ist ein Überblenden von einer konkreten Palette zu einer anderen. Dies scheint auf den ersten Blick keinen großen Sinn zu haben, weil sich außer einer schrittweisen Farbverfälschung des Bildes nicht viel erreichen läßt. Irrtum! Auf diese Weise läßt sich ein sehr schöner Effekt erzeugen. Wie wäre es zum Beispiel damit, daß ein Demoteil zu Ende geht und daraufhin das letzte Bild langsam auf Schwarzweiß-Darstellung heruntergerechnet wird? Im Vordergrund läßt sich dann zum Beispiel ein Text mit den Credits, also den Danksagungen, darstellen. Hier zeigt sich der Nutzen der neuen Prozedur: Nach Berechnung der Schwarzweiß-Palette muß nur noch auf diese herübergeblendet werden. Das erste Problem, das sich dabei stellt, ist: Wie erzeuge ich eine schwarzweiße Palette? Zum Glück besitzt das BIOS eine Funktion dafür, die hier zwar nicht benutzt werden soll (langsam, unflexibel), von der man aber die Funktionsweise sehr gut abgucken kann. Um eine Farbe, die sich aus Komponenten von Rot, Grün und Blau zusammensetzt, auf Schwarzweiß herunterzurechnen, muß man die drei Farbanteile zusammenzählen und mit diesem Wert in der neuen Palette alle drei Farben beschreiben. Werden alle drei Farben zu gleichen Teilen gemischt, kommt immer eine Abstufung zwischen Schwarz und Weiß heraus. Die Frage ist nur, wie die Summe zu bilden ist. Einfach alle drei Farben zu gleichen Teilen einfließen zu lassen, führt zu keinem befriedigenden Ergebnis. Das menschliche Auge empfindet die verschiedenen Farben nämlich nicht als gleich hell. Ein blauer Punkt von maximaler Helligkeit erscheint zum Beispiel wesentlich dunkler als ein grüner. Ebenfalls vom BIOS abgeguckt ist das optimale Mischverhältnis, das die naturgetreueste Darstellung gewährleistet: Man nehme 30 % des Rotanteils, 59 % des Grünanteils und 11 % des Blauanteils.
Überblenden von einem Bild zum nächsten:
Es ist schon wesentlich professioneller, beim Wechsel von einem Bild auf das nächste zunächst das erste auszublenden, um dann das nächste einzublenden, anstatt abrupt umzuschalten; dazu sind Sie mit den erarbeiteten Prozeduren bereits in der Lage. Für wirklich professionelle Bildwechsel kommt man allerdings nicht darum herum, einen fließenden Übergang von einem Bild zum anderen zu erzeugen, man muß also beide Bilder mischen. Zu diesem Zweck gibt es mittlerweile zahlreiche sogenannte Morphing-Programme , die allerdings den Nachteil vorberechneter Bilder haben: Die Bilder müssen erst einmal aufwendig berechnet werden, nehmen viel Platz auf der Platte und im Speicher ein und müssen umständlich (und langsam) in den Bildschirmspeicher kopiert werden. Dies ist also nur eine Lösung für Anfänger, der Profi berechnet seine Blenden in Echtzeit! Bei Palettenbildern - und die behandelten Grafikmodi sind alle palettenbasiert - läuft das Blenden, wie sich noch zeigen wird, im Endeffekt auf ein einfaches Paletten-Blenden hinaus. Erst bei komplizierten Metamorphosen, die gleichzeitig die Bildteile durch Bewegung ineinander überführen, muß man also die Morphingsoftware zu Rate ziehen. Man blendet also nur eine Palette in eine andere über. Weil aber die beiden Bilder übereinanderliegen und eine Veränderung der Bilddaten (das ist der Weg des Morphing) aus Geschwindigkeitsgründen nicht in Frage kommt, müssen dieselben Bilddaten je nach Palette verschiedene Bilder darstellen. Zunächst ist die Quellpalette aktiv, wodurch die Daten das Quellbild darstellen. Am Schluß ist dann die Zielpalette aktiv, woraufhin dieselben Bilddaten, die vorher das Quellbild dargestellt haben, jetzt für das Zielbild stehen. Bei dieser Vorgehensweise stellen sich zwei Fragen:
1. Wie müssen die Bilddaten manipuliert werden, daß sie - je nach Palette - sowohl das ursprüngliche (Quell-) Bild oder aber das Zielbild darstellen?
2. Wie müssen die Paletten beschaffen sein, um aus den gleichen Bilddaten unterschiedliche Bilder zu erzeugen?
Zunächst zu Frage 1: Bei dieser Art von Blende haben wir es mit einem grundsätzlich anderen Problem als bisher zu tun. In den bisherigen Blenden war entweder die Zielfarbe für alle Punkte gleich, nämlich Schwarz (Ausblenden), oder die Ausgangsfarbe (Einblenden). Nun muß jede beliebige Farbe in jede beliebige andere übergeblendet werden. Es gibt rote Punkte, die im Zielbild grün sein müssen, aber auch rote, die später blaue Farbe annehmen sollen. Wer in Mathematik (Bereich der Stochastik, Thema Kombinatorik) gut aufgepaßt hat, weiß, was das für die Farbenpracht bedeutet: Bei der Kombination einer bestimmten Anzahl Farben mit einer gleichen Anzahl anderer Farben gibt es genausoviele Möglichkeiten, wie das Quadrat der Farbanzahl beträgt. Jede dieser Kombinationen muß beim Überblenden berücksichtigt werden, muß also einen Eintrag in der beim Blenden verwendeten Palette haben. Um ein Zweifarbbild in ein anderes zu überführen, werden vier Paletteneinträge benötigt (Farbe 0 nach Farbe 0, also gleichbleibend, Farbe 0 nach Farbe 1, 1 nach 0 und 1 nach 1). Bei zwei Vierfarbbildern werden bereits 16 Einträge belegt. Weil auf dem VGA nun einmal nur eine Palette von 256 Farben besteht, liegt also die größtmögliche Farbanzahl, die sich ohne Bilddaten-Veränderung überblenden läßt, bei 16 Farben. Beim mehrmaligen flimmerfreien (!) Überblenden von Bildern wird diese Zahl jedoch, wie weiter unten erklärt, noch weiter reduziert auf 15. Aus diesen kombinatorischen Überlegungen läßt sich auch bereits die Vorgehensweise beim Mischen der Bilder ableiten: Jede Kombination muß vertreten sein, dazu verwendet man N Blöcke mit jeweils N Einträgen, wobei N für die Anzahl Farben pro Bild steht. Die Blocknummer entspricht der Zielfarbe, während der Index innerhalb des Blocks der Quellfarbe entspricht. Andersherum ist es zwar auch denkbar, dies würde jedoch den später erläuterten Reset unnötig verkomplizieren. Um die Farbnummer zu ermitteln, geht man einfach nach der folgenden Formel vor:
Farbnummer = Zielfarbe x Anzahl Farben + Quellfarbe
Dieses Prinzip kommt manchem vielleicht bekannt vor: Auf die gleiche Weise rechnet man ein hexadezimales Byte in eine dezimale Zahl um: Oberes Nibble (höherwertige Stelle) x 16 + unteres Nibble. Das würde bei einer Farbanzahl von 16 die Sache sehr beschleunigen, weil einfach die Zielfarbe in das obere Nibble und die Quellfarbe in das untere Nibble geladen werden könnte, und man hätte den Farbwert, der benutzt werden muß. Die Sache hat nur den Haken, daß 16 Farben hier nicht verwendet werden können, sondern höchstens 15, also müssen wir beim langsamen Multiplizieren bleiben. Dies ist jedoch nicht weiter tragisch, da der Programmteil, der die Multiplikation beinhaltet, nicht zeitkritisch ist und höchstens vor der eigentlichen Blende eine kaum merkliche Zeitverzögerung bewirkt. Die folgende Skizze veranschaulicht noch einmal die Blockbildung für den Fall, daß zwei Vierfarbbilder ineinander übergeblendet werden sollen:
Farbwert 0 Farbwert 1 Farbwert 2 Farbwert 3 Farbwert 4 Farbwert 5 Farbwert 6 Farbwert 7 Farbwert 8 Farbwert 9 Farbwert 10 Farbwert 11 Farbwert 12 Farbwert 13 Farbwert 14 Farbwert 15
Quellfarbe 0 Quellfarbe 1 Quellfarbe 2 Quellfarbe 4 Quellfarbe 0 Quellfarbe 1 Quellfarbe 2 Quellfarbe 4 Quellfarbe 0 Quellfarbe 1 Quellfarbe 2 Quellfarbe 4 Quellfarbe 0 Quellfarbe 1 Quellfarbe 2 Quellfarbe 4

Zielfarbe 0
Block 0 Zielfarbe 1

Block 1 Zielfarbe 2
Block 2 Zielfarbe 3

Block 3
Diese Skizze beantwortet auch die zweite, noch ausstehende Frage nach der Organisation der Paletten: Die Blockbildung entspricht exakt dem Palettenaufbau. Die Quellpalette (von der Größe 1 Block) wird sooft kopiert, wie es der Anzahl der Farben entspricht - dadurch entstehen die exakt gleichen Quellblöcke -, während die Zielpalette auf ihre volle Größe gespreizt wird. Dazu wird einfach jede Farbe einzeln verfielfacht, so daß die Blöcke in dieser Palette in sich homogen sind. Bei diesem Effekt ist es im übrigen nicht erforderlich, mehrere Bildschirmseiten zu verwenden oder auch vorberechnete Seiten zu erstellen und auf den Bildschirm zu kopieren, die Manipulation kann direkt am Bildschirm erfolgen. Dazu muß alleridings beachtet werden, daß sich das tatsächlich sichtbare Bild während der Modifikationen (also der Paletten-Generierung und des Mischens) nicht verändert, weil sonst Flimmern die Folge wäre. Wenn sich das Bild nicht verändern darf, sind zwei Punkte zu beachten: Zum einen darf die gerade aktive Palette nur in Bereichen verändert werden, deren Farben im Moment nicht auf dem Bildschirm sind, und zum zweiten muß bei Veränderung der Bilddaten die Palette bereits vorbereitet sein, damit die veränderten Punkte wieder auf ihrer ursprünglichen Farbe landen. Wenn also ein roter Punkt, der z. B. die Farbe 3 hat, jetzt auf Farbe 23 gesetzt werden soll, muß sichergestellt sein, daß Farbe 0 bereits Rot enthält, damit sich am Bildschirm nichts verändert. Daraus folgt die Reihenfolge der Prozeduraufrufe, die beim Überblenden einzuhalten ist:
1. Paletten vorbereiten, dabei nur inaktive Farben verändern.
2. Bilddaten mischen, noch keine Veränderung sichtbar.

3. Paletten ineinander überblenden.
Aus der Forderung, daß nur inaktive Palettenbereiche zu verändern sind, folgt bereits die Einführung eines zusätzlichen Farbblocks. Dieser enthält zunächst die Quellfarben, die vom Quellbild verwandt werden. Da ein vierfarbiges Quellbild normalerweise die Farben 0 bis 3 belegt, befindet sich auch dieser neue Block an dieser Stelle. Um die Quellpalette zu generieren (Block in diesem Fall viermal kopieren), wird dieser Block als Ausgangspalette herangezogen und verfielfacht. Dabei wird der Block selbst nicht verändert, so daß sich am Bildschirm zunächst gar nichts tut. Dieser Block, er heißt übrigens Reset-Block, hat aber noch eine weitere wichtige Aufgabe zu erfüllen: Nach einer durchgeführten Blende hat das sichtbare Bild eine weit größere Palette als die Ursprungsbilder, nämlich genau deren Farbanzahl zum Quadrat. Möchte man nun in ein weiteres Bild überblenden, stellt sich das Problem, daß zu viele Farben benutzt sind, es dürfen schließlich nur maximal 15 sein. Hier kommt uns zugute, daß die Zielblöcke homogen sind, das heißt, alle Farben eines Blocks haben den gleichen Inhalt, können also ohne weiteres ersetzt werden. Es befinden sich schließlich nur (im genannten Beispiel) vier verschiedene (!) Farben auf dem Monitor. Um diese Farben auf eine zum Blenden zulässige Palette zu reduzieren, verwendet man wieder den Reset-Block, der ja ohnehin die Quellpalette enthalten soll. Daher kommt auch die Bezeichnung Reset-Block: Die breitgefächerten Bilddaten werden auf diesen Block reduziert, also zurückgesetzt (reset). In diesem Block befindet sich nach dem Blenden die eigentliche Zielpalette, so daß nur noch die Bilddaten neu berechnet werden müssen. Diese Berechnung ist jedoch sehr einfach, weil nur das Spreizen rückgängig gemacht werden muß, um wieder an die eigentliche Zielfarbe heranzukommen: Eine Division durch die Farbanzahl genügt, um die Blocknummer und somit die Zielfarbe zu erhalten, wobei allerdings noch, wie bei all diesen Operationen, der Reset-Block subtrahiert werden muß. Die Existenz des Reset-Blocks ist auch der Grund, warum die Farbenvielfalt leider auf 15 Farben beschränkt bleiben muß: Neben den zum Blenden benötigten Paletteneinträgen (n^2, n=Anzahl verwandter Farben) wird noch ein Reset-Block benötigt, der wiederum n Farben groß sein muß, so daß im Endeffekt zum Überblenden zweier Bilder n x n + n bzw. (n + 1) x n Paletteneinträge benötigt werden. Bei 16 Farben wären das 16 x 17 = 272 Palettenwerte, die der VGA leider nicht bietet. Also können höchstens 15farbige Bilder ineinander übergeblendet werden, wozu 15 x 16 = 240 Farben benötigt werden. Oft ergibt es jedoch auch Sinn, diese Farben noch weiter einzuschränken, um am oberen Palettenende unbenutzte Farben freizubekommen, die für statische Bildteile verwendet werden können, z. B. für ein festes Logo, unter dem Texte ineinander übergeblendet werden. Dabei müssen allerdings für das statische Bild Farbwerte vom obersten Palettenende verwandt werden, da beim Faden die unteren schon benutzt werden. Beim Mischen der beiden Bilder wird nun einfach nach obiger Formel der neue Paletteneintrag berechnet und in das VGA-RAM zurückgeschrieben. Zur Erinnerung: Hier wird praktisch nur eine andere Blocknummer geschrieben, der Index innerhalb des Blocks (entspricht der Quellfarbe) wird nicht verändert. Weil die Blöcke zu diesem Zeitpunkt alle den gleichen Inhalt haben, ändert sich folglich am Bildschirm zunächst nichts. Zum Schluß muß nur noch die aktuelle Palette, hervorgegangen aus der Vervielfachung der Quellpalette, in die gespreizte Zielpalette übergeblendet werden, so daß die Blöcke hinterher jeweils homogen sind und die Zielfarbe enthalten, wodurch das Zielbild sichtbar wird. Erst durch dieses Blenden selbst werden die gemachten Veränderungen überhaupt sichtbar, so daß dies der einzige zeitkritische Teil ist. Pro Bildaufbau müssen aber schließlich nur die Palettenregister neu geladen werden, was wesentlich schneller geht, als wenn die Bilddaten selbst verändert werden müßten. Bei der Entwicklung eigener Bilder für diesen Effekt ist auf die richtige Aufteilung der Palette zu achten. Bei den überzublendenden Bildern sind maximal 15 Farben möglich, Bilder mit mehr Farben müssen reduziert werden. Auf jeden Fall müssen diese Farben im untersten Palettenbereich (0 ... Farbanzahl - 1) stehen. Die Anzahl Farben für das statische Bild errechnet sich nach folgender Formel:
Statische Farben = 256 - dynamische Farben x (dynamische Farben + 1)
Dabei müssen die statischen Farben in jedem Fall am oberen Ende der Palette angesiedelt sein, weil nur dieses Bereich beim Blenden unverändert bleibt. Möchte man also 15-Farben-Bilder ineinander überblenden, bleiben 256 - 15 x 16 = 16 Farben für statische Bilder am Ende der Palette (von Farbe 240 bis 255) übrig, bei einer 13farbigen Blende bleiben noch 256 - 13 x 14 = 74 Farben, also die Farben 182 - 255.

Animation durch Palettenrotation:
Wie gesehen lassen sich durch einfache Palettenmodifikationen mit sehr geringem Aufwand große Bildbereiche mit einem Schlag in ihrem Erscheinungsbild verändern. Dieser große Vorteil der palettenbasierten Grafikmodi läßt sich auch hervorragend für echte Animationen einsetzen, bei denen nicht nur Bereiche ein-, aus- oder übergeblendet, sondern zur Bewegung über den Bildschirm gebracht werden. Wie ist das möglich? Nehmen wir als einfaches Beispiel einen roten Punkt, der von links nach rechts um zehn Pixel bewegt werden soll. Dazu zeichnet man einfach zehn Punkte nebeneinander mit verschiedenen, in der Palette aufeinanderfolgenden Farben, in diesem Beispiel die Farben 0 bis 9. Setzt man nun nur die Farbe 0 auf Rot und die übrigen neun Farben auf Schwarz, dann ist nur der erste der zehn Pixel sichtbar, die übrigen haben Hintergrundfarbe. Verschiebt man die Palette jetzt um einen Punkt nach oben, so daß Farbe 1 Rot ist und Farbe 0 sowie Farben 2 bis 9 Schwarz sind, wird der zweite Pixel sichtbar, und der erste verschwindet. Verschiebt man die Palette nun immer weiter, wandert der Punkt auf dem Bildschirm von links nach rechts, ohne daß (nach der Initialisierung der zehn Punkte) auch nur ein Byte im Bildschirmspeicher verändert wurde. Wenn der rote Eintrag am oberen Ende (Farbe 9) angekommen ist, kann er natürlich wieder bei Farbe 0 angefügt werden, so daß eine zyklische Animation erfolgt, die den Punkt immer wieder von links nach rechts bewegt und wieder nach links springt. Genausogut ist es denkbar, bei Erreichen des Palettenendes die Bewegungsrichtung umzudrehen und den Punkt so hin- und herzubewegen. Für einen einzelnen Punkt ist diese Vorgehensweise offensichtlich noch nicht sehr sinnvoll, weil statt zwei Bytes im Bildschirmspeicher zu verändern (alten Punkt löschen, neuen setzen) gleich zehn Farbwerte neu gesetzt werden, und das auch noch über langsame Port-Zugriffe. Wesentlich effektiver ist die Palettenrotation bei großen und / oder kompliziert geformten Flächen. Sowohl eine hohe Anzahl Punkte als auch eine komplexe mathematische Beschreibung der zu bewegenden Punkte rechtfertigen die Zusammenfassung der Bewegungen in einer Palettenrotation. Möchte man nun größere Flächen bewegen, müssen diese natürlich entsprechen gestaltet werden. Die Flächen dürfen selbstverständlich nicht aus einer Palettenfarbe bestehen, sondern müssen in Bewegungsrichtung einen Farbverlauf aufweisen, damit praktisch zeilenweise bewegt werden kann. Anschaulich dargestellt sieht das dann aus wie in folgender Abbildung:
Farbe 0 rot Farbe 0 rot
Farbe 1 rot Farbe 1 blau

Farbe 2 blau Farbe 2 blau
Farbe 3 blau Farbe 3 rot
Farbe 0 rot Farbe 0 rot
Hier werden Blöcke von der Höhe 2 Pixel nach oben durchgescrollt, wobei das Prinzip genauso auch für wesentlich höhere Blöcke und komplexere Strukturen gilt. Das Beispielbild enthält zweieinhalb Blöcke, die abwechselnd rot und blau gefärbt sind. Die Anzahl Blöcke spielt keine Rolle, das Bild kann also beliebig nach unten oder oben erweitert werden, solange die Reihenfolge der Farben eingehalten wird; auch Bruchteile von Blöcken sind möglich. Der Aufbau des Gesamtbildes ist periodisch, das heißt, nach zwei Blöcken wiederholt sich der Aufbau, daher sin zwei Blöcke mit einem zusammenhängenden (!) Farbverlauf von Farbe 0 bis 3 gefüllt. Anschließend werden in der Palette die Farben 0 und 1 auf Rot und die Farben 2 und 3 auf Blau gesetzt, so daß die Blöcke als solche zu erkennen sind. Diese Vorbereitungen erledigt man am besten mit einem Malprogramm , so daß sich das Programm nur noch um die Bewegung an sich kümmern muß. Diese Bewegung wird nun dadurch erzeugt, daß die (Teil-) Palette von Farbe 0 bis 3 um eine Position nach unten gescrollt wird. Farbe 0 erhält den Farbton aus Farbe 1, Farbe 1 den aus Farbe 2, Farbe 2 den aus Farbe 3 und Farbe 3 den aus Farbe 0, so daß eine Rotation entsteht. Wie in der Abbildung zu sehen, verschieben sich dadurch die roten und blauen Bereiche um eine Zeile nach oben, was ja auch Ziel der Aktion war. Nun ergibt auch dieses Scrolling noch keinen großen Sinn, weil es sich durch Verändern der Bildschirmstartadresse (Linear Starting Address) genausogut erreichen läßt. Interessanz wird das Gnaze, wenn die einfache Blockstruktur des Beispiels mit Effekten versehen wird. Baut man aus diesen Blöcken ein Schachbrett zusammen und kippt dieses mit einem guten Malprogramm (siehe Fußnote 16 !) nach hinten, erhält man mit der Palettenrotation eine nach hinten oder vorne scrollende Ebene. Dies konventionell über Pixelmanipulationen zu programmieren, scheitert unter Garantie am viel zu hohen Rechenaufwand. So überläßt man die Rechnerei dem Malprogramm und muß innerhalb des eigenen Programms nur noch einige Byte im Speicher verschieben und die Palette setzen. Ein weiterer Vorteil besteht darin, beliebige Objekte vor die Scrollebene zu plazieren, die normalerweise bei jedem Bildaufbau mit Hilfe einer (relativ langsamen) Sprite-Routine dorthin kopiert werden müßten, die bei dieser Technik jedoch statisch im Bild untergebracht sein können.

Feuer - Pyro-Effekt:
Ein loderndes Feuer auf dem Bildschirm zu sehen, ist spätestens nach den Unmengen an Rollenspielen nichts Besonderes mehr. Diese Flammen beruhen aber auf gezeichneten Bildern, die nacheinander abgespielt werden. Hier soll eine andere Möglichkeit aufgezeigt werden, die auch in vielen Demos Anwendung findet: Es wird direkt die Struktur der Flammen nachgeahmt. Dazu sind zwei wesentliche Punkte zu beachten: Ein Feuer befindet sich in einer ständigen Bewegung nach oben. Außerdem ist es im unteren Bereich weiß und verblaßt nach oben immer mehr zu roten Tönen. Es werden zwei Puffer benötigt, die den Bildschirmspeicher (bzw. seine untere Hälfte) im schnellen System-RAM wiederspiegeln. Das Hauptprogramm allokiert und löscht zunächst die beiden Puffer, schaltet den Mode 13h ein und bereitet die Palette auf die Flammen vor. Das Ergebnis veranschaulicht die Grafik:

Pixel mit niedriger Farbnummer stellen später die kälteren Zonen der Flammen dar, sie befinden sich hier im linken Bereich. Liest man die Grafik von rechts nach links, also von hohen zu niedrigen Temperaturen, so sieht man folgendes: Zunächst stehen alle Farbkomponenten auf Maximum (= Weiß), ab Farbe 80 wird der Blauanteil langsam zurückgenommen, so daß die Farben etwas gelblicher erscheinen. Ab Farbe 56 wird zusätzlich der Grünanteil heruntergeregelt, so daß schließlich Rot übrigbleibt. Nachdem auch diese Farbe (ab Nummer 32) ausgefadet wurde, wäre normalerweise Schwarz das Ergebnis. In diesem Fall wird aber noch ein kleiner Schimmer Blau eingefügt (Farbe 16 bis 0), der über den roten Flammen steht. Wer´s nicht mag, entfernt diesen Teil einfach...

 
 

Datenschutz
Top Themen / Analyse
indicator Aufbau einer TCP-Verbindung
indicator Strenge Zugangsregelung - Tokenverfahren-
indicator Speicheradressierung im Protected Mode
indicator Zusammenfassende Bewertung des Lernspiels "PHYSIKUS"
indicator John von Neumann Biographie
indicator Vom Maser zum Laser
indicator Entwicklung von USB
indicator SCANNER
indicator Wie ist ein Computervirus aufgebaut?
indicator Nachteile


Datenschutz
Zum selben thema
icon Netzwerk
icon Software
icon Entwicklung
icon Windows
icon Programm
icon Unix
icon Games
icon Sicherheit
icon Disk
icon Technologie
icon Bildung
icon Mp3
icon Cd
icon Suche
icon Grafik
icon Zahlung
icon Html
icon Internet
icon Hardware
icon Cpu
icon Firewall
icon Speicher
icon Mail
icon Banking
icon Video
icon Hacker
icon Design
icon Sprache
icon Dvd
icon Drucker
icon Elektronisches
icon Geschichte
icon Fehler
icon Website
icon Linux
icon Computer
A-Z informatik artikel:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #

Copyright © 2008 - : ARTIKEL32 | Alle rechte vorbehalten.
Vervielfältigung im Ganzen oder teilweise das Material auf dieser Website gegen das Urheberrecht und wird bestraft, nach dem Gesetz.
dsolution