Welche Mathematik sollten alle Spieleprogrammierer kennen? [geschlossen]


163

Einfache Frage: Welche Mathematik sollten alle Spieleprogrammierer beherrschen, um erfolgreich zu sein?

Ich spreche nicht speziell über das Rendern von Mathematik oder Ähnlichem in den Nischenbereichen der Spieleprogrammierung, insbesondere nur über Dinge, die selbst Spieleprogrammierer kennen sollten, und wenn sie dies nicht tun, werden sie es wahrscheinlich nützlich finden.

Hinweis: Da es keine richtige Antwort gibt , handelt es sich bei dieser Frage (und ihren Antworten) um ein Community-Wiki.

Wenn Sie sich für mathematische Latexgleichungen interessieren, können Sie auch http://mathurl.com/ verwenden .


1
mmm ich glaube es gab ein thema über mathematische bücher, die jeder programmierer lesen sollte oder so, ich kann mich nicht wirklich daran erinnern ... aber es hatte ein paar nette sachen drauf ... ich bin mir nicht sicher, ob es hier war oder auch stapelüberlauf lol
Prix



15
Geschlossen als zu konstruktiv von Tetrad ♦
Thomas Eding

1
Ja @ThomasEding, zu weit gefasst hätte passender gewesen, da dies eindeutig ist Liste Frage .
Anko

Antworten:


137

Es gibt viele andere Formen der Mathematik, die nützlich sind, aber mindestens müssen Sie diese kennen:

  • Algebra und Arithmetik

Diese sind ziemlich einfach, aber wenn Sie diese nicht kennen, werden Sie nicht einmal die Chance haben, Programmierer zu sein, geschweige denn Spieleentwickler.

Objekte in einer Spielwelt werden mit Vektoren dargestellt. Ein Vektor repräsentiert Dinge wie die Position, Blickrichtung und Geschwindigkeit eines Objekts. Vektormathematische Berechnungen wie das Skalarprodukt , das Kreuzprodukt und die Vektornormalisierung sind unerlässlich.

Wie bewege ich mein Spielobjekt? Der Neuling könnte sagen:

"Ich weiß! Ich mache einfach:" object.position.x++.

Nein nein Nein. Sie müssen eine Vektorberechnung verwenden. Das Objekt benötigt einen Positions-, Richtungs- und Beschleunigungsvektor, mit dem Sie das Objekt bewegen können. Wenn Sie den Anfänger machen, stecken Sie in einem unhaltbaren Chaos fest und wie können Sie ihn in eine Richtung bewegen, die nicht mit der XYZ-Achse der Welt ausgerichtet ist?

Hauptgrund für die Verwendung von Quaternionen in Spielen ist, dass sie Drehungen nahezu so platzsparend wie Euler-Winkel darstellen, ohne dass die Gimbal-Sperre auftritt . Gimbal Lock beginnt, wenn ein Euler-Winkel eine Drehung von 90 Grad um eine beliebige Achse erreicht: Sie verlieren sofort einen Freiheitsgrad. In Quaternions wird dieses Problem durch Hinzufügen einer vierten Dimension behoben. Wenn Sie sich an Euler-Winkel halten, müssen Sie eine Achse so beschränken, dass sie sich nie mehr als ~ 89 Grad dreht.

Wenn Sie in einem Spiel die Mathematik für physikalische Antworten programmieren, wäre es keine schlechte Idee gewesen, an einem Physikkurs teilzunehmen.

Gründe, warum Sie physikalische Gleichungen kennen müssen:

  1. Ball abprallen lassen (siehe: Restitutionskoeffizient)
  2. Bewegen Sie einen Ball mit einer Kraft von x Newton in eine Richtung
  3. Stellen Sie sicher, dass etwas mehr oder weniger Reibung aufweist, damit es mit einer anderen Geschwindigkeit gleitet
  4. Kollisionsantworten: In welche Richtung dreht sich das Objekt, wenn ich es "hier" treffe?

Wenn Sie eine Physik-Engine (oder eine Spiel-Engine, in die die Physik-Engine integriert ist) verwenden, können Sie sich mit sehr wenig Wissen über Physik abfinden. Trotzdem ist es gut zu wissen, wann Sie sich die Hände schmutzig machen müssen, da die Physik-Engine nicht richtig funktioniert.


1
Für die Physik sind Chris Heckers Artikel zur Starrkörperdynamik, einschließlich Kollisionsreaktion und Wiederherstellung, großartig
tenpn

25
Sie erwähnten Quaternionen, aber keine Transformationsmatrizen?
Andrew Russell

8
"Gimble [sic] lock ist der Effekt, bei dem Sie Ihre Maus bewegen, um nach unten zu schauen. Er stoppt, wenn Sie direkt nach unten schauen."

4
Es wundert mich, wie oft Quaternionen mit Gimble Lock verknüpft sind. Ich habe 3D-Spiele ohne jegliche Quaternionen geschrieben und hatte nie ein Problem mit Gimble-Locks. Wenn Sie 3D-Mathematik wirklich verstehen und wissen, was ein Gimble-Lock eigentlich ist, werden Sie dieses Problem nicht haben.
Skizz

7
Die Kardansperre wird tatsächlich durch eine naive Drehung mit Euler-Winkeln verursacht (üblicherweise Tait-Bryan-Winkel: Gieren, Neigen, Rollen). Alternative Darstellungen wie Axis-Angle können ebenfalls verwendet werden, um deren Auftreten zu verhindern. Quaternionen haben jedoch den Vorteil einer einfachen Interpolation und werden im Allgemeinen aus diesem Grund bevorzugt.
Jason Kozak

51

Ich träume von einem Tag, an dem Spieleentwicklung genauso datengetrieben ist wie Kunstproduktion. Ich sehe es nirgendwo am Horizont, daher scheint es für den Moment eine Notwendigkeit zu sein, ein bisschen Mathe zu wissen.

Mathematik ist wie Technik, je mehr desto besser, solange Sie es anwenden können.

Hier ist die Reihenfolge der Wichtigkeit, die ich sehe.

  • Arithmetik
  • Lineare Algebra (mit geometrischen Interpretationen)
  • Analysis (Physik)
  • Kombinatorik (zufällige Ebenen)
  • Wahrscheinlichkeit (Abwägung)
  • Statistik (Bayesian esp. Für AI)

Ich könnte weitermachen. Je mehr Sie wissen, desto besser. Wenn Sie jedoch ein bisschen Mathe lernen, bedeutet dies nicht, dass Sie ein großartiges Spiel machen, aber es kann helfen.


4
Kalkül ist ein riesiges Feld. Wahrscheinlich wird nur eine kleine Menge davon für die Spieleentwicklung benötigt.
Noldorin

2
@Noldorin yep. In den meisten Situationen ist es ausreichend, die Beziehung zwischen Ableitung, Beschleunigung, Geschwindigkeit und Position zu verstehen ... aber das Kalkül ist fantastisch.
Jonathan Fischoff

Bayesianische AIs werden wegen der vergleichsweise hohen Speichernutzung, der schlechten Debug- und Vorhersagbarkeit sowie eines genau definierten Problemraums nicht für Spiele verwendet. Eine gute Implementierung der klassischen Suche mit cleveren Heuristiken ist normalerweise (aber nicht immer) ein besseres Werkzeug.

1
Für mich ist es kein besonderer Bayes-Algorithmus, den ich für wichtig halte, aber ich verstehe den von ET Jaynes vertretenen Denkprozess. Ich glaube nicht, dass die Bayesianische Argumentation von Natur aus langsam ist.
Jonathan Fischoff

1
Statistiken sind wunderbar, wenn Sie eine KI entwickeln oder einfach nur ein Management- / Tycoon-Spiel entwickeln. Andererseits kenne ich mich mit Kalkül überhaupt nicht aus. Ich würde argumentieren, dass Statistik und Wahrscheinlichkeit für Lernzwecke im Wesentlichen dasselbe sind, wie der Bereich Statistik sich aus der Arbeit an der Wahrscheinlichkeit ergibt. Das ist sehr subjektiv.
Rushyo

25

Ein sehr grundlegendes ist das pythagoreische Theorem. Wird auch als Abstandsformel bezeichnet.

a ^ 2 + b ^ 2 = c ^ 2wo aund bsind die Kanten eines rechtwinkligen Dreiecks und cist die Hypotenuse. Dies bedeutet, dass Sie Folgendes tun, um die Länge eines Vektors zu ermitteln:

Abstand = sqrt (a ^ 2 + b ^ 2)

Ein weiterer interessanter Hinweis ist, dass Sie, wenn Sie nur Entfernungen vergleichen , nicht die Quadratwurzel ziehen müssen (was relativ kostspielig sein kann). Aus diesem Grund haben die meisten Frameworks für ihre Vektoren eine Funktion "Abstand zum Quadrat" oder "Länge zum Quadrat".


1
Ich bin mir ziemlich sicher, dass ich das schon einmal an einer anderen Stelle auf dieser Seite gelesen habe :)
Ricket

Sicher, dieser Beitrag wurde von diesem Thread / Kommentar inspiriert.
Tetrad

Ich bekomme ein Déjà Vu hier ... :)
mmyers

2
Allgemeiner ist die Länge eines Vektors die Quadratwurzel des Punktprodukts mit sich selbst. So sqrt(V dot V)ist seine Länge. Der Abstand zwischen zwei Punkten ist also:sqrt((A-B) dot (A-B))
greyfade

Ebenfalls großartig ist das Verständnis im Kontext der Triggeridentität sin² (x) + cos² (x) = 1.

19
  • Vektoren sowohl 3D als auch 4D, und was die W-Komponente eingestellt werden sollte
  • Linkes und rechtes Koordinatensystem, und welches ist Ihr Spiel?
  • Das Skalarprodukt und wofür es nützlich ist
  • Das Cross-Produkt und wofür es nützlich ist
  • Matrizen, wie sie Orientierung und Position darstellen und wie Sie sie kombinieren können
  • Quaternionen

Auch wenn Sie nicht The Graphics Guy sind, werden Sie in 80% der Fälle Vektoren und Vektor-Mathematik verwenden. Sie sind die Zwiebeln unserer lustigen Bolognese.


4
Dies ist keine schlechte Liste, aber ich hatte auf eine aussagekräftigere Antwort gehofft. Dh was die Skalarproduktformel ist, was sie bedeutet und wie sie nützlich ist.
Tetrad

3
@Tetrad Gibt dir Wikipedia das nicht? en.wikipedia.org/wiki/Dot_product#Definition .
Jonathan Fischoff

1
Nicht für Spiele speziell, nein.
Tetrad

5
Es tut. Hier erfahren Sie, dass das Skalarprodukt der Kosinus des Winkels ist. Das ist alles, was Sie wissen müssen (und wissen können), da die Anwendung immer noch davon abhängt, wofür Sie sie verwenden möchten. AI ausrichten? Du brauchst den Winkel, also ist der Punkt dein Freund. Licht rendern? Du brauchst den Winkel. Man kann nur sagen, dass es (Punktprodukt in diesem Fall) den Kosinus von Winkel mal Länge des Vektors a, mal Länge des Vektors b definiert. Das ist das Wissen, das gegeben werden kann. Welcher Teil davon verwendet werden soll und wie, kann nicht gesagt werden, da die Anwendungen unendlich sind.
Kaj


10

Ein fest im Griff +, -, *, und /. Ohne sie bist du völlig durchgeknallt.


12
Ich denke, wir sind uns alle einig, dass dies nicht das ist, was die Frage gestellt hat. (auch du hast% vergessen).
Coderanger

2
Andere Antworten werden dafür gewählt (Grundrechenart) ....
RCIX

7
Nicht nur Grundrechenarten, sondern auch das Verständnis, wie die Operationen in Zweierkomplement-, Festkomma- und IEEE-Gleitkommaumgebungen funktionieren. Wenn Sie nicht genau wissen, warum 0,1 * 3! = 0,3 ist oder warum -x nicht das ist, was Sie erwarten, sind Sie geschraubt.

1
@ user744 Ich bin tatsächlich beschissen, was ist das für eine Zauberei?
Neon Warge

9

Ja, Spieleprogrammierung ist in der Regel ziemlich mathematisch. Welche Mathematik Sie benötigen, hängt davon ab, woran Sie arbeiten. Grundlegende Arithmetik ist natürlich ein Muss, so wie es bei jeder Programmierung der Fall ist. Darüber hinaus:

Geometrie ist für jede Grafikarbeit von entscheidender Bedeutung. Wenn Sie Dinge auf dem Bildschirm anzeigen möchten, müssen Sie die Koordinatensysteme verstehen. Und wenn Sie sie in eine andere als die Hauptrichtung bewegen möchten, sind Sie völlig verloren, ohne ein solides Gespür für Sinus, Cosinus und Vektoren zu haben (grundlegende Triggerung). Und wenn Sie in 3D arbeiten müssen, werden die Anforderungen an Geometrie und Trigger viel komplizierter.

Wenn Sie irgendeine Art von fernrealistischer Physik modellieren möchten, benötigen Sie eine Kalkulation dafür. (Es ist, was Newton veranlasste, schließlich Kalkül zu erfinden.)

Für jede Art von Wahrscheinlichkeitsberechnung sind Kenntnisse in Statistik und Wahrscheinlichkeitstheorie erforderlich, um vernünftige Ergebnisse zu erzielen, ohne unnötig viel herumprobieren zu müssen.

Es gibt wahrscheinlich noch viel mehr, aber genau das fällt mir ein.


Ich erinnere mich, als mein kleiner Bruder versuchte, ein Bang-Bang-Spiel als Projekt für seine High-School-VB-Klasse zu machen. Er hatte alles geklappt, außer dass er keine Ahnung hatte, wie man die Kanonenkugeln in einem Bogen fliegen lässt, der auf Winkel und Kraft basiert, weil er Trig 1 noch nicht getroffen hatte. Nachdem ich die Grundlagen erklärt hatte, funktionierte es einwandfrei.
Mason Wheeler

Für den Lichtbogen wird kein Trigger benötigt s=u.t + a.t.t/2. Sie benötigen Trigger, um die Anfangsgeschwindigkeit zu erhalten (u).
Skizz

Warum ist das nicht höher? Die Hälfte der Programmierer, mit denen ich zusammengearbeitet habe, kann für ihr Leben keine Sinus- und Cosinus-Werte verwenden.
Zaratustra,

@Skizz: Ja. Sie benötigen einen Trigger, um einen Winkel und eine Potenz in einen Anfangsvektor umzuwandeln. Danach brauchen Sie nur noch eine Animationsschleife und eine Gravitationskonstante.
Mason Wheeler

9

Zumindest wirst du brauchen.

  • Algebra
  • Grundlegende Geometrie
  • Grundlegende Trigonometrie

Sie möchten auch mindestens Grundkenntnisse über Vektoroperationen haben und wissen, was eine Matrix ist und wofür sie verwendet werden kann, obwohl die Details nicht unbedingt erforderlich sind.

Wenn Sie in die Grafikprogrammierung einsteigen möchten, benötigen Sie verdammt viel mehr Mathematikkenntnisse, aber das allgemeine Gameplay-Programmieren muss nicht so mathematikintensiv sein.


9

Binär- und Hexadezimal- Nummerierungssysteme und wie man sie in / von Dezimalzahlen konvertiert.

Obwohl Sie im Allgemeinen nicht mit rohen Binärzahlen arbeiten müssen, werden sie häufig für Flag-Variablen verwendet, die eine boolesche Logik und Bitverschiebung erfordern .

Hex ist nicht ganz so wichtig (es sei denn, Sie möchten 0xDEADBEEF verarbeiten ), aber Sie möchten zumindest erkennen, wann sie verwendet werden und warum.


1
Wenn Sie hex nicht lesen können, können Sie nicht effektiv programmieren. Die meisten bitweisen Konstanten in C und C ++ werden als Hex-Werte angegeben.

Ich denke, Sie haben Booleanund binarydurcheinander. Ich bin mir nicht sicher, ob sie für die Programmierung von Spielen unbedingt erforderlich sind.
Skizz

@Skizz, guter Punkt - behoben. (Und noch ein kleiner Punkt, es ist ein Wiki - nichts hindert dich daran, es zu ändern. :)
Cyclops

Wenn Sie kein Hex lesen können, verwenden Sie ein Tool, um es für Sie zu konvertieren.
Thomas Eding

6

Keine Erwähnung der grundlegenden Mathematik der Computerprogrammierung? Graphentheorie, Zahlentheorie, Mengenlehre und konkrete Mathematik werden normalerweise zu einer schmerzhaften und schlecht unterrichteten Klasse zusammengefasst, die an der Universität als "diskrete Mathematik" bezeichnet wird.

"Dumme Bit-Tricks" sparen jede Art von Programmzeit (und sie sind normalerweise auch gleichbedeutend mit einigen String-Tricks und Set-Tricks), Diagrammtypen und Traversalen werden überall verwendet (auch wenn Sie nur STL-Container auswählen). Die algorithmische Komplexität ist der Schlüssel zur Optimierung, wenn die Sprachen auf ein höheres Niveau gelangen.


5

Ich denke, die Auszahlungsmatrix ist ein ziemlich wichtiges Werkzeug. Spiele machen oft mehr Spaß, wenn sie sich einem interessanten Nullsummen-Fairplay-Gleichgewicht nähern, und Auszahlungsmatrizen helfen Ihnen, dies in komplizierten Fällen zu quantifizieren. Ich denke, dieser Wikipedia-Artikel ist so gut wie jeder andere und vermittelt das grundlegende notwendige Konzept: http://en.wikipedia.org/wiki/Normal-form_game


Das erscheint mir äußerst unpraktisch. Glauben Sie, dass Starcraft oder Warcraft 3 mit einer solchen Methode ausgeglichen wurden? Ich glaube nicht, ich glaube es war Iteration und Spieltest und ständiges Patchen.
Bobobobo

Mit ziemlicher Sicherheit waren die ursprünglichen Warcraft-Armeen modifizierte Duplikate voneinander, die wahrscheinlich mit Auszahlungsmatrizen erstellt wurden, um sie insgesamt ausgeglichen zu machen. Danach haben sie vielleicht einfach darauf aufgebaut, was sie gelernt haben, um Dinge zu stimmen, aber sie mussten es wahrscheinlich mit Starcraft erneut tun, um ein angemessenes Gleichgewicht zu erreichen, nachdem drei verschiedene Armeen beteiligt waren, und erneut, wenn Starcraft II-Einheiten hinzugefügt wurden. Natürlich hört man nicht einfach beim Modell auf, das Testen zeigt oft neue Eigenschaften, aber eine Auszahlungsmatrix gibt an, wie man anfänglich die Komplexität modelliert.
Kzqai

[Zitat benötigt]?
Bobobobo

1
Es war dies: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/… Ich wünschte, die Amazon-Version ermöglichte das Durchsuchen des Buches, da es eine großartige Sache sein könnte, in Teilen auf diese Site zu verweisen. Vielleicht funktioniert die Amazon In-Book-Suche nicht so. Jedenfalls haben sie dort die Auszahlungsmatrizen am Beispiel von Warcraft durchgesehen, und der Vorteil für das Management der Komplexität war so deutlich, dass ich sofort konvertiert bin. Das ist keine Garantie dafür, dass Blizzard diesen Ansatz tatsächlich angewendet hat, aber sie sind schlau, also hatten sie wahrscheinlich eine mathematische Lösung ...
Kzqai

... zumindest, um die Balance auf einen Blick zu verstehen. Natürlich möchten Sie auch Tests hinzufügen. Ich kaufte das Buch tatsächlich auf der Grundlage eines kleineren, gekürzten Flugblatts, das großartige spielbezogene Inhalte enthielt, einschließlich der Erörterung der Auszahlungsmatrix und der Beziehung zwischen Stein und Papier und allerlei großartigen Dingen, und war enttäuscht, das Finale zu finden Buch ist ein Band und beschäftigt sich viel mit C ++ - Programmierung (was nicht mein Ding ist) sowie AAA-Titelverwaltungsproblemen. Alles in der gekürzten Broschüre war jedoch großartig.
Kzqai

4

Verstehen Sie das Skalarprodukt: Wenn zwei Vektoren ungefähr dieselbe Richtung haben (Theta <90 Grad), ist das Skalarprodukt positiv oder negativ. Es kann verwendet werden, um zu testen, wann immer der Spieler in Sichtweite ist (vorausgesetzt, das Sichtfeld beträgt 90 Grad).

Verallgemeinern Sie Ihr 2D-Spiel auf höhere Dimensionen. (Verwenden Sie Vektorberechnungen)

Wenn Sie eine 3D-Engine selbst implementieren können, können Sie loslegen.


4

Es hängt davon ab, was Sie tun .

Alle Spielprogrammierer sollten mindestens die Algebra der High School kennen. Das bedeutet:

  • Ein gutes Gespür für Zahlen
  • Komfort mit Grundrechenarten (addieren, sub, mult, dividieren)
  • Trigonometrie (Sin und Cos)
  • Vektoren, Winkel zwischen Vektoren, Punktprodukt, Kreuzprodukt

Ihre Grafikprogrammierer müssen wissen:

  • Alles oben Genannte und
  • Matrixalgebra (für Transformationsmatrizen)
  • Polygonschnittmethoden / Ray-Polygon (siehe ein Buch wie Echtzeit-Kollisionserkennung)

Ihre Physik-Programmierer müssen wissen:

  • Alle oben genannten und
  • Differentialgleichung
  • Numerische Methoden

3

Neben Sinus und Cosinus (50-75% der Programmierer, denen ich begegnet bin, wussten nicht, wie man es benutzt), lernen Sie die magische Arc-Tan-Funktion und wie man mit ihr den Winkel eines Vektors bestimmen kann.


5
In den meisten Fällen möchten Sie, atan2da dies die Quadrantenbehandlung selbst übernimmt.
CodesInChaos

0

Ich bin überrascht, dass niemand Quaternions erwähnt hat . Ich habe nicht viel Erfahrung mit verschiedenen Motoren, aber zumindest JME verwendet sie überall und ich hatte den Eindruck, dass sie ein ziemlich wichtiges Konzept sind.


2
äh ich erwähnte Quaternionen.
Am

Ahh, sorry, ich habe es verpasst.
Raoul

3
Für die 1% der Spieleprogrammierer, die Animationscode auf niedriger Ebene in die Rendering-Engine schreiben, sind Quaternionen ein nützliches Werkzeug. Für die anderen 99% der Spieleprogrammierer werden sie nicht wirklich benötigt.
Skizz

-1

Bei Spielen geht es darum, "reales" Leben in die virtuelle Realität zu bringen. Es ist besser, mehr über die reale Welt / das Universum zu wissen als weniger :) .. Mathematik ist nur ein Werkzeug. Und wenn Sie einen Plan machen, müssen Sie auch Zeit für das Lernen in Pläne investieren.

BEARBEITET: Ich habe ein Missverständnis gesehen :) .. Ich denke, dass die Menge der mathematischen Anforderungen, die Sie anordnen müssen, von konkreten Dingen abhängt, die Sie beschreiben möchten. Niemand weiß alles. Und wie es besser geht, ist. Nicht alles am Anfang lernen, sondern wenig lernen, anwenden, lernen, anwenden usw. Dann können Sie es während der Entwicklung tun, wenn Sie einen guten Plan haben.


1
Wie viel Leben steckt in Tetris?
Tenpn

Viele :). Bei Tetris geht es um logisches Denken unter Druck. Wie andere logische Spiele. Es geht ums Üben. Mehr üben, mehr Druck können Sie bewältigen und haben trotzdem Spaß daran. Es scheint mir das wahre Leben zu sein
:)

3
Sie machen keinen Sinn, wenn Sie die Frage nicht fair ansprechen.
Heath Hunnicutt

@Heath Hunnicutt, Sie haben recht.
Samboush

3
Ich respektiere diese Antwort wirklich.
Heath Hunnicutt

-2

Einfache Antwort: VIEL!

Ausführliche Antwort:

Arithmetische, elementare und lineare Algebra, in den meisten Fällen Trig, wenn Sie ein 3D-Spiel, ENDGÜLTIGE Berechnung und Physik erstellen (Physik erfordert Berechnung)!


3
Können Sie die Liste etwas klarer machen? Sagst du "Trig, wenn du ein 3D-Spiel machst" oder "Wenn du ein 3D-Spiel machst, DEFINITELY Calculus"?
yoozer8
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.