Zeichnen von Objekten auf eine Surface (UPDATE)

    • GM 8

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

    • Zeichnen von Objekten auf eine Surface (UPDATE)

      Hi Leute!
      Nun ich habe wiedermal ein kleines 3D Problem dass mich davon abhält "awesome-Stuff" zu machen. X(

      Ich versuche auf eine Surface ALLE Objekte die ein draw-event besitzen zeichnen zu lassen.
      Diese Surface wird dann gezeichnet und mithilfe von "screen_refresh()" ausgegeben.

      Alles im Step event:
      Spoiler anzeigen

      GML-Quellcode

      1. surface_set_target(render_surface);
      2. draw_clear(c_white);
      3. draw_set_color(c_white);
      4. d3d_set_projection(30,30,20,0,0,0,0,0,10);
      5. with all event_perform(ev_draw,0);
      6. surface_reset_target();
      7. //zeichne nder rendersufrace am bildschirm
      8. d3d_set_projection_ortho(0,0,room_width,room_height,0);
      9. d3d_set_hidden(false);
      10. d3d_set_lighting(false);
      11. draw_surface_stretched(render_surface,0,0,room_width,room_height);
      12. d3d_set_hidden(true);
      13. d3d_set_lighting(true);
      14. screen_refresh();
      Alles anzeigen


      Der Punkt ist: Das funktioniert nicht. Zumindest nicht direkt.

      Ich weiss und ich habe es getestet) dass die Zeile wo "event_perform" aufgerufen wird hier nciht funktioniert.

      Ersetze ich diese durch eine draw-aktion wie d3d_draw_block, so wird der block korrekt auf der surface abgebildet.

      So funktionierts:
      Spoiler anzeigen

      GML-Quellcode

      1. surface_set_target(render_surface);
      2. draw_clear(c_white);
      3. draw_set_color(c_white);
      4. d3d_set_projection(30,30,20,0,0,0,0,0,10);
      5. d3d_draw_block(-200,-10,-10,10,10,10,background_get_texture(bk_tex),1,1); //DAS HIER FUNKTIONIERT !#~*><²
      6. surface_reset_target();
      7. //zeichne nder rendersufrace am bildschirm
      8. d3d_set_projection_ortho(0,0,room_width,room_height,0);
      9. d3d_set_hidden(false);
      10. d3d_set_lighting(false);
      11. draw_surface_stretched(render_surface,0,0,room_width,room_height);
      12. d3d_set_hidden(true);
      13. d3d_set_lighting(true);
      14. screen_refresh();
      Alles anzeigen


      Sobald ich die draw-aktion jedoch in ein anderes objekt stecke und versuche dieses "aufzurufen" funktioniert das nicht...

      Meine Frage an euch: Wieso ist das der Fall? Übersehe ich etwas?

      /Edit: Die Screen_redraw funktion will ich hier nicht verwenden. Sie funktioniert in diesem Skript aber sowieso nicht. (Was ich auch nicht nachvollziehen kann...)
      Ich habe auch versucht die Depth des zu zeichnenden Objekts zu verändenr was auch keine Resultate ergab...

      /edit2: Sry für Rechtschreibfehler... X(

      UPDATE:

      /Edit: Ok, ich habe den fehler gefunden. Lag wohl aber eher bei mir, da im Room das falsche Objekt platziert war. :D

      Das witzige an der ganzen sache ist, dass jedesmal beim austesten der gm8.1 datei ein "Error 216" aftaucht (mit einer davo eingeblendeten Meldung dass die exe nicht mehr funktioniert.) Passiert aber nur bei der Schliessung des Games.
      Komischerweise taucht der error nicht auf, wenn man die gm81 Datei kompiliert und als eine "standalone exe" ausgeführt habe.

      Den Error als gm81 datei konnte ich wegbekommen indem ich bei den "global game settings" die Option "force software vertex processing" aktiviert habe.
      Wer das mal selber ausprobieren möchte:


      /edit: Habe es hinbekommen. X(
      Man muss die Surface im "game-end" Event wieder löschen. Ansonsten kommt der bug....

      GML-Quellcode

      1. surface_free(render_surface);

      Wollte das nurmal für die Nachwelt hinterlassen.^^
      Dateien
      • gm_msaav3.zip

        (47,24 kB, 188 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von LEWA ()