2 3 12 62 0 0 0

Mischen von Farben

Als Zeichenfläche ist hier Canvas eingesetzt. Der Grund: In der SVG-viewBox scheiden MSIE/Edge als auch Firefox nach wie vor bei der Verarbeitung von Überblendungen <feBlend> von Farbflächen aus. Die Demonstration dazu befindet sich in SVG > Elemente > Filterelemente.

Die Abbildung links zeigt die zwei klassischen Farbmodelle wie sie im Fernsehen und beim Tuschen nachvollziehbar erlebt werden. Das additive Mischen wird mittels ctx.globalCompositeOperation = 'difference' ; und das subtraktive durch ctx.globalCompositeOperation = 'multiply'; umgesetzt.
Das stellt aber nicht die Aufgabe dar, deren ich mich widmen möchte, denn ...
was passiert, wenn ein roter Körper mit exakt gleicher Lichtfarbe bestrahlt wird? Weißes Licht wird zurückgegeben.
Hierfür ist kein Operator vorgesehen. Das zu erwartende Ergebnis bleibt unerfüllt.

Aus diesem Grund stelle ich dies unter das Thema

Spielereien

mit JavaScript. Alle Berechnungen erfolgen im JavaScript.

Wird eine rote Fläche mit seiner Komplimentärfarbe bestrahlt, kann nichts reflektiert werden. Der Körper erscheint schwarz. Gleiches muss aber auch für Lichtquellen gelten, die kein rot enthalten, also blau und grün.
Das Ganze wird klar, wenn ich wieder mit weißem Licht einen roten Körper beleuchte. Die Blau- und GrünAnteile werden absorbiert und rot reflektiert.

Abhängigkeit einer Farbe vom Beleuchtungslicht

Ab hier setze ich eine SVG-Zeichenfläche ein, da keine Überblendungen eingesetzt werden und es folgt eine Simulation, die eine rote Fläche mit einer sich ständig ändernden Beleuchtungsfarbe beschreibt: Kreis im Rechteck. Die Beleuchtungsfarbe wird noch einmal außerhalb des Rechteckes also auf weiß dargestellt. Die Farbänderung wird berechnet und erfolgt über das HSL-Farmodell: (hue)=Farbwert, (saturation)0Farbsättigung, (lightness)=Hellwert.
Dieses theoretische Modell soll das Reflexionsverhalten widergeben.

Der Ablauf wird an drei Punkten für sec für die Beleuchtungsfarbe: rgb(255,0,0) || hue = 0, rgb(0,255,0) || hue = 120, rgb(0,0,255) || hue = 240 unterbrochen.
Ausgabe der Beleuchtungsfarbe:
Ausgabe des Hellwertes:
Momentbeschreibung:

Nun es handelt sich um ein rein theoretisch mathematisches Modell.
Die Reflektion aus Beleuchtung und Körperfarbe wird aus den Farbanteilen der Lichtquelle berechnet unter Einbeziehung eines Helligkeitswertes, der sich aus der Differenz von hue = 0 und hue = 120 bzw. hue = 240 errechnet, als Wert für „lightness“ zwischen 0 und 100 wirkt.
Als Problem sehe ich in der Momentbeschreibung die zwei Zustände:
1. „abnehmender Rotwert, voller Grünwert“
2. „zunehmender Rotwert, voller Blauwert“.

Bei Erstem wird bei Hellwert unter 50 bis 0 von Oliv über dunkler werdendes Grün bis Schwarz erzeugt (hue 60 bis 120).
Bei Zweitem wird bei Hellwert 0 bis 50 von Schwarz über dunkles Violett bis Magenta erzeugt (hue 240 bis 300).
In den Momenten geringen Reflektionsvermögens halte ich aus meinem Verständnis das Errechnen von dunklem Grün als auch Violett für falsch. Für diesen Fall sollten die Farben ausgrauen. Die jeweils mit drei Linien symbolisierende RGB-Verteilungen für Lichtquelle und Reflektion zeigt für das Reflektionsverhalten die von mir erwartete Intensität. Jede rgb-symbolisierende Linie erhält ihm zugeteilte Deckkraft(Opazität). Das läßt sich aber für die Abbildung des Kreises im Rechteck nicht anwenden, soweit nicht noch ein schwarzer Kreis sich unter der Simulation befindet.


Eine weitere Überlegung basiert auf der Annahme, dass bei geringem Reflektionsgrad als Ausdruck des Hellwertes die Farbsättigung sich analog verhält, wenn der Hellwert unter 50 ist. Innerhalb dieses Wertebereiches soll die Farbsättigung zur Demonstration sich zwischen 0 und 100 bewegen.
Aufruf im Menü darunter oder Teil 2




Dokument geändert am: 10. Nov. 2017 12:08