Ich bin neu im Programmieren und Spielprogrammieren. Ich habe etwas über Vektoren und Mathematik gelesen, aber ich habe eine Frage - wo verwende ich Vektoren bei der Spielprogrammierung? Vielleicht kann jemand ein einfaches Beispiel geben, wo Sie Vektoren verwenden (in 2D)?
Ich habe Beispiele gefunden, aber meistens befinden sie sich in der Konsole, wo sie Zahlen ausgeben, und große Beispiele, die ich nicht verstehe.
class Star
Point2D
inclass ResizeRectangle
Antworten:
Was sind Vektoren?
Vektoren sind Sätze von Koordinaten unterschiedlicher Dimension. Jede Koordinate in einem Vektor repräsentiert eine absolute Position in der Richtung des Raums, in dem sich der Vektor befindet.
Beachten Sie, dass wir in allen Fällen den Vektoren für unser Problem eine Bedeutung zugewiesen haben. Während Sie in Spielen häufig Vektoren finden, die für Geometrie verwendet werden, gibt es keinen Grund, warum Sie nichts anderes damit anfangen können.
Warum verwende ich Vektoren?
Erstens, die Sie nie haben Vektoren zu verwenden. Solange Sie x und y oder die Koordinaten, die Ihnen wichtig sind, im Auge behalten, geht es Ihnen in gewisser Weise gut.
Der Vorteil bei der Verwendung von Vektoren besteht jedoch darin, dass sie ordentlich Dinge wie Richtung und Position darstellen und auch mehrere mathematische Operationen definiert haben, die Ihnen das Leben erleichtern.
Betrachten Sie für ein einfaches Beispiel das Skalarprodukt .
Angenommen, Sie haben ein Radarsystem in einem Spiel von oben nach unten. Jeder Feind, der im Radarsektor auftaucht (ein kuchenförmiger Keil in 2D), sollte einen kleinen roten Punkt auf Ihrem Bildschirm haben. Sie müssen also herausfinden, welche Feinde sich in Ihrem Radarbereich befinden.
Sie können testen, ob sich die Feinde in einem Dreieck befinden. Sie können auch testen, ob sich die Feinde im Schnittpunkt der beiden Halbräume der Ebenen / Linien befinden, die die beiden Seiten des Radarsektors definieren.
Oder Sie können einfach ein Skalarprodukt verwenden , um die Prüfung durchzuführen. Hier ist wie:
Dies ist sehr praktisch und ermöglicht es Ihnen, Radare, die in unterschiedliche Richtungen zeigen (ändern Sie einfach den Vorwärtsvektor) und unterschiedliche Breiten (ändern Sie einfach den Radarbreitenwinkel), auf einfache Weise zu verwenden. In diesen Fällen können Sie auch denselben Code wiederverwenden !
Warum verwende ich sonst Vektoren?
Wenn Sie in 2D arbeiten, können Sie komplexe Effekte und Bewegungen (Drehen, Skalieren usw.) am besten mithilfe eines Szenendiagramms erzielen. Ein Planet hat ein umkreistes Schiff, das Schiff hat eine umkreiste Drohne. Die Berechnung dafür ohne die Verwendung von Vektormathematik ist wirklich sehr, sehr hässlich.
In der Vektormathematik stellen wir jeweils einen Punkt und eine 3x3-Transformationsmatrix dar. Der Planet nutzt seine Transformation, das Schiff nutzt seine Transformation und die Transformation des Planeten, und die Drohne nutzt seine Transformation und die Transformation des Schiffes und die Transformation des Planeten.
Wenn sich der Planet bewegt, ändert man seine Transformation und das Schiff und die Drohne werden automatisch "kostenlos" positioniert. Viel sauberer Code.
Immer noch nicht überzeugt. Vektoren sind auch die native Darstellung für Position, Geometrie und Bewegung, die von fast allen Grafikbibliotheken verwendet wird - und sicherlich auch von OpenGL und DirectX. Sie werden wahrscheinlich nicht davonkommen, ohne sie zu benutzen.
Fazit Vektoren sind ein leistungsstarkes Werkzeug zum Schreiben von klarem Code, mit dem geometrische Probleme sauber und elegant gelöst werden können.
quelle
Ein 2D-Beispiel sind Bildschirmkoordinaten. Sie identifizieren ein Pixel auf dem Bildschirm und haben eine x- und eine y-Komponente [x, y], dh die linke obere Bildschirmposition [0, 0].
Ein weiteres Beispiel: Stellen Sie sich einen Text vor, der vom rechten Bildschirmrand zum linken Bildschirmrand läuft. Jetzt müssen Sie die Geschwindigkeit des Lauftexts in Pixel pro Sekunde definieren, dh [-20, 0], was bedeutet, dass der Text 20 Pixel pro Sekunde nach links rollt und niemals die Höhe ändert.
Ein weiteres erweitertes Beispiel: Stellen Sie sich ein 2D-Spiel vor, das auf verschiedenen Bildschirmauflösungen (800 x 600, 1024 x 768 usw.) ausgeführt werden soll. Dies kann problemlos intern durch Verwenden einer Bildschirmbreite von 0,0 bis 1,0 und einer Höhe von 0,0 bis 1,0 erfolgen, um die Spielelogik zu entkoppeln von der tatsächlichen Bildschirmauflösung. Wenn Sie nun auf den Bildschirm zeichnen, multiplizieren Sie einfach den internen Vektor mit dem Auflösungsvektor:
beachten Sie, dass alle 3 Variablen hier 2D-Vektoren sind, sie haben eine x- und eine y-Komponente, dh für diese internal_pos [0.5, 0.25]:
So wird die interne Position [0.5, 0.25] in die tatsächliche Bildschirmposition [400, 150] umgewandelt
Das war das grundlegende Zeug. Der eigentliche Vorteil von Vektoren ist die Anwendung in der Linearen Algebra, bei der Sie mithilfe von Matrizen Ihre Scheitelpunkte (Drehen, Skalieren, Spiegeln usw.) transformieren können, dh Ihre gesamte interne Position einfach um 90 Grad drehen können, oder Sie müssen den Bildschirm austauschen Position 0 von oben nach unten auf dem Bildschirm, da z. B. eine von Ihnen verwendete Drittanbieter-Bibliothek diese Konvention verwendet.
quelle
screen_pos = internal_pos * screen_resolution
ist nicht so koordinateninvariant, wie Sie sie geschrieben haben. Sie könnte geeignetererweise geschrieben werdenscreen_pos = map_to_screen * internal_pos
, wennmap_to_screen
es sich um eine lineare Zuordnung handelt (die als Matrix, in diesem Fall als diagonale, geschrieben werden kann).Hier ist eine großartige Erklärung der Vektoren in der Spieleentwicklung auf Wolfire Games Blog:
http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
quelle
Ein Vektor ist eine Entität, die sowohl einen Wert als auch eine Richtung hat. Beispiele für Vektoren in der realen Welt und physikalisch basierte Spiele sind Geschwindigkeit und Impuls. Eigenschaften, die nur Werte, aber keine Richtung haben, werden Skalare genannt und umfassen Position, Masse, Dichte usw.
Vektoren werden für Spiele benötigt, die vektorähnliche physikalische Eigenschaften emulieren (wie erwähnt - Geschwindigkeit, Beschleunigung usw.). Die Mathematik, die für Vektorberechnungen verwendet wird, wird als lineare Algebra bezeichnet .
quelle
Überall dort, wo Sie eine Zahl für jede Dimension haben, um etwas darzustellen, kann die Sammlung dieser Zahlen als Vektor betrachtet werden. Position, Geschwindigkeit und Beschleunigung sind die Hauptbeispiele für Vektoren. In einigen Fällen kann es auch sinnvoll sein, die Blickrichtung als Vektor darzustellen.
Für grundlegende Dinge spielt es keine Rolle, ob Sie diese Zahlen als Vektoren betrachten oder nicht, aber wenn Sie irgendeine Art von Physik betreiben möchten, sollten Sie sich mit Vektor-Mathematik befassen.
quelle
Ganz einfach, alles mit einer Position oder einer Richtung, die überall in einem Spiel vorkommt, verwendet Vektoren. Ein Vektor ist wie ein Punkt
Der Unterschied liegt jedoch wirklich darin. Ein Punkt ist nur ein Punkt, während ein Vektor ein Pfeil ist.
Wenn Sie haben
Sie sagen, dass ich an dieser Stelle x 5 und y 10 meine.
Wenn Sie jedoch einen Vektor deklarieren ...
Du sagst wirklich, ich deklariere einen Pfeil von 0,0 bis x 5, y 10;
Sie können sogar festlegen, dass der Punkt, von dem aus Ihr Vektor zeigt, ein Punkt im Raum ist. Verwenden Sie beispielsweise einen Punkt und einen Vektor, um unser Objekt zu verschieben. Verwenden Sie einen Punkt2, um seine Position zu speichern, und einen Vektor2, um es zu verschieben .
Jetzt können Sie einen Vektor verwenden, um diesen Punkt zu verschieben. Nehmen wir an, wir möchten diesen Punkt um 10 Einheiten auf der x-Achse nach oben verschieben
Jetzt hat sich der Punkt dahin bewegt, wo Ihr Vektorpfeil es befohlen hat.
Punkt ist jetzt
Als letztes ist zu beachten, dass ein Vektor manchmal wie ein Punkt verwendet wird und umgekehrt, nur weil er denselben Datentyp enthält.
quelle
v = pos - origin
sov != pos
seit Herkunft ist ein Punkt{0, 0, 0, 1}