Wie kann ich die erste sichtbare Kachel in einer isometrischen Perspektive bestimmen?

7

Ich versuche, den sichtbaren Teil einer rautenförmigen isometrischen Karte zu rendern. Das "Welt" -Koordinatensystem ist ein kartesisches 2D-System, bei dem die Koordinaten entlang der Achsen diagonal (in Bezug auf das Ansichtskoordinatensystem) zunehmen. Die "Ansicht" -Koordinaten sind einfach Mausversätze relativ zur oberen linken Ecke der Ansicht.

Geben Sie hier die Bildbeschreibung ein

Mein Rendering-Algorithmus zeichnet diagonale Bereiche, beginnend in der oberen rechten Ecke der Ansicht und diagonal nach rechts und unten, bis zur nächsten Zeile, wenn sie die rechte Ansichtskante erreicht. Wenn die Rendering-Schleife die untere linke Ecke erreicht, stoppt sie.

Es gibt Funktionen, um einen Punkt von Ansichtskoordinaten in Weltkoordinaten und dann in Kartenkoordinaten umzuwandeln.

Beim Rendern von Kachel 0,0 funktioniert alles, aber wenn die Ansicht durch das Rendering rollt, muss von einer anderen Kachel ausgegangen werden. Ich kann nicht herausfinden, wie ich feststellen kann, welche Kachel der oberen rechten Ecke am nächsten liegt.

Im Moment konvertiere ich einfach die Koordinaten der oberen rechten Ecke in Kartenkoordinaten. Dies funktioniert so lange, wie sich der Ansichtsursprung (obere rechte Ecke) innerhalb der Welt befindet. Wenn Sie sich jedoch den Rändern der Karte nähern, wird die Koordinate der Startkachel offensichtlich ungültig.

Ich denke, das läuft darauf hinaus zu fragen: "Wie kann ich den Schnittpunkt zwischen der X-Achse der Welt und der X-Achse der Ansicht finden?"

Alekop
quelle
Es lohnt sich wirklich, eine bildliche Darstellung des Problems zu geben. Können Sie das bitte tun?
Ayyappa
Haben Sie versucht, es mit Formeln in Isometric Projection im Wiki zu lösen ?
user712092
@ user712092: Ja, ich verwende eine 4x4-Matrix, um zwischen Ansichtsraum und Weltraum zu transformieren. Das funktioniert, aber das Problem ist, wie die x, y-Koordinaten für die Kachel berechnet werden, die dem oberen rechten Rand der Ansicht am nächsten liegt.
Alekop
@Man With Steel Nerves: Ich würde einen Screenshot posten, aber SO lässt mich wegen meines schlechten Rufs nicht. Stellen Sie sich jedoch einen großen Diamanten vor, der in einem kleineren Rechteck befestigt ist.
Alekop
a) Laden Sie das Bild auf die Bildhosting-Site hoch und fügen Sie dort die URL ein. b) Auf einer Pastebin-URL können sich mehrere Bild-URLs befinden . c) Fügen Sie den Textlink "Text ist auf dem Pastebin mit dem Suffix Lxzygtv9 aktiviert" ein. Sie können das Bild später; oder jemand anderes, der jetzt Bilder hinzufügen kann (ich habe anscheinend das Recht, Bilder zu bearbeiten und einzufügen).
user712092

Antworten:

1

Wenn Sie sich jedoch den Rändern der Karte nähern, wird die Startkachelkoordinate offensichtlich ungültig.

Nicht wirklich, Sie haben möglicherweise keine Daten für den Spot, aber es sollte nichts Falsches daran sein, dieselbe Formel zu verwenden.

Wenn Sie Vorschläge zur Überwindung potenzieller Probleme wünschen, möchten Sie uns möglicherweise den entsprechenden Code zeigen.

Bearbeiten:
Nehmen wir zur Verdeutlichung an, Sie haben eine Karte mit 100 x 100 Kacheln, die von 0 bis 99 indiziert ist. Zum Rendern würden Sie Folgendes tun:

//Loop structure that iterate through tiles
    if(tileX<=99 && tileX>=0 && tileY<=99 && tileY>=0){
        //Draw the tile
    }
    else{
        //Do nothing
    }
//End of loop
aaaaaaaaaaaa
quelle
Das ist eine gute Idee. Ich könnte einfach continuedie Rendering-Schleife, bis sich die aktuelle Kachel innerhalb der Karte und der Ansicht befindet. Ich werde es versuchen, sobald ich etwas Zeit finde! :)
Alekop