2D Hintergrund in 3D Problem

  • GM 7

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

  • 2D Hintergrund in 3D Problem

    So, liebe Leute,

    ihr könnt mir bestimmt bei diesem kleinen Problemchen hier helfen. Ich habe einen Hintergrund in meinem 3D Rennspiel. Dafür benutz ich d3d_draw_wall, kombiniert mit nem Schnipsel Code aus dem FPS Shooter Tutorial von YoYoGames, womit man Sprites in die Richtung der Kamera zeichnen kann.

    GML-Quellcode

    1. var ss,cc;
    2. ss = sin((obj_kart.dir+tilt)*pi/180);
    3. cc = cos((obj_kart.dir+tilt)*pi/180);
    4. d3d_draw_wall(obj_kart.x-2048*ss+lengthdir_x(2048,obj_kart.dir),obj_kart.y-2048*cc+lengthdir_y(2048,obj_kart.dir),448,obj_kart.x+2048*ss+lengthdir_x(2048,obj_kart.dir),obj_kart.y+2048*cc+lengthdir_y(2048,obj_kart.dir),0,bg_test_2,4,1);


    Funzt auch ganz gut so. Code sollte selbsterklärend sein. tilt is die Neigung der Kamera auf das Kart, wenn man Kurven fahrt und so.

    Nun zum Problem: Die Wall hängt halt so IMMER genau vor dem Kart. Also wenn da im Hintergrund ein Berg ist und man fährt rechts sieht man den gleichen Berg. Wie kann ich den scrollen lassen? Habs schon mit einer Variable xx probiert, die beim Kurven fahrt so weit erhöht oder erniedrigt wird bis sie die Weite des Hintergrundes überschritten hat und dann zurück auf 0 gesetzt wird (der Hintergrund lässt sich logischerweise kacheln). Hab das dann probiert mit lengthdir_x irgendwie reinzupflanzen und hab halt herumgespielt ohne wirklich zu wissen was ich tue. Wenn ich mich recht erinnere hat lengthdir_x(xx,obj_kart.dir+90) addiert zu den X Koordinaten und das gleiche halt noch mit lengthdir_y bei den Y Koordinaten halbwegs funktioniert, aber auch net so ganz gescheit. Könnt ihr mir da helfen?

    youtube.com/watch?v=UmlTW9YquOk

    Hier sieht man wie der Hintergrund eben ohne Scrollen aussieht.

    Bitte um Hilfe! ;)
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Ne, Skybox will ich net. Ich will, das das schön als "Sprite" gezeichnet wird. Also nicht verbogen.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Benutzt man nicht eigentlich eine Kugel?
    Sicher, dass da eine Skybox nicht die ganze Arbeit tun würde?
    Du musst nur aufpassen, da ich das Gefühl habe, dass der Gamemaker nur bis zu einer bestimmten relativen Position des Spielers drawt.
    Und falls du Fog an hast, musst du aufpassen, dass er die Skybox nicht verdeckt usw.
    Aber dieses "System" mit dem 2D-Hintergrund versteh ich nicht.
    Macht das nicht irgendwie alles schwerer?
  • Skybox kenne ich u.A. als Kugel aber auch als Würfel, wobei ich die Würfel-Lösung besser finde. Schwierigkeiten kann, wenn man damit keine Erfahrung hat, die Erstellung von Texturen bereiten, bei denen die Seiten zusammen passen müssen. Der Raum sieht aber meiner Meinung nach realistischer aus.
  • Ich würd mal sagen, das SkyBOX ein Würfel ist ;)
    Und deine Sorgen sind eigentlich bei allen Lösungen unbegründet, man muss die Texturen so vom Character auf Den Würfel projezieren, dass es nicht verzerrt wirkt, dann passt das schon.
    In dem Fall erkennt man sogar nicht einmal, das es ein Würfel ist. Und der Würfel hat gegenüber einer Kugel den vorteil, dass es keine Stelle gibt, an der alle Texturen zusammenlaufen.
    Einen Zylinder habe ich noch nie gebraucht, klingt aber ebenfalls interressant.
    Das Schwierigste dürfte bei allen Lösungen sein, dass man den Hintergrund eben so darauf projeziert, dass man die Form (Würfel, Kugel, Zylinder) dahinter nicht erkennt.

    Aber ansonsten: Mach einen umgestülpten Würfel, der dem Spieler folgt, und vor und nach dem Zeichnen sollte man Fog und Licht an bzw. ausschalten.
  • Skybox Model (UV-Gemapt):
    Spoiler anzeigen

    GML-Quellcode

    1. model_Skybox = d3d_model_create();
    2. d3d_model_primitive_begin(model_Skybox,4.0000);
    3. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,10000.0000,0.0000,0.0000,-1.0000,1.0000,1.0000,167772110000.0000,1.0000);
    4. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,10000.0000,0.0000,0.0000,-1.0000,1.0000,0.9500,167772110000.0000,1.0000);
    5. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,10000.0000,0.0000,0.0000,-1.0000,0.0000,0.9500,167772110000.0000,1.0000);
    6. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,10000.0000,0.0000,0.0000,-1.0000,0.0000,0.9500,167772110000.0000,1.0000);
    7. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,10000.0000,0.0000,0.0000,-1.0000,0.0000,1.0000,167772110000.0000,1.0000);
    8. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,10000.0000,0.0000,0.0000,-1.0000,1.0000,1.0000,167772110000.0000,1.0000);
    9. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,-10000.0000,0.0000,0.0000,1.0000,1.0000,0.0500,167772110000.0000,1.0000);
    10. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,-10000.0000,0.0000,0.0000,1.0000,0.0000,0.0500,167772110000.0000,1.0000);
    11. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,-10000.0000,0.0000,0.0000,1.0000,0.0000,0.0000,167772110000.0000,1.0000);
    12. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,-10000.0000,0.0000,0.0000,1.0000,0.0000,0.0000,167772110000.0000,1.0000);
    13. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,-10000.0000,0.0000,0.0000,1.0000,1.0000,0.0000,167772110000.0000,1.0000);
    14. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,-10000.0000,0.0000,0.0000,1.0000,1.0000,0.0500,167772110000.0000,1.0000);
    15. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,10000.0000,0.0000,-1.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    16. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,10000.0000,0.0000,-1.0000,0.0000,0.0000,1.0000,167772110000.0000,1.0000);
    17. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,-10000.0000,0.0000,-1.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    18. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,-10000.0000,0.0000,-1.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    19. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,-10000.0000,0.0000,-1.0000,0.0000,1.0000,0.0000,167772110000.0000,1.0000);
    20. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,10000.0000,0.0000,-1.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    21. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,10000.0000,0.0000,1.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    22. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,10000.0000,0.0000,1.0000,0.0000,0.0000,1.0000,167772110000.0000,1.0000);
    23. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,-10000.0000,0.0000,1.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    24. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,-10000.0000,0.0000,1.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    25. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,-10000.0000,0.0000,1.0000,0.0000,1.0000,0.0000,167772110000.0000,1.0000);
    26. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,10000.0000,0.0000,1.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    27. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,10000.0000,1.0000,0.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    28. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,10000.0000,1.0000,0.0000,0.0000,0.0000,1.0000,167772110000.0000,1.0000);
    29. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,-10000.0000,1.0000,0.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    30. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,-10000.0000,-10000.0000,1.0000,0.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    31. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,-10000.0000,1.0000,0.0000,0.0000,1.0000,0.0000,167772110000.0000,1.0000);
    32. d3d_model_vertex_normal_texture_color(model_Skybox,-10000.0000,10000.0000,10000.0000,1.0000,0.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    33. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,10000.0000,-1.0000,0.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    34. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,10000.0000,-1.0000,0.0000,0.0000,0.0000,1.0000,167772110000.0000,1.0000);
    35. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,-10000.0000,-1.0000,0.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    36. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,10000.0000,-10000.0000,-1.0000,0.0000,0.0000,0.0000,0.0000,167772110000.0000,1.0000);
    37. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,-10000.0000,-1.0000,0.0000,0.0000,1.0000,0.0000,167772110000.0000,1.0000);
    38. d3d_model_vertex_normal_texture_color(model_Skybox,10000.0000,-10000.0000,10000.0000,-1.0000,0.0000,0.0000,1.0000,1.0000,167772110000.0000,1.0000);
    39. d3d_model_primitive_end(model_Skybox);
    Alles anzeigen


    Kamera Code:
    Spoiler anzeigen

    GML-Quellcode

    1. d3d_set_projection_ext(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup,45,view_width/view_height,1,32000);



    Skybox Textur:



    Player Draw Code:
    Spoiler anzeigen

    GML-Quellcode

    1. d3d_model_draw(model_Skybox,x,y,z,background_get_texture(tex_Himmel))


    Das müsste es so ungefähr sein ._.