Table of Contents

Additive Farbmischung – RGB

Erklärung der additiven Farbmischung

Additive Farbmischung ist ein physikalisches Prinzip der Farberzeugung, bei dem Licht verschiedener Farben übereinander projiziert wird. Es basiert auf der Addition von Lichtanteilen und ist grundlegend für alle farberzeugenden Systeme, die mit selbstleuchtenden Quellen arbeiten – wie Monitore, Displays, Projektoren oder Lichtinstallationen. Durch additive Farbmischung wird jede Bildfarbe durch Überlagerung der RGB-Kanäle erzeugt, wobei die Intensität jedes Kanals typischerweise von 0 bis 255 abgestuft wird.

Grundprinzipien der additiven Farbmischung (RGB-Farbmodell):

Werden zwei dieser Farben überlagert, entstehen die Sekundärfarben:

Siehe auch subtraktiven Farbmischung auf Basis von CMY (cyan, magenta, yellow).

Beispiel p5.js Code

let rSlider, gSlider, bSlider, distanceSlider;

function setup() {
  createCanvas(600, 550);
  noStroke();

  // Distance-Slider (oben): 0 = weit auseinander, 200 = vollständig überlagert
  distanceSlider = createSlider(0, 200, 100);
  distanceSlider.position(25, 20);
  distanceSlider.style("width", "550px");

  // RGB-Slider (unten)
  rSlider = createSlider(0, 255, 255);
  rSlider.position(20, height - 60);
  rSlider.style("width", "150px");

  gSlider = createSlider(0, 255, 255);
  gSlider.position(220, height - 60);
  gSlider.style("width", "150px");

  bSlider = createSlider(0, 255, 255);
  bSlider.position(420, height - 60);
  bSlider.style("width", "150px");
}

function draw() {
  background(0);

  let r = rSlider.value();
  let g = gSlider.value();
  let b = bSlider.value();

  // Umgekehrte Distanz: Max-Wert (200) → volle Überlagerung (d = 0)
  let sliderVal = distanceSlider.value();
  let maxDistance = 200;
  let d = maxDistance - sliderVal;

  let radius = 200;
  let cx = width / 2;
  let cy = height / 2 - 30;

  // Positionen im gleichseitigen Dreieck
  let xR = cx;
  let yR = cy - d;

  let xG = cx - d * cos(PI / 6);
  let yG = cy + d * sin(PI / 6);

  let xB = cx + d * cos(PI / 6);
  let yB = cy + d * sin(PI / 6);

  // Additive Farbmischung
  blendMode(ADD);
  fill(r, 0, 0);
  ellipse(xR, yR, radius);
  fill(0, g, 0);
  ellipse(xG, yG, radius);
  fill(0, 0, b);
  ellipse(xB, yB, radius);
  blendMode(BLEND);

  // Textanzeige
  fill(255);
  textSize(14);
  text("Überlagerung: " + sliderVal + " / 200", 20, 15);
  text("Red: " + r, 20, height - 10);
  text("Green: " + g, 220, height - 10);
  text("Blue: " + b, 420, height - 10);
}