Ich erstelle ein XNA-Spiel, das viel Platz für die Spieler benötigt. Derzeit ist die von mir verwendete Testhöhenkarte 4096 x 4096 und wird als 4-Bit-BMP gespeichert.
Ich versuche, diese riesige Höhenkarten-Datei zu nehmen und im Spiel zu rendern. Das Problem, auf das ich stoße, ist die Tatsache, dass es ineffizient ist, das gesamte Gelände auf einmal in den Speicher zu laden, da der Großteil des verfügbaren Speichers verwendet wird.
Ein weiteres Problem, auf das ich gestoßen bin, ist, dass ich das Terrain aufgrund eines in XNA festgelegten Hard-Limits nicht alle in einem Grundelement rendern kann.
Vor diesem Hintergrund bin ich auf eine Reihe von Lösungen gestoßen, die ich unten aufgeführt habe:
- Rendern basierend auf dem Standort des aktuellen Benutzers - Zeichnen Sie im Grunde genommen ein Quadrat um den Benutzer, unabhängig von seiner Ausrichtung innerhalb der Welt. Dies ist auch nicht genau das, was ich wollte, da Sie immer noch Speicherplatz rendern, den der Benutzer nicht sieht.
- Rendern basierend auf der Ausrichtung und Position des Benutzers - Ich habe eine Formel gefunden, um ein Dreieck abzurufen, das die Pixel der Höhenkarte enthalten soll, die gerendert werden sollen. Dies erwies sich jedoch als sehr schwierig.
- Aufteilen des Geländes in mehrere Blöcke und Rendern derjenigen, die dem Benutzer am nächsten sind - Immer noch nicht sehr effizient, da Sie immer noch Blöcke rendern, die die Leute nicht sehen. Und es ist arbeitsintensiv, weil ich dann meine Höhenkarte in mehrere Teile aufteilen muss und die Skalierbarkeit zu einem großen Problem wird.
Nachdem ich diese Lösungen ausprobiert habe, habe ich keine Ideen mehr, was ich tun soll. Ich habe einige Antworten erhalten, in denen mir Leute sagen, dass ich diese komplexen Algorithmen ausführen soll, aber ich habe einfach keine Ahnung, wie ich sie angehen soll.
Im Grunde frage ich nach einer einfachen und unkomplizierten Methode, um in XNA gewaltiges Terrain mit höchster Effizienz zu rendern.
Ich bin ziemlich neu in der Spieleentwicklung im Allgemeinen, aber ich bin bereit zu recherchieren, ob es vielversprechend erscheint.
Update 1: Nachdem ich die Geoclipmapping-Methode untersucht hatte, begann ich damit zu codieren. Ich habe die ganze Mathematik erledigt und das Spiel läuft. Es ist jedoch äußerst ineffizient - was wahrscheinlich eine schlechte Codierung meinerseits ist. Es läuft mit 2FPS und verwendet einen ganzen Kern meiner CPU. Ich werde versuchen, den Code zu verbessern, aber ich denke, ich brauche mehr Hilfe. Hier ist ein Pastebin des Codes für die Terrain-Manager-Klasse. Ich werde später mit weiteren Ergebnissen zurückkehren, falls ich es jemals effizienter machen sollte.