True Isometrische Projektion mit HTML5-Canvas
Ich bin ein Neuling mit dem HTML5-Canvas und JavaScript, aber gibt es eine einfache Möglichkeit zu haben, Isometrische Projektion in HTML5-Canvas-element?
Ich meine die wahre isometrische Projektion - http://en.wikipedia.org/wiki/Isometric_projection
Dank für alle Antworten ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, die ich empfehlen würde denken, das Spiel Welt wie ein regulärer X durch Y raster von quadratischen Fliesen. Das macht alles von Kollisionserkennung, Wegfindung, und auch das Rendern viel einfacher.
Rendern der Karte in einer isometrischen Projektion ändern Sie einfach die Projektions-matrix:
Das ist spannend, das erste mal, wenn Sie es arbeiten, aber du wirst schnell erkennen, dass es nicht so nützlich für die tatsächliche isometrische Karten... man kann nicht einfach drehen Sie Ihr Bild und sehen, was um die Ecke. Die Transformationen sind nicht so viel zum zeichnen, da Sie für die Konvertierung zwischen Bildschirm-Raum und Welt-Raum.
Bonus: herauszufinden, welche Fliesen die Maus über
Was Sie wollen zu tun ist, konvertieren von "view-Koordinaten" (pixel-offsets von der Leinwand Herkunft) zu "Welt-Koordinaten" (pixel-offsets von der Fliese 0,0 entlang der diagonalen Achsen). Dann teilen Sie einfach die Welt-Koordinaten durch die Kachelbreite und-Höhe, um die "map-Koordinaten".
In der Theorie, alles, was Sie tun müssen, ist ein Projekt, das die "view position" Vektor durch die inverse der Projektions-matrix vor, um die "Welt" - position ist. Ich sage in der Theorie, denn aus irgendeinem Grund die Leinwand nicht bieten eine Möglichkeit der Rückgabe des aktuellen Projektions-matrix. Es ist ein
setTransform()
Methode, aber keinegetTransform()
, so ist dieses, wo Sie müssten, um zu Rollen Sie Ihre eigenen 3x3-Transformationsmatrix.Es ist wirklich nicht schwer, und Sie benötigen diese für die Konvertierung zwischen Welt-und Sicht-Koordinaten beim zeichnen von Objekten.
Hoffe, das hilft.
Axonometrische rendering
Die besten verarbeiten, axonometrische (gemeinhin als Isometrie) rendering ist über eine Projektions-matrix.
Projektion-Objekt wie folgt beschreiben kann alles, was Sie tun müssen, um jede form von axonometrische Projektion
Das Objekt hat 3 Transformationen für die x -, y-und z-Achse mit jeder beschreibt das Ausmaß und die Richtung, in der 2D-Projektion für die x -, y -, z-Koordinaten. Eine Transformation für die Berechnung der Tiefe und Herkunft, ist in der canvas-Pixel (wenn setTransform(1,0,0,1,0,0) oder was auch immer die aktuelle Transformation für die Leinwand ist)
Projekt einen Punkt, rufen Sie die Funktion
axoProjMat({x=10,y=10,z=10})
und wird es wieder ein 3D-Punkt mit x,y 2D-Koordinaten des vertex und z die Tiefe (Tiefe Werte positiv, nähert sich die Ansicht (gegenüber perspektivische 3D-Projektion));Mit diesem Objekt können Sie die Funktion
axoProjMat.setProjection(name)
wählen Sie den Projektionstyp.Unten ist die damit verbundene Projektion Arten, wie skizziert, auf die im wiki Axonometrische Projektionen plus zwei Modifikationen üblicherweise in pixel-Kunst und Spiele (mit dem Präfix Pixel). Verwenden
axoProjMat.setProjection(name)
wobei name einer derprojTypes
Namen der Eigenschaft.Beispiel Wahrer Isometrische Projektion.
Snippet ist ein einfaches Beispiel mit der Projektion festgelegt
Isometric
so detailliert auf den wiki-link in den OP ' s Frage und mit den oben genannten Funktionen und Objekte.JS:
CSS:
HTML: