3D Kamera und Grids - Nur das zeichnen, was man sieht

  • GM 8

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

  • 3D Kamera und Grids - Nur das zeichnen, was man sieht

    Hey Leute,

    ich übe mich gerade an den ds_-Funktionen sowie ds_grid.
    Ich möchte eine Landschaft in 3D zeichen lassen (immer ein Ausschnitt aus dem Grid).
    Das klappt auch soweit ganz gut. Jedoch möchte ich nur das drawen lassen, was der Spieler sieht,
    damit ein bisschen mehr FPS rausspringen.

    So sieht es momentan aus:


    So wäre es optimal:



    (Grüner Pfeil und Kreis - Player, Blau - Nichts gezeichnet, Rot - Gezeichnet, Grüner vertikaler Strich - View)

    Wie kann ich für eine Koordinate im Gitter überprüfen, ob die Kamera den
    Teil der Landschaft auf dieser sieht?
  • Ja, das wäre eine möglichkeit, jedoch gibt point_direction einen Wert zwischen 360 und 0 grad zurück.
    wenn der Spieler nun in richtung 340° sieht, dann wird die Überprüfung von +90° schwierig.

    Aber, ja, darauf bin ich noch gar nicht gekommen. Ich werde mal schauen, ob ich
    da was gutes coden kann.

    EDIT: Das Problem ist gelöst.

    EDIT 2: Das Programmieren der Überprüfung scheint gar nicht so einfach zu sein.
    Was ist hieran falsch?

    GML-Quellcode

    1. var xx, yy, spr, spr_xx, spr_yy, over, get_direction, overA, overB ;
    2. xx = argument0 //Spielerkooridnaten
    3. yy = argument1 //Spielerkooridnaten
    4. spr = argument2 //Sprite
    5. spr_xx = argument3 //Spritekooridinaten
    6. spr_yy = argument4 //Spritekooridinaten
    7. get_direction = point_direction(_xx,_yy,spr_xx,spr_yy) //Die Richtung vom Spieler zum sprite
    8. overA = obj_player.direction + 90
    9. overB = obj_player.direction - 90
    10. if overA > 360
    11. {
    12. over = overA - 360
    13. if get_direction > 0 && get_direction < over or get_direction < 360 && get_direction > obj_player.direction
    14. {
    15. SCR_TERR_DRW_PRT(xx+spr_xx,yy+spr_yy,spr) // Das Zeichen. Das wird korrekt ausgeführt.
    16. }
    17. }
    18. else
    19. {
    20. if get_direction < overA && get_direction > obj_player.direction
    21. {
    22. SCR_TERR_DRW_PRT(xx+spr_xx,yy+spr_yy,spr)
    23. }
    24. }
    25. if overB < 0
    26. {
    27. over = overB + 360
    28. if get_direction < 360 && get_direction > over or get_direction > 0 && get_direction < obj_player.direction
    29. {
    30. SCR_TERR_DRW_PRT(xx+spr_xx,yy+spr_yy,spr)
    31. }
    32. }
    33. else
    34. {
    35. if get_direction > overB && get_direction < obj_player.direction
    36. {
    37. SCR_TERR_DRW_PRT(xx+spr_xx,yy+spr_yy,spr)
    38. }
    39. }
    Alles anzeigen


    Es ist gerade 00:19 Uhr vllt. übersehe ich ja was.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Shapow ()

  • Benutzer online 1

    1 Besucher