Gibt es eine kurze Antwort, wie man einen Mode 7 / Mario-Kart-Effekt im Pygame macht?
Ich habe ausgiebig gegoogelt, alle Dokumente, die ich finden kann, sind Dutzende von Seiten in anderen Sprachen (asm, c) mit vielen seltsam aussehenden Gleichungen und dergleichen.
Idealerweise würde ich gerne etwas finden, das mehr in Englisch als in mathematischen Begriffen erklärt wird.
Ich kann PIL oder Pygame verwenden, um das Bild / die Textur zu manipulieren, oder was auch immer sonst notwendig ist.
Ich würde wirklich gerne einen Mode 7-Effekt im Pygame erzielen, aber ich scheine dem Ende meines Verstandes nahe zu sein. Hilfe wäre sehr dankbar. Alle Ressourcen oder Erklärungen, die Sie zur Verfügung stellen können, wären fantastisch, auch wenn sie nicht so einfach sind, wie ich sie gerne hätte.
Wenn ich es herausfinden kann, schreibe ich eine definitive Anleitung für Modus 7 für Neulinge.
edit: mode 7 doc: http://www.coranac.com/tonc/text/mode7.htm
Antworten:
Modus 7 ist ein sehr einfacher Effekt. Es projiziert eine 2D x / y-Textur (oder Kacheln) auf einen Boden / eine Decke. Alte SNES verwenden hierfür Hardware, aber moderne Computer sind so leistungsfähig, dass Sie dies in Echtzeit tun können (und kein Bedarf an ASM, wie Sie bereits erwähnt haben).
Die grundlegende 3D-Mathematikformel zum Projizieren eines 3D-Punkts (x, y, z) auf einen 2D-Punkt (x, y) lautet:
Wenn Sie darüber nachdenken, macht es Sinn. Objekte, die weit entfernt sind, sind kleiner als Objekte in Ihrer Nähe. Denken Sie an Eisenbahnschienen, die ins Nirgendwo führen:
Wenn wir auf die Formeleingabewerte zurückblicken:
x
undy
werden das aktuelle Pixel sein, das wir verarbeiten, undz
werden Entfernungsinformationen darüber sein, wie weit der Punkt ist. Um zu verstehen, wasz
sein sollte, sehen Sie sich das Bild an. Es zeigtz
Werte für das obige Bild:In diesem Beispiel
z
lautet der Werty - horizon
(vorausgesetzt, er(x:0, y:0)
befindet sich in der Mitte des Bildschirms).Wenn wir alles zusammenfügen, wird es: (Pseudocode)
Eine letzte Sache: Wenn Sie ein Mario-Kart-Spiel machen möchten, möchten Sie vermutlich auch die Karte drehen. Nun, es ist auch sehr einfach: drehen
sx
undsy
vor dem Abrufen des Texturwerts. Hier ist die Formel:und wenn Sie sich durch die Karte bewegen möchten, fügen Sie einfach einen Versatz hinzu, bevor Sie den Texturwert erhalten:
HINWEIS: Ich habe den Algorithmus getestet (fast Kopieren-Einfügen) und es funktioniert. Hier ist das Beispiel: http://glslsandbox.com/e#26532.3 (aktueller Browser und aktiviertes WebGL erforderlich)
ANMERKUNG 2: Ich benutze einfache Mathematik, weil Sie sagten, Sie wollen etwas Einfaches (und scheinen mit Vektor-Mathematik nicht vertraut zu sein). Sie können die gleichen Dinge erreichen, indem Sie Wikipedia-Formeln oder Tutorials verwenden, die Sie geben. Die Art und Weise, wie sie es gemacht haben, ist viel komplexer, aber Sie haben viel mehr Möglichkeiten, den Effekt zu konfigurieren (am Ende funktioniert es genauso ...).
Für weitere Informationen schlage ich vor zu lesen: http://en.wikipedia.org/wiki/3D_projection#Perspective_projection
quelle
Hier ist der Code, um es zu machen. Ich bin derselbe Code des Tutorials, den ich in meinem Blog erstellt habe . Hier erfahren Sie mehr über die Mode 7-Methode und das RayCasting.
Grundsätzlich ist der Pseudocode:
Hier ist der Code, den ich in JAVA nach meinem Tutorial erstellt habe.
Das Ergebnis ist:
quelle