Was machen bm_one/max/zero?

  • Was machen bm_one/max/zero?

    Hi, ich habe mich nie Wirklich mit bm_one,max und zero beschäftigt. Ich weis nur das bm_add heller macht, und bm_subtract dunkler macht, die Farbe umdreht aber kein Alpha unterstützt. Aber was machen :
    bm_zero,bm_one und bm_max? Vllt gibt es noch einen nützlichen blend_mode!
    Weist nicht auf die Hilfe hin, da das:

    bm_zero: Blend factor is (0, 0, 0, 0).
    bm_one: Blend factor is (1, 1, 1, 1).
    bm_src_color: Blend factor is (Rs, Gs, Bs, As).
    bm_inv_src_color: Blend factor is (1–Rs, 1–Gs, 1–Bs, 1–As).
    bm_src_alpha: Blend factor is (As, As, As, As).
    bm_inv_src_alpha: Blend factor is (1–As, 1–As, 1–As, 1–As).
    bm_dest_alpha: Blend factor is (Ad, Ad, Ad, Ad).
    bm_inv_dest_alpha: Blend factor is (1–Ad, 1–Ad, 1–Ad, 1–Ad).
    bm_dest_color: Blend factor is (Rd, Gd, Bd, Ad).
    bm_inv_dest_color: Blend factor is (1–Rd, 1–Gd, 1–Bd, 1–Ad).
    bm_src_alpha_sat: Blend factor is (f, f, f, 1); f = min(As, 1–Ad).


    mir irgendwie net weiter hilft >_>
  • Es gibt zwei draw_set_blend_mode:

    draw_set_blend_mode(blend_mode)

    Hat bm_normal, bm_add, bm_subtract und bm_max.

    Da haste die wichtigsten blendmodes drin. bm_normal setzt halt wieder alles auf normal. bm_add addiert die farbwerte und bm_subtract machts genau anders rum. Bei bm_max werden die einzelen größsten Farbwerte übernohmen.

    draw_set_blend_mode_ext(src,dest)
    Hat das hier:

    bm_zero: Blend factor is (0, 0, 0, 0).
    bm_one: Blend factor is (1, 1, 1, 1).
    bm_src_color: Blend factor is (Rs, Gs, Bs, As).
    bm_inv_src_color: Blend factor is (1–Rs, 1–Gs, 1–Bs, 1–As).
    bm_src_alpha: Blend factor is (As, As, As, As).
    bm_inv_src_alpha: Blend factor is (1–As, 1–As, 1–As, 1–As).
    bm_dest_alpha: Blend factor is (Ad, Ad, Ad, Ad).
    bm_inv_dest_alpha: Blend factor is (1–Ad, 1–Ad, 1–Ad, 1–Ad).
    bm_dest_color: Blend factor is (Rd, Gd, Bd, Ad).
    bm_inv_dest_color: Blend factor is (1–Rd, 1–Gd, 1–Bd, 1–Ad).
    bm_src_alpha_sat: Blend factor is (f, f, f, 1); f = min(As, 1–Ad).


    src ist das womit du zeichnen willst (z.B: draw_sprite) und dest ist worauf du zeichnest (z.B: ein bereits gezeichneter Background).
    Hier eine Erklärung was in den blend_modes das in Klammer zu bedeuten hat:

    R = Rot, G = Grün, B = Blau, A = Alpha
    s = source (src), d = destination (dest)
    Farbwerte gehen von 0 bis 1.

    EDIT: versehenlich auf antworten geklickt Editieren das nochmal
    EDIT2: So fertig editiert.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von bernt ()

  • ähm eine frage hab ich auch noch^^
    wenn ich bm_add benutze und bei einem schwarzen raum einen roten punkt mache, sieht man ihn auch rot

    aber wenn ich bei einem weißen raum nen roten punkt mache, sieht man ihn nicht

    wenn ich bm_subtract mache dann kann ich das schon hinkriegen das man ihn sieht aber man kann da dann keinen image_alpha wert machen
    und in einem schwarzen raum würde man es dann wieder nich mehr sehen

    gibt es nicht irgendeins wo man alles machen kann?

    also das er nicht addiert und nicht abzieht sondern einfach nur roten punkt/sprite zeichnet, egal ob schwarzen oder weißen raum

    also das die farbe überall sichtbar ist und auch in der selber farbe bleibt

    (in einem roten raum sieht man einen roten punkt natürlich nicht^^)
    Die Schönheit liegt im Auge des Betrachters :D
  • @Merko

    Die durch bm_one, bm_zero... veränderten Farbwerte von Source und Destination werden zusammen addiert.

    Hier ein paar Beispiele:

    draw_set_blend_mode_ext(bm_src_alpha,bm_dest_alpha) ist bm_add. Beide Seiten werden zusammen addiert. Alpha ist miteingebaut.
    draw_set_blend_mode_ext(bm_one,bm_one) ist auch bm_one nur ohne Alpha

    draw_set_blend_mode_ext(bm_src_alpha,bm_inv_src_alpha) ist bm_normal. Alpha ist praktisch ein Crossfader hast du ihn ganz rechts (Alpha = 1) siehst das gerade gerenderte. Ist der ganz links (Alpha = 0) siehst von dem gerade gerendertem nichts.

    @Andyworld.

    Ist ja auch klar warum du nix siehst wenn du einen roten punkt auf weißem Hintergrund addierst. Weiß hat die größten RGB Werte! (Alle 3 = 255) Und da 255 der maximale Wert ist für einen Farbkanal, verändert sich bei einer Addition nix. In der GML geschrieben sähe das so aus: Rot=min(255 + <rotwert des sprite>,255) Und bei bm_subtract ist das genau das selbe bei schwarzem Hintergrund. Und das mit dem roten Raum geht auch nicht. (Rotwert ist ja schon auf Maximum!).

    Die Lösung: draw_set_blend_mode(bm_normal) :D Einfacher gehts nicht.
  • Benutzer online 1

    1 Besucher