Surfaces zusammenfassen.

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

    • Surfaces zusammenfassen.

      Hallo liebe Community!
      In unserem aktuellen Projekt stehen Soul Reaver und Ich ein bisschen auf der Leitung. Wir möchten zwei Surfaces zusammenfassen, um Videospeicher zu sparen.
      Die Situation ist folgende:
      Wir haben ein Surface auf, dass die Schatten gezeichnet werden. Wir können die Schatten nicht direkt auf das andere Surface zeichnen, da diese mit draw_primitive gezeichnet werden und die Schatten transparent und weich sein sollen.
      Auf das andere Surface wird der Boden gezeichnet, der aus mehreren Sprites besteht.

      Jetzt war die Überlegung:
      Wir zeichnen die Beiden Sachen, Schatten und Boden erstmel auf ihr eigenes Surface, und anstatt diese beiden Surfaces dann hintereinander im Draw-Modus zu zeichnen, erstellen wir ein drittes und zeichnen im Create event die zwei anderen auf dieses.
      Nachdem dies getan worden ist, werden das Schatten und Bodensurface geleert und nur mehr das andere bleibt über, auf dem nun Boden+Schatten gezeichnet wird.

      Problem:
      Irgendwie scheint das Draw-Verhalten auf Surfaces anders zu arbeiten, als auf dem normalen Bildschirm. Denn wenn wir die beiden Surfaces drawen lassen, ohne sie vorher auf eines zusammenzufassen, wird der Schatten korrekt dargestellt. Bei unserer Methode allerdings, erhält der Schatten aber einen Grauton, was sich darauf zurückführen lässt, dass irgendein Problem beim Surface auftritt, sodass der Alphawert des Schattensurfaces ignoriert wird und so getan wird, als wäre ein weißer Hintergrund.
      Im Anhang noch ein Bild, um das Problem zu zeigen.

      © 2008 by Teamgrill Productions
    • Ein sehr ähnliches Problem ist bei mir auch mal aufgetreten, als ich versucht hatte, eine Surface im Blend Mode auf eine andere Surface zu zeichnen.. Niemand konnte mir helfen, es scheint wirklich so zu sein, als wäre das Draw-Verhalten unterschiedlich auf der Surface. Beschreib mal oder mach am besten ne kleine Zeichnung, wie genau die Surfaces aussehen und wie sie gezeichnet werden.
      "das war meine letzte flamewar PM an dich ."
    • Ich hab es hier nochmal vereinfacht, wie es sein soll:

      Das erste und das zweite Surface sollen zusammengefasst werden zu einem, wobei der Alpha Wert des ersten (Schwarze Schatten) ein bisschen gemildert werden und so angepasst, dass das untere ensteht,

      © 2008 by Teamgrill Productions
    • also codemässig in der art:

      GML-Quellcode

      1. surface_set_target(res)
      2. draw_surface(background)
      3. draw_set_blend_mode(bm_subtract)
      4. draw_surface(shadows)
      5. surface_reset_target()//oder so.. =P
      ?
      "das war meine letzte flamewar PM an dich ."
    • Codemäßig siehts so aus:

      GML-Quellcode

      1. floorshadow=surface_create(room_width,room_height);
      2. surface_set_target(global.surshadow)
      3. draw_clear_alpha(0,0)
      4. scr_shadows()
      5. surface_reset_target()
      6. surface_set_target(floorshadow)
      7. draw_clear_alpha(0,0)
      8. draw_surface_ext(global.surfloor,0,0,1,1,0,c_white,1)
      9. for (i=-3; i<3; i+=1)
      10. {
      11. draw_surface_ext(global.surshadow,i,i,1,1,0,c_white,0.075);
      12. }
      13. surface_reset_target()
      14. surface_free(global.surfloor)
      15. surface_free(global.surshadow)
      Alles anzeigen


      scr_shadows ist nur das Script, dass die Schatten draufzeichnet. Die anderen zwei Surfaces sind schon im Room-Create Code erstellt worden, nicht dass noch jemand denkt ich vergesse, die Surfaces zu erstellen.

      © 2008 by Teamgrill Productions
    • Ich werde es vermutlich nicht mehr finden, aber ich bin da mal vor langer Zeit über ein ähnliches Problem gestolpert und konnte es mir nicht erklären - ich vermute sogar an einer Stelle einen Bug.

      Deshalb: Tut euch selbst einen Gefallen und verwendet beide Methoden (mit Umschaltfunktion) bis die Engine komplett fertig ist. Falls da irgendwo ein Fehler steckt, solltet ihr ihn so bemerken - mich hat dieses Problem damals bei meiner Pseudo-3D-Lichtengine zru Verzweiflugn getrieben.

      Und: Kannst du den Post aus der GMC hier zitieren/übersetzen? Würde den Thread runder machen.
    • Benutzer online 1

      1 Besucher