Alpha Blending berechnen ?



  • Ich weiß das es viele Funktionen gibt die das machen aber trotsdem würd mich mal intressieren wie das funkzt.

    Angenommen der Pixel ist 0xFF00FF und würd geblendet zu 50% von 0x000000
    Was würde rauskommen ?



  • Genau die Hälfte, wenn du jetzt mal Gammakorrekturen der getrennten Farbwerte außen vor lässt. (Nicht jede Farbe scheint dem Auge gleich hell bei gleichem Wert).

    Also 0x7F007F



  • also wenn dus in ein programm/spiel einbauen willst würde ich es in rgb umwandeln dann addieren und durch 2 teilen 🙂 weis nicht ob das die schnellste methode ist aber sollte zumindest funktionieren 😉



  • Mathematisch gesehen gibts nur eien Funktion.

    Bye, TGGC (Ein Jahr Helden)



  • Also bei mein Bsp war das ja noch recht simple aber was ist z.B wenn ich nur 26% haben will,kennst jemand ne Formel ? Wäre sehr hilfreich 🙂



  • Skuldas schrieb:

    Also bei mein Bsp war das ja noch recht simple aber was ist z.B wenn ich nur 26% haben will,kennst jemand ne Formel ? Wäre sehr hilfreich 🙂

    Dreisatz.
    Oder die Prozentrechnung als dessen Spezialfall.



  • Ja, kenne die Formel.

    Bye, TGGC (Ein Jahr Helden)



  • ich würd mal sagen die geht in etwa so...

    farbe = farbe1 * faktor + farbe2 * ( faktor - 1 )


  • Mod

    dot schrieb:

    farbe = farbe1 * faktor + farbe2 * ( faktor - 1 )

    *hehe* erinnert mich an "wer findet den versteckten fehler" 🙂

    rapso->greets();



  • 😕



  • Denk dir du siehst ein Körper der gelbes Licht ausstrahlt RGB(255, 255, 0) durch eine Sonnenbrille, die blaue Gläser besitzt RGB(0, 255, 255)

    Wie sieht der Körper durch die blaue Sonnenbrille aus? Er ist Grün RGB(0, 255, 0)

    Hier haben wir es mit einer Subtraktiven Farbmischung zu tun

    Ein Modell für Subtraktives Farbmischung ist CMY (Cyan-Magenta-Yellow-Black)

    Zwischen dem RGB und dem CMY Model besteht folgende Beziehung:
    C = 1 - R
    M = 1 - G
    Y = 1 – B

    Zunächst rechnen wir beide RGB Wert in einen CMY Wert um:
    Gelb = RGB(1,1,0) = CMY(0, 0, 1)
    Blau = RGB(0,1,1) = CMY(1, 0, 0)

    Gelb + Blau = CMY(0,0,1) + CMY(1,0,0) = CMY(1, 0, 1)

    CMY(1, 0, 1) = RGB(0, 1, 0) = Grün

    Wie man sieht könnte man so die passende Farbe ausrechnen



  • Was ist Alpha Blending?
    "Alpha blending is a process of mixing colors and generating a transparent affect."

    erfüllt Alpha Blending noch andere Zwecke?

    Hier steht wie AlphaBlending in OpenGL gemacht wird (hab ich mit google gefunden):
    http://www.opengl.org/resources/tutorials/sig99/advanced99/notes/node203.html

    So machts DirectX: (selber in der SDK nachschauen - da stehen auch Formeln)

    Ein RGB Wert wird als Vektor aufgefasst - Vektoren kann man mit Skalaren multiplizieren, wie man das in anderen Vektorräumen gewohnt ist. Im RGB Model hat das den schönen Effekt, dass man damit einfach einen RGB Wert heller bzw. dunkler machen kann:

    http://home.arcor.de/ulile/img153.png

    Das RGB Farbmodell ist ein additves Farbmodel - d. h. man kann irgendwie etwas addieren und es kommt dabei etwas sinnvolles raus

    z. B. (255, 0, 0) + (0, 255, 0) + (0, 0, 255) = (255, 255, 255)
    oder:
    Rot + Grün + Blau = Weiß

    Rot etwas dunkler:
    (255, 0, 0) * 0.5

    Farben mischen im RGB System:
    Wie kann man aus zwei gegebenen Farben die Mischfarbe berechnen?

    Wir wissen
    Schwarz + Rot = Rot
    Schwarz + Grün = Grün
    Scharz + X = X

    Was passiert wenn man einen Anteil Weiß mit einem Anteil Rot mischt? Klar dürft sein das die Mischfarbe irgendwie Rötlich sein muss

    (255, 255, 255) + (255, 0, 0) – hier haben wir das Problem das der Wert der bei dieser Addition entsteht nicht mehr im RGB Farbwürfel besteht

    Man kann s * (x,y,z) auch anders interpretieren – s gibt die Intensität an mit der eine Farbe (rot,grün,blau) ausgestrahlt wird

    (Als maximale Intensität habe ich hier 255 angenommen)

    Wenn man s als Intensität interpretiert, dann kommt man schnell drauf wie man die Farben korrekt mischen kann: nehmen wir an wir wollen die Farben zu gleichen Teilen mischen, dann gilt:
    0.5 * (255, 255, 255) + 0.5 * (255,0,0) = (127.5, 127.5, 127.5) + (127.5,0,0) = (255, 127.5, 127.5)

    Der Alphawert gibt einfach das Mischungsverhältnis an



  • @Dot

    farbe = farbe1 * faktor + farbe2 * ( 1 - faktor )



  • verdammt lol, ok als alter mathematiker ist mir das jetzt ziemlich peinlich...



  • zum Beweis das die Farbmischung so funktioniert hier ein kleines Beispiel:

    http://turing.fh-landshut.de/~jamann/farbmischung.bmp

    Das erste Rechteck besteht aus den RGB Werten (0, 0, 0) und (255, 255, 255) - es hat den Anschein das es die gleiche Farbe hat wie das zweite Rechteck das nur aus den aus der Farbe (255, 128, 128) besteht - das dirtte Rechteck hat die Farbe (255, 0, 0) zum vergleiche mit den anderen Rechtecken

    (falls jemand etwas anderes sieht kann es darn liegen das die Auflösung zu Hoch eingestellt ist oder das anzeigegerät irgendwie Interpoliert und es zu Farbverfälschungen kommt)



  • Folgende Definiton zu Alpha Blending ist übrigens falsch:

    "Alpha blending is a process of mixing colors and generating a transparent affect."

    bei meinem ersten Post handelt es sich zwar um eine Form vom Blending, aber nicht um eine Form von Alpha Blending - Alpha Blending heißt es dann, wenn in irgendeiner Form der Alpha Wert eines Pixels in die Berechnung miteinbezogen wird - ansonsten spricht man einfach nur von Blending

    Folgende Parameter haben in OpenGL nichts mit dem Alphawert zu tun:
    GL_ZERO, GL_ONE, GL_DST_COLOR, GL_SRC_COLOR, GL_ONE_MINUS_DST_COLOR,
    GL_ONE_MINUS_SRC_COLOR


Anmelden zum Antworten