extras:codikon:p5js:carnovsky
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| extras:codikon:p5js:carnovsky [2025/07/06 07:34] – ↷ Page moved from codikon:p5js:carnovsky to extras:codikon:p5js:carnovsky Felix Hardmood Beck | extras:codikon:p5js:carnovsky [2026/11/10 07:47] (current) – Felix Hardmood Beck | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== RGB-Collage mit zufälligem Farb- und Ebenenwechsel | + | ====== Farbige Bildebenen durch Licht trennen ====== |
| - | < | + | Das Künstlerduo [[https://www.carnovsky.com/RGB.htm|Carnovsky]] nutzt im Projekt „RGB“ farbiges Licht, um überlagerte Bilder getrennt sichtbar zu machen. Das Prinzip lässt sich mit drei Motiven erklären, die in **Cyan, Magenta und Gelb** übereinander auf weißen Grund gedruckt und abwechselnd mit einem roten, grünen oder blauen Strahler beleuchtet werden. |
| - | < | + | |
| - | <script src="https://cdn.jsdelivr.net/npm/p5@1.6.0/lib/p5.min.js"></ | + | |
| - | </ | + | |
| - | < | + | |
| - | <div id=" | + | |
| - | < | + | ^ Eingeschalteter Strahler ^ Deutlich sichtbare Bildebene ^ |
| - | let images = []; | + | | Rot | Cyan erscheint dunkel. | |
| - | let imageOrder = []; | + | | Grün | Magenta erscheint dunkel. | |
| - | let colors = []; | + | | Blau | Gelb erscheint dunkel. | |
| - | function preload() { | + | Der Grund ist die **selektive Absorption**: Cyan absorbiert rotes Licht, Magenta grünes und Gelb blaues. Die jeweils anderen beiden Druckfarben reflektieren das eingeschaltete Licht stärker und verlieren dadurch ihren Kontrast zum ebenfalls beleuchteten Hintergrund – sie treten zurück. So bestimmt die Lichtfarbe, welches Motiv hervortritt. |
| - | images[0] = loadImage(' | + | |
| - | images[1] = loadImage(' | + | |
| - | images[2] = loadImage(' | + | |
| - | } | + | |
| - | function setup() { | + | Für eine deutliche Trennung sollte jeweils nur ein Strahler eingeschaltet sein und möglichst wenig Umgebungslicht auf den Druck fallen. Wie vollständig die anderen Ebenen verschwinden, hängt von den Druckfarben und dem Spektrum der Strahler ab. |
| - | let canvas = createCanvas(800, 800); | + | |
| - | canvas.parent(" | + | |
| - | imageMode(CENTER); | + | |
| - | noLoop(); | + | |
| - | assignRandomColors(); | + | ===== RGB-Collage mit zufälligem Farb- und Ebenenwechsel ===== |
| - | shuffleImageOrder(); | + | |
| - | } | + | |
| - | function draw() { | + | Der folgende p5.js-Sketch greift das Zusammenspiel von Farbe und überlagerten Motiven als freies digitales Experiment auf. Drei Bilder werden gleichzeitig dargestellt und mit Rot, Grün oder Blau eingefärbt. Bei jedem Klick auf die Zeichenfläche ändern sich die Farbzuweisung und die Zeichenreihenfolge zufällig. Dabei können mehrere Bilder dieselbe Farbe erhalten. |
| - | background(0); | + | |
| - | translate(width / 2, height / 2); | + | |
| - | for (let i = 0; i < 3; i++) { | + | < |
| - | let imgIndex | + | <div id=" |
| - | let col = colors[imgIndex]; | + | <script src=" |
| - | | + | < |
| - | | + | new p5(function (p) { |
| - | } | + | let images |
| - | } | + | let imageOrder |
| + | let colors | ||
| + | const palette = [ | ||
| + | [255, 0, 0], | ||
| + | | ||
| + | [0, 0, 255] | ||
| + | ]; | ||
| - | | + | p.preload = function () { |
| - | | + | |
| - | | + | |
| - | | + | |
| - | } | + | }; |
| - | | + | p.setup = function () { |
| - | | + | const canvas |
| - | | + | |
| - | let rand = int(random(3)); | + | canvas.style(' |
| - | | + | canvas.style(' |
| - | | + | |
| - | } else if (rand === 1) { | + | assignRandomColors(); |
| - | | + | |
| - | } else { | + | p.redraw(); |
| - | colors.push([0, 0, 255]); | + | }); |
| - | } | + | p.imageMode(p.CENTER); |
| - | } | + | p.noLoop(); |
| - | } | + | |
| + | | ||
| + | }; | ||
| - | | + | p.draw = function () { |
| - | | + | |
| - | for (let i = imageOrder.length - 1; i > 0; i--) { | + | |
| - | let j = floor(random(i + 1)); | + | |
| - | [imageOrder[i], | + | |
| - | } | + | |
| - | } | + | |
| - | | + | |
| - | </body> | + | |
| - | </ | + | |
| - | Der folgende p5.js-Sketch erweitert das Prinzip der RGB-Collagen, | + | for (let i = 0; i < imageOrder.length; i++) { |
| + | const imgIndex = imageOrder[i]; | ||
| + | const col = colors[imgIndex]; | ||
| + | p.tint(col[0], col[1], col[2], 170); | ||
| + | p.image(images[imgIndex], | ||
| + | } | ||
| + | p.noTint(); | ||
| + | }; | ||
| - | ===== Funktionsweise im Detail ===== | + | function assignRandomColors() { |
| + | colors | ||
| + | return palette[p.floor(p.random(palette.length))]; | ||
| + | }); | ||
| + | } | ||
| - | | + | |
| - | * Jedes Bild erhält bei jedem Klick **zufällig** eine der drei RGB-Farben | + | |
| - | * Die Reihenfolge, in der die Bilder gezeichnet werden (also die Ebenenhierarchie), wird ebenfalls bei jedem Klick **zufällig neu gemischt**. | + | for (let i = imageOrder.length - 1; i > 0; i--) { |
| - | * Durch `tint()` werden die Bilder mit halbtransparenter Farbe überlagert, wodurch sich additive Farbmischungen ergeben. | + | const j = p.floor(p.random(i + 1)); |
| + | [imageOrder[i], imageOrder[j]] = [imageOrder[j], | ||
| + | } | ||
| + | } | ||
| + | }, ' | ||
| + | </ | ||
| + | </ | ||
| - | ===== Interaktive Komponente | + | ===== Funktionsweise und Interaktion |
| - | Mit jedem Mausklick auf die Zeichenfläche verändert sich sowohl die Farbe als auch die Sichtbarkeit der Bilder. | + | * Drei Bilder werden aus dem Web geladen und deckungsgleich übereinandergelegt. |
| + | * '' | ||
| + | * Bei jedem Klick auf die Zeichenfläche | ||
| + | * Die Motive | ||
| - | ===== Ziel und ästhetisches Prinzip | + | ===== Bezug zu Carnovsky |
| - | Der Sketch | + | Bei Carnovsky trennt farbiges Licht die Motive eines unveränderten Drucks durch selektive Absorption. Im Sketch |
| - | ===== Beispiel | + | Der Sketch verwendet die normale **Alpha-Überlagerung** von p5.js. '' |
| - | < | + | ===== Ziel ===== |
| - | let images | + | |
| - | let imageOrder | + | |
| - | let colors | + | |
| - | function preload() { | + | Das Experiment zeigt, wie Farbe, Transparenz und Ebenenreihenfolge die Wahrnehmung identischer Motive verändern. Es eignet sich als Ausgangspunkt für Übungen zu Farbsystemen, |
| - | images[0] = loadImage(' | + | |
| - | let imageOrder = []; | + | |
| - | let colors = []; | + | |
| - | function preload() { | + | ===== Technischer Hinweis ===== |
| - | // CORS-kompatible Bilder von picsum.photos | + | |
| - | images[0] | + | |
| - | images[1] | + | |
| - | images[2] | + | |
| - | } | + | |
| - | function setup() { | + | Die interaktive Einbettung setzt voraus, dass die DokuWiki-Installation HTML und JavaScript im ''< |
| - | createCanvas(800, 800); | + | |
| - | imageMode(CENTER); | + | |
| - | noLoop(); | + | |
| - | assignRandomColors(); | + | ===== Quellen ===== |
| - | shuffleImageOrder(); | + | |
| - | } | + | |
| - | function draw() { | + | * [[https:// |
| - | | + | |
| - | | + | |
| - | for (let i = 0; i < 3; i++) { | ||
| - | let imgIndex = imageOrder[i]; | ||
| - | let col = colors[imgIndex]; | ||
| - | tint(col[0], | ||
| - | image(images[imgIndex], | ||
| - | } | ||
| - | } | ||
| - | |||
| - | function mousePressed() { | ||
| - | assignRandomColors(); | ||
| - | shuffleImageOrder(); | ||
| - | redraw(); | ||
| - | } | ||
| - | |||
| - | function assignRandomColors() { | ||
| - | colors = []; | ||
| - | |||
| - | for (let i = 0; i < 3; i++) { | ||
| - | let rand = int(random(3)); | ||
| - | if (rand === 0) { | ||
| - | colors.push([255, | ||
| - | } else if (rand === 1) { | ||
| - | colors.push([0, | ||
| - | } else { | ||
| - | colors.push([0, | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | function shuffleImageOrder() { | ||
| - | imageOrder = [0, 1, 2]; | ||
| - | for (let i = imageOrder.length - 1; i > 0; i--) { | ||
| - | let j = floor(random(i + 1)); | ||
| - | [imageOrder[i], | ||
| - | } | ||
| - | } | ||
| - | </ | ||
/var/www/vhosts/ct-lab.info/wiki.ct-lab.info/data/pages/extras/codikon/p5js/carnovsky.txt · Last modified: by Felix Hardmood Beck