Blendmode Frage

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Blendmode Frage

    So hier ist mal wieder eien Blendmode Frage.

    Ich hab schon viel gesucht und ausprobiert aber denn noch bekommen wir es nicht hin.

    Ich will eine Texture (Surface) auf eine andere Surface zeichnene, aber mit Blend modus.

    Das zeichenen an sich Funktioniert. Und auch das Reapeaten der Texture.
    Aber es kommt dennoch immer ein Weißer rand um die Texture die von der Maske stammen muss.

    Das ist die Maske.

    Aber egal was für eine maske ich nutze, ich hab immer die weißen ränder.

    Hier mal der Code

    GML-Quellcode

    1. surface_terrain=surface_create(room_width,room_height)
    2. surface_brush=surface_create(128,128)
    3. surface_set_target(surface_terrain);
    4. draw_background_tiled(grass, 0, 0);
    5. surface_reset_target();
    6. surface_set_target(surface_brush);
    7. draw_background(background1, 0, 0);
    8. //draw_set_blend_mode_ext(bm_dest_color,bm_zero);
    9. draw_set_blend_mode_ext(0,bm_src_alpha)
    10. draw_rectangle_color(0,0,640,480,c_black,c_black,c_black,c_black,0);
    11. draw_sprite(sprite3, 0, sprite_get_width(sprite0)/2,sprite_get_height(sprite0)/2);
    12. draw_set_blend_mode(bm_normal);
    13. surface_reset_target ();
    Alles anzeigen


    Üner einander legen des Surface

    GML-Quellcode

    1. surface_set_target(surface_terrain);
    2. draw_surface(surface_brush,mouse_x-64, mouse_y-64);
    3. surface_reset_target()



    Wie bekomme ich es hin das diese weißen ränder nicht mehr sind und sich die Stein Texture ohne ränder mit dem Untergrund(Gras) verbindet?

    Danke im voraus an alle.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Blendmodes machen oftmals Probleme. Ich persönlich habs dann irgendwann aufgegeben alle Eigenheiten im Kopf zu behalten und probiere einfach alle möglichkeiten durch wenn so ein Problem auftritt.
    Es gibt ja nur 12*12 mögliche Kombinationen.
    Erstell ein separates Projekt welches einfach nur dies zeichnet was du brauchst und lass die blendmodes mit den Pfeiltasten ändern oder so (die verschiedenen Belndmode-Variablen beinhalten ja einfach nur nummern).

    Damit findest du schnell heraus welche Kombination für deinen Fall die richtige ist.
    Solch ein Projekt lässt sich dann auch beliebig oft erneut einsetzen..

    Nur mal son Vorschlag..

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Ich hatte mal ein ähnliches Problem. Bei mir hat sich das Problem gelöst als ich bei dem Objekt das Visible ausgeschaltet habe (auf false gestellt, bzw. Häckchen rausgemacht).
    In meinem Fall habe ich Licht simuliert.


    mfg
  • Das Problem wird in diesem Tutorial sehr gut beschrieben: GM 8 Surfaces - Vormultiplizierte Transparenz - Was ist das?

    In Kurzform: Wenn der Brush auf das Terrain gezeichnet wird, wird die Surface des Terrains aufgrund des Blend Modes an den Rändern des Brushes transparent. Was man an diesen Stellen also durchscheinen sieht, ist die Hintergrundfarbe des Raums. In oben verlinktem Tutorial wird das Problem noch genauer beschrieben und auch ein Vorgehen, mit dem man es lösen kann.

    Wendet man dieses auf dein Problem an, so ist eine elegante Lösung, einfach die Maske des Brushes mit dessen Transparenz vorzumultiplizieren. Ich habe mal ein Beispiel dazu angehängt. Mit dem habe ich es getestet und es hat funktioniert. Wie du siehst, wird die Maske an den Rändern dunkler, weil dort auch die Transparenz zunimmt. Der GML Code sollte dann wie folgt aussehen.

    Zum Erstellen der Surfaces:

    GML-Quellcode

    1. surface_terrain = surface_create(room_width,room_height);
    2. surface_brush = surface_create(128,128);
    3. surface_set_target(surface_terrain);
    4. draw_background_tiled(grass,0,0);
    5. surface_reset_target();
    6. surface_set_target(surface_brush);
    7. draw_background_tiled(background1,0,0);
    8. draw_set_blend_mode_ext(bm_zero,bm_src_color);
    9. draw_sprite(sprite3,0,0,0);
    10. draw_set_blend_mode(bm_normal);
    11. surface_reset_target();
    Alles anzeigen

    Zum Zeichnen des Brushes:

    GML-Quellcode

    1. surface_set_target(surface_terrain);
    2. draw_set_blend_mode_ext(bm_one,bm_inv_src_alpha);
    3. draw_surface(surface_brush,mouse_x-64,mouse_y-64);
    4. draw_set_blend_mode(bm_normal);
    5. surface_reset_target();
    Bilder
    • mask.png

      7,13 kB, 128×128, 103 mal angesehen