Quadratische Spielkarte als Kugel gerendert

7

Für ein Hobbyprojekt von mir habe ich eine endliche Voxelwelt geschaffen (ähnlich wie Minecraft), aber wie gesagt, meine ist endlich. Wenn Sie den Rand erreichen, werden Sie auf die andere Seite geschickt. Das alles funktioniert gut zusammen mit dem Rendern der anderen Seite der Karte, aber ich möchte dieses Raster als Kugel rendern können.

Von oben gesehen ist die Welt ein Quadrat. Ich möchte im Grunde in der Lage sein, einen Teil dieses Quadrats als Kugel darzustellen, als ob Sie einen Planeten betrachten würden. Im Moment experimentiere ich damit, einen kreisförmigen Abschnitt der Karte zu nehmen und diesen zu rendern, aber er sieht zu flach aus (keine Krümmung an den Rändern).

Meine Frage ist dann, wie man die Kanten eines 2D-Kreises am besten krümmt, damit er wie eine Halbkugel aussieht. Ich bin jedoch nicht übermäßig an diese Implementierung gebunden. Wenn also jemand eine andere Idee hat, den Platz als Planeten darzustellen, bin ich ganz Ohr.

Ross Hays
quelle
Verwandte Themen : gamedev.stackexchange.com/questions/43741/… Welches ist etwas, das Sie auf Ihre gesamte Welt anwenden würden, nicht nur auf einen einzelnen Würfel.
MichaelHouse

Antworten:

6

Im Moment haben Sie im Wesentlichen eine 2D-Ebene oder zumindest ein dickes Würfelblatt. Das ist deine Karte. Sie möchten diese Karte nehmen und um eine Kugel wickeln. Eine einfache Möglichkeit, dies zu tun, besteht darin , Ihre Umhüllungskoordinaten in sphärische Koordinaten umzuwandeln . Wickeln Sie so, wie Sie es mit Ihrer aktuellen Welt tun würden.

Um all die fiesen Verzerrungseffekte zu vermeiden, die Sie durch diese Konvertierung an den Polen erhalten, würde ich auch die Umhüllung so verschieben, dass sich Ihr Spieler immer am Äquator der Kugel befindet.

Dies kann ganz im Shader erfolgen, wenn Sie möchten. Dies hält die Dinge sehr einfach, da es sich um einen Effekt handelt, den Sie einfach ein- oder ausschalten können und Sie sich keine Gedanken darüber machen müssen, Ihre Spiellogik zu ändern.

Ich habe selbst ein wenig damit experimentiert und das Obige ist die Methode, die ich verwendet habe. Die Ergebnisse waren vielversprechend:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

MichaelHouse
quelle
Hmm das sieht interessant aus und du hast definitiv etwas zu zeigen. Das einzig mögliche Problem bei dieser Methode sind die Pole. Wie Sie bereits erwähnt haben, ist es am besten, sie zu verstecken, aber ich werde tatsächlich zwei Spieler haben, einen im "Weltraum" und einen am Boden. Im Idealfall kann ich den Spieler vom Weltraum bis zu einer bestimmten Entfernung auf dem Boden sehen. Ich wäre also nicht in der Lage, die Anzeige der Pole einzuschränken ...
Ross Hays
@Roflha Da die Verformung im Shader implementiert werden kann, können die Pole pro Benutzer ausgeblendet werden.
MichaelHouse
Guter Punkt. Da Sie es jedoch bereits getestet haben, eine letzte Frage (sorry, ich bin gerade auf meinem Handy und kann es nicht ausprobieren), lässt das Bild es so aussehen, als würden sich zwei benachbarte Türme von Blöcken abspalten, wenn sie hoch gehen (aus der Perspektive des Weltraums) ). Ist das der Fall? Eigentlich könnte es schwierig sein, das zu umgehen, wenn es so ist.
Ross Hays
@Roflha Nein, es ist ein rein visueller Effekt. Das Aufteilen von Blöcken müsste auf einer niedrigeren Ebene erfolgen.
MichaelHouse
Ein 3x3-Turm, der in die oberen Ebenen des Spiels reicht, würde also nicht oben ausfransen? Denn basierend auf dem Ansatz, den Sie beschreiben (Zuordnung der Koordinaten der Würfel zu einer Kugel), würde jede Säule des Turms an einer anderen Position am äußeren Rand der Kugel abgebildet, als ich es beurteilen kann. Ich wäre neugierig, wenn möglich ein Beispielbild zu sehen.
Ross Hays
2

Verwenden Sie den gleichen Ansatz wie in Populous III - betrügen Sie das Auge beim Herauszoomen. Auf diese Weise können Sie Ihr planares Weltmodell beibehalten, mit dem Sie leicht arbeiten können.

Ingenieur
quelle