Ahoi!
Ich suche nach Informationen über Kachelkarten oder vielmehr darüber, wie eine bestimmte Art von Kachelkarte genannt wird.
Ich interessiere mich für die Art der Implementierung, die in Achterbahn-Tycoon oder der Transport-Tycoon-Reihe von Spielen verwendet wird, und habe mich mit Vektorfeld-Terrain und Höhenkarten-Terrain befasst, aber ich bin nicht sicher, ob sie für das geeignet sind, was ich suche entwickeln.
Es war ein Kampf, anständige Informationen zu finden, da die meisten Leute sie als isometrische Kachelkarte bezeichnen, aber ich möchte etwas in 3D mit einer festen orthografischen Perspektive erstellen. Ich verstehe, dass der zugrunde liegende Speicher der Kachelkarte nichts damit zu tun hat, wie sie gerendert wird, aber ich möchte keine 2D-Kachelkarte wie Pokemon / Zelda-Spiele der alten Schule erstellen, sondern eher nach dem Vorbild von Diablo mit der Fähigkeit zum Einschließen überhängende Klippen und abfallendes Gelände.
Ich versuche nur, die richtigen Begriffe zu finden, um Google und Stackoverflow nach Ressourcen zu durchsuchen, damit ich entscheiden kann, welchen Weg ich einschlagen soll.
Bisher habe ich es geschafft, eine grundlegende Kachelkarte zu erstellen, ohne die in einem VBO gespeicherte und als Drahtmodell gerenderte height / y-Komponente zu verwenden. Bisher sieht das gut aus, aber ich gehe davon aus, dass ich Probleme haben werde, wenn ich versuche, einen einzelnen Scheitelpunkt zu manipulieren, um Klippen und Hänge zu erstellen, ohne eine benachbarte Kachel zu beeinflussen.
Gibt es eine bestimmte Art der Implementierung, die ich prüfen sollte? Ich dachte, ich hätte es geknackt, als ich eine ganze Menge Informationen über Vektorfeldgelände gefunden habe, aber ich bin mir nicht sicher, ob dies auch zu den richtigen Ergebnissen führen würde.
Wenn mir jemand etwas Licht ins Dunkel bringen kann, wäre die Hilfe sehr dankbar :)
Aktualisieren
Ich habe ein Bild zur weiteren Verdeutlichung beigefügt, was ich erreichen möchte:
Bild entlehnt von So erstellen Sie gekippte (Höhen-) isometrische Kacheln
Dieses Bild zeigt den Geländetyp, den ich generieren möchte, enthält jedoch nicht die "Klippen" oder überhängenden Geländetypen, die ich modellieren möchte. Es wirft jedoch einige andere Fragen auf, die ich nicht berücksichtigt hatte, nämlich:
- Wie würden „Schichten“ wie das Wasser (oben links im Bild) behandelt, um den sichtbaren Boden unter dem Wasser einzuschließen?
- Wie würden die "Kanten" der Karte berücksichtigt, damit die Erde / der Schlamm gerendert wird, um die Welt als eine nicht flache Einheit darzustellen?
- Könnte der zugrunde liegende Speicher für diese Art von Gelände verwendet werden, um Physik wie einen Ball, der einen Hügel hinunter rollt, oder die Bewegungsgeschwindigkeit eines Spielers, der einen Hang überquert, zu modellieren?
Ich hatte die Idee, dass jede Kachel des Geländes mit 8 Scheitelpunkten modelliert werden könnte, wobei die 4 Hauptscheitelpunkte die eigentliche Kachel selbst abdecken und die verbleibenden 4 Scheitelpunkte zum Modellieren der Seiten / Wände jeder Kachel verwendet werden. Die beiden Probleme, die ich bei dieser Implementierung sehe, sind, dass a) die Weltkarte im Wesentlichen doppelt so groß ist und b) da nicht alle Kacheln "Wände" enthalten, einige Kacheln redundante Eckpunkte haben, die nicht verwendet werden.
Ich möchte einen Terrain-Editor erstellen, mit dem jede Kachel deformiert werden kann und der die Möglichkeit bietet, das Terrain während des Spiels zu ändern. Dies wirft an sich zusätzliche Fragen auf wie: Kann ein VBO verwendet werden, um das Gelände zu speichern und zu rendern, während es im laufenden Betrieb geändert wird, und ist es auch möglich, Scheitelpunkte zu ändern, ohne benachbarte Kacheln zu beeinflussen?
Ich habe den Eindruck, dass ich die Dinge entweder überkompliziere oder auf eine Analyse-Lähmung stoße, weil ich es versäume, Code zu schreiben, um das Problem zu lösen, ohne eine klare Vorstellung davon zu haben, wie ich das erreichen würde, was ich will.
Auch hier bin ich wirklich nur auf der Suche nach einem Schub in die richtige Richtung. Gibt es eine bestimmte Art von Tilemap- / Terrain-Implementierung, die es ermöglicht, dass eine 3D-Karte sowohl von einem Karteneditor als auch während des Spiels deformiert wird, oder muss ich sozusagen meine eigene rollen? Ich versuche hier nicht, das Rad neu zu erfinden, aber ich habe Schwierigkeiten, Ressourcen zu finden, da ich nicht sicher bin, wonach ich suchen soll.
Wenn jemand Informationen, Ressourcen oder Codefragmente bereitstellen kann, wäre dies sehr dankbar, da ich bestrebt bin, mir die Hände schmutzig zu machen und etwas anderes als das flache Drahtmodell zu produzieren, das ich derzeit habe.
Danke fürs Lesen!
Dies: http://30.media.tumblr.com/tumblr_m06qv6OREt1r2qjpao1_500.png ist ein Beispiel für eine Karte, die ich vor einiger Zeit erstellt habe.
Ich hatte eine XML, die die Karte und verschiedene Arten von Kacheln darstellt. Jeder Typ hätte einige Attribute:
ALL
(wenn sie mit einer Kachel um sie herum zusammengeführt werden sollte)EQUAL
(nur mit Kacheln desselben Typs zusammenführen)?NONE
(niemals zusammenführen).Ich würde dann alle Kacheln lesen und sie in der Szene erstellen. Zuerst nur unter Berücksichtigung der Position. Jedes Plättchen musste seinen Nachbarn kennen, also musste ich zweimal durch die Karte gehen, einmal, um alles zu erstellen, und noch einmal, um jeden Scheitelpunkt an die richtige Position zu bewegen.
Obwohl meine Modelle Hexen sind, ist das Konzept dasselbe. Sie würden einen Würfel benötigen, um Ihre Kachel darzustellen. Dann würden Sie die Basisscheitelpunkte auf die unterste Ebene verschieben und die Oberseite des Würfels mit den Würfeln um ihn herum "glätten". Sie würden auch prüfen, ob zwei Seiten der Würfel zusammengeführt wurden, sodass Sie diese Seite einfach aus dem Würfel entfernen können (wenn sie nicht zusammengeführt werden, handelt es sich wahrscheinlich um eine Klippe oder etwas anderes).
Über Physik hängt von Ihrem Ziel ab. Wenn Sie so etwas wie Achterbahn-Tycoon machen, brauchen Sie sie nicht wirklich. Sie können einfach die Spielerhöhe zwischen den einzelnen Plättchen überprüfen und die Gehgeschwindigkeit bestimmen. Sie können dasselbe für ein Objekt tun, das sich von selbst bewegt (wie der Ball), Sie können die Kacheln (oder den aktuellen Kachelwinkel) überprüfen und eine Richtung / Geschwindigkeit festlegen. Wenn Sie realistische Physik (wie Schwerkraft, Reibung usw.) benötigen, müssen Sie eine Physik-Engine verwenden, und Sie können die 3D-Darstellung des Würfels in der Engine verwenden.
Ebenen sind ebenfalls möglich, aber Sie benötigen so etwas wie Minecraft (mit Glättung der Würfel in der höchsten Ebene). Wenn Sie nur Schichten für Wasser benötigen, können Sie eine "Wasserquelle" auf einer Kachel haben und Ihren Code jeden Raum um sie herum füllen lassen, der sich auf derselben Höhe oder niedriger befindet (eine rekursive Lösung würde hier gut passen).
Ein Terrain-Editor wäre auch einfach. Wenn Ihr Code flexibel genug ist, können Sie die Transformationen auf eine einzelne Kachel (die, die Sie ändern) oder auf eine Liste von Kacheln (wenn Sie einen Pinsel verwenden) anwenden auswählen und verschieben). Der gleiche Code kann verwendet werden, um das Gelände im Spiel zu ändern. Und ja, Sie können die Scheitelpunkte auf dem VBO ändern. Es ist auch möglich, Scheitelpunkte zu ändern, ohne andere zu beeinflussen (dies hängt auch davon ab, dass Sie so codieren).
quelle