Ich habe eine isometrische Karte, über die ich verschiedene Bilder lege. Die meisten Bilder passen über eine einzelne Kachel, einige Bilder sind jedoch etwas größer. Zum Beispiel habe ich ein Bett mit Fliesen der Größe 2x3.
Dies führt zu einem Problem beim Zeichnen meiner Objekte auf dem Bildschirm, da einige Kacheln fälschlicherweise andere Kacheln überlappen.
Die beiden mir bekannten Lösungen bestehen darin, das Bild entweder in 1x1-Kachelsegmente aufzuteilen oder meinen eigenen Algorithmus für die Zeichenreihenfolge zu implementieren, indem beispielsweise jedem Bild eine Nummer zugewiesen wird. Das Bild mit der Nummer 1 wird zuerst gezeichnet, dann 2, 3 usw.
Hat jemand einen Rat, was ich tun soll?
Mir scheint, dass das Aufteilen eines isometrischen Bildes nicht offensichtlich ist. Wie entscheiden Sie, welche Teile des Bildes sich in einer bestimmten Kachel befinden? Ich kann es mir auch nicht leisten, alle meine Bilder manuell aufzuteilen.
Der Zeichnungsreihenfolge-Algorithmus scheint eine bessere Wahl zu sein, aber ich bin mir nicht sicher, ob er einfach zu implementieren sein wird. Ich kann in meinem Kopf nicht lösen, wie ich mit Situationen umgehen soll, in denen Sie den Index eines Bildes ändern, wodurch viele andere Bilder beeinträchtigt werden. Wenn jemand Ressourcen / Tutorials dazu hat, wäre ich sehr dankbar.
Teilen Sie Ihre Objekte in 1 × 1 × 1-Würfel und weisen Sie jedem Würfel ein Bild der Teile des Objekts zu, die sich physisch in diesem Würfel befinden würden.
Dies ist einfach, wenn Sie mit tatsächlichen 3D-Objekten beginnen und diese in 2D rendern. Wenn Sie Ihre Objekte direkt in 2D zeichnen (oder wenn Sie bereits Kunstwerke haben, die Sie teilen müssen), ist ein manueller Aufwand erforderlich. Glücklicherweise muss die Aufteilung nicht genau sein, solange Sie sicherstellen, dass keiner der einem bestimmten Würfel zugewiesenen Bildteile außerhalb des sechseckigen Bereichs verschüttet wird, den ein fester 1 × 1 × 1-Würfel an dieser Position abdecken würde. Es kann hilfreich sein, eine Überlagerung zu erstellen, in der die Umrisse jedes Würfels als zusätzliche Ebene in Ihrem Grafikeditor angezeigt werden.
Dann weisen Sie jedem Würfel einfach eine Priorität als p = x + y + z zu (vorausgesetzt, alle drei Koordinaten nehmen zur Kamera hin zu) und rendern die Würfel in aufsteigender Reihenfolge nach Priorität.
Hier ist ein kurzes Beispiel basierend auf diesem Bild aus Wikimedia Commons (von Phasmatinox / Allefant , verwendet unter der CC-By-SA 3.0- Lizenz):
Die Kommode auf dem Bild nimmt zwei Kacheln ein, und ich habe die Grenzen dieser Kacheln (die roten Sechsecke) darüber gezeichnet. Die Teile des Bildes, die in jedem Sechseck liegen, sollten der entsprechenden Kachel zugewiesen werden. Der Teil, in dem sich die Sechsecke überlappen, kann entweder einer Kachel (oder sogar beiden, wenn Sie möchten) zugewiesen werden, da die Auswahl das Endergebnis nicht beeinflusst.
Beachten Sie, dass Sie diesen einfachen Algorithmus möglicherweise näher erläutern müssen, wenn sich mehrere Objekte in einer Kachel, Wände / Böden zwischen Kacheln oder Objekte (z. B. Personen) reibungslos zwischen Kacheln bewegen können. Wände und Böden sind recht einfach zu handhaben: Sie können an jedem Punkt nach dem Inhalt der Kachel, vor der sie sich befinden (aus Sicht der Kamera) und vor der Kachel, hinter der sie sich befinden, gezeichnet werden. Dies ist auch eine nützliche Faustregel für Objekte, die sich zwischen Kacheln bewegen. Behandle sie wie eine Wand zwischen diesen Fliesen.
Bei mehreren Objekten in einer Kachel sind diese manchmal recht einfach: Wenn Sie beispielsweise ein Buch auf der Brust im Bild hatten, sollte es offensichtlich nach der Oberfläche gezeichnet werden, auf der es liegt. Es kann jedoch komplizierter werden, wenn Sie beispielsweise Objekte haben, auf denen Menschen sitzen können. Wenn beispielsweise eine Person auf einer Bank saß und von der Kamera abgewandt war, sollte der Körper der Person nach der Bank gezogen werden, aber ihre Beine (die sich hinter der Bank von der Kamera befinden) müssen davor gezogen werden. Eine Lösung wäre in diesem Fall, die Beine einer sitzenden Person in eine separate Komponente mit eigener Position zu teilen (entweder in der angrenzenden Kachel oder zwischen den Kacheln).
quelle
Es kann Ihnen helfen, Ihre Objekte nach Typ oder Höhe zu unterteilen. Zum Beispiel sollte Landschaft (Böden, Wände) vor Objekten (Betten) gezeichnet werden. Aufgrund der isometrischen Perspektive sollten Kacheln mit geringerer Höhe vor Kacheln mit höherer Höhe gezeichnet werden.
Wenn Sie sich für die Indexnummerierung entscheiden (eigentlich Z-Reihenfolge), empfehle ich, Lücken zwischen den Nummern zu verwenden - machen Sie nicht Ihre Böden
1
und Ihr Bett2
. Verwenden Sie etwas wie Fußböden =10
und Betten =20
oder100
oder etwas anderes, damit Sie Dinge in die Mitte "einfügen" können, ohne alles andere zu dominieren.quelle