Deshalb habe ich überlegt, ein 2D-Spiel zu erstellen, bei dem Sie sich auch entlang der Z-Achse bewegen können, indem Sie die Ebene ändern, in der Sie sich befinden. Abhängig von der Tiefe möchte ich meine 2D-Sprites skalieren.
Einmal hatte mir jemand eine Demo gezeigt, in der er viele 2D-Sprites hatte, und durch Scrollen konnte er die Tiefe der Kamera ändern. Wenn Sie also hineinzoomen, nähern sich die Objekte dem Player und erscheinen größer. Dann habe ich mich gefragt, wie viel größer ein Objekt sein soll, wenn es 1 Einheit näher kommt. Wie würden Sie das berechnen? Also sagte der Typ zu mir: Es gibt eine Grundregel, die ich verwende: "Objekte, die doppelt so nah sind, erscheinen doppelt so groß."
Wenn ich es jetzt selbst teste, weiß ich, dass die Regel in der realen Welt nicht gilt;) Aber gibt es eine Konstante, die in Berechnungen der realen Welt für die Perspektive verwendet wird, oder so? Oder eine Formel?
Ich weiß, dass dies möglicherweise nicht der beste Ort ist, um eine solche Frage zu stellen, aber da dies die einzige Site ist, die ich für spielbezogene Fragen verwende, und mein Kontext ein Spiel ist, dachte ich, ich würde es versuchen. Außerdem erwarte ich, dass es hier jemanden gibt, der alles über 3D-Perspektiven und -Matrizen weiß, da es sich möglicherweise um 3D-Spiele handelt;)
tl; dr:
"Ein Objekt, das doppelt so nah ist, erscheint doppelt so groß" Das ist in der realen Welt nicht der Fall. Aber welche Konstante oder Formel ist richtig?
quelle
Antworten:
Im Allgemeinen ist dies abhängig von Ihrem Blickwinkel und der Richtung, in die er sich bewegt hat.
Beachten Sie, dass in der ersten Kameraansicht das Objekt, da der rote Block senkrecht zur Kameraansicht steht, doppelt so groß zu sein scheint, und zwar in einem perfekten Verhältnis von 1: 2 (Beachten Sie den Pfeil, der darauf hinweist, dass es nach dem Verschieben auf den Rand der Ansicht trifft doppelt so nah)
Der zweite Block hat dieselbe Größe und ist um 45 Grad gedreht. Wenn es gedreht wird, befindet sich die Unterkante nicht mehr im gleichen Abstand von der Kamera wie die Oberkante. Sie wird daher nicht korrekt im Verhältnis 1: 2 skaliert, ist aber tatsächlich doppelt so groß (wie bei derselbe Winkel auf dem weiter entfernten blauen Block wie auf dem nahen blauen Block.)
Zusammenfassend bedeutet dies, dass Ihr Freund korrekt war und ein Verhältnis von 1: 1 ("Objekte doppelt so nah, erscheinen doppelt so groß.") Für Ihre Objekte eine gute Wahl ist.
quelle
Ein doppelt so nahes Objekt erscheint doppelt so groß. Es ist eine Konsequenz von Thales 'Satz und es ist wahr in der realen Welt.
Man könnte argumentieren, dass Thales 'Theorem das zentrale mathematische Werkzeug für die perspektivische Projektion ist und das, was in der Grafik-Pipeline (OpenGL oder DirectX) als perspektivische Division bezeichnet wird . Es ist ein Satz, den Sie auf jeden Fall kennen und zu erkennen lernen sollten, wann er verwendet werden kann.
quelle
Eigentlich ist das so ziemlich wahr (wenn Sie ein Objekt doppelt so weit weg bewegen, sieht es halb so groß aus), aber es verdeckt, wie sich die visuelle Größe von Objekten ändern sollte, wenn sich der Betrachter bewegt. Insbesondere scheinen Objekte umso schneller größer zu werden, je näher sie sich befinden. Dies liegt daran, dass der Betrachter die Hälfte der Entfernung viel schneller zurücklegt, wenn sich das Objekt in der Nähe befindet, als wenn sich das Objekt in größerer Entfernung befindet. Oder anders ausgedrückt, während die Geschwindigkeit des Betrachters konstant ist, ändert sich der Wert von "halber Entfernung", wenn sich die Entfernung zum Objekt ändert.
quelle
Da Sie nicht im 3D-Raum arbeiten, können wir davon ausgehen, dass sich die Sprites niemals drehen (Drehung kann durch Schrägstellen usw. simuliert werden). Diese einfache Einschränkung macht es ziemlich einfach, einigermaßen genaue Zahlen für die Größe zu erhalten, die von der Entfernung abhängen soll von der Kamera.
Zunächst müssen Sie verstehen, wie 3D-Objekte gerendert werden. Obwohl eine Kamera auf einen Punkt konvergiert, gibt es eine unsichtbare Ebene, die als Bildschirm dient, auf dem die Objekte gezeichnet werden. Das einzige, was Sie über den Bildschirm wissen müssen, ist, wie weit er von der Kamera entfernt ist.
Hier ist ein Diagramm, wie ein Objekt in zwei verschiedenen Abständen auf eine Kamera gerendert wird.
Wie zu erwarten ist, hängt die Höhe des Objekts von der Entfernung zur Kamera ab. ABER da das Zerreißen in der nahen Ausleseebene stattfindet, müssen wir die Höhe des Sprites an diesem Punkt berechnen.
Einige grundlegende Trigger-Berechnungen führen Sie zu folgender Formel:
BEISPIEL:
Ich würde vorschlagen, mit zu beginnen
v=5
und von dort aus anzupassen, je nachdem, wie es aussieht. Ich kann eine Geige zusammenwerfen, mit der Sie die Änderungen in Echtzeit sehen können.TL; DR
BEARBEITEN: Wenn Sie sagen, dass Sie sich entlang der Z-Achse bewegen möchten (wie bei den meisten 3D-Spielen, Schützen usw.), wird die Berechnung der Objektgröße basierend auf der Entfernung auch von der Position im Rahmen abhängen. ähnlich dem peripheren Sehen. Stattdessen würde ich es mit meiner Mathematik versuchen, die eine orthografische Sichtweise ist (denken Sie an Mario, Angry Birds, Super Smash Bros usw.). Ich kenne das Aussehen und das Gefühl nicht, das Sie erreichen wollen, aber solange es real zu sein scheint, werden die Spieler es nie erfahren!
DEMO!
quelle
Dies wurde nicht behandelt, und ich dachte, dies könnte von Vorteil sein: Es sollte beachtet werden, dass sich die Gesamtfläche des Sprites vervierfacht , wenn Sie die Hälfte der Entfernung in X- und Y-Dimensionen verdoppeln . Das ist weil:
Nach dem Vergrößern:
Dies kann den Eindruck erwecken, dass der Zoomeffekt schnell auftritt oder zu stark ist. Sie können den Faktor anpassen, indem Sie 2 in der obigen Formel auf einen Gleitkommawert wie 1,5 oder 1,33 ändern.
Alternativ habe ich die Kameratiefe (Entfernung) zu Ihren Kacheln in einem Bytewert zusammen mit der Kameraübertragung (X und Y) gespeichert und dann die projizierte Kachelgröße folgendermaßen berechnet:
Beachten Sie, dass
CameraZ
die Zeitspanne zwischen 1 und 255 liegen muss. Diese Einschränkung kann für Sie in Zukunft ein Vorteil oder ein Nachteil sein.quelle