AS3-Tutorium:Physics:Vertiefung: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 13: Zeile 13:
=== Vektor ===
=== Vektor ===


Ein zweidimensionaler Vektor besteht aus einer x- und einer y-Komponente. Dieser hat immer eine Länge und eine Richtung. Benutzt man einen Vektor für eine Position, so versteht man den Vektor als Abstand und Richtung der Position vom Ursprung aus.  
Ein zweidimensionaler Vektor besteht aus einer x- und einer y-Komponente. Dieser hat immer eine Länge und eine Richtung. Benutzt man einen Vektor für eine Position, so versteht man den Vektor als Abstand und Richtung der Position vom Ursprung aus. Vektoren werden für folgende Sachverhalte verwendet:
 
Vektoren werden für folgende Sachverhalte verwendet:
* Position
* Position
* Geschwindigkeit
* Geschwindigkeit
Zeile 32: Zeile 30:


=== Projektion ===
=== Projektion ===
Für 2D-Physics-Engine sind lediglich 1D-Projektionen relevant. Hierzu wird ein Projektionsvektor (Vektor mit der Länge 1) und mindestens ein zu projezierender Vektor benötigt. Die Projektion wird berechnet, indem man das Skalarprodukt für alle gewünschten Vektoren mit dem Projektionsvektor berechnet. Es entsteht ein Intervall, welches in Kombination mit dem Projektsvektor die Projektion innerhalb des ursprünglichen Koordinatensystems beschreibt. Projektionen werden benötigt für:
* Berechnung der Tiefe einer Kollision (Minimum Translation Distance)
* Berechnung der Normalen- und Tangenanteile von Geschwindigkeiten
* Bestimmung von Überschneidung von polygonalen Formen


== Geometrische Objekte ==
== Geometrische Objekte ==


=== Form ===
=== Form ===


=== Kreis ===
=== Kreis ===

Version vom 27. Mai 2009, 00:33 Uhr

Dieser Artikel wird derzeit von einem Autor gründlich bearbeitet. Die Inhalte sind daher evtl. noch inkonsistent.

Überblick

Dieser Artikel erklärt den Aufbau und die Funktionsweise einer vollwertigen Physics-Engine und stellt außerdem die wichtigsten Physics-Engines vor.

Komponenten einer Physics-Engine

Mathematische Objekte

Die wichtigste Grundlage für alle physikalischen Simulationen sind mathematische Hilfsklassen.

Vektor

Ein zweidimensionaler Vektor besteht aus einer x- und einer y-Komponente. Dieser hat immer eine Länge und eine Richtung. Benutzt man einen Vektor für eine Position, so versteht man den Vektor als Abstand und Richtung der Position vom Ursprung aus. Vektoren werden für folgende Sachverhalte verwendet:

  • Position
  • Geschwindigkeit
  • Beschleunigung
  • Kollisionsnormale
  • Kollisionstangente
  • Koordinatensysteme (ein Paar von Vektoren)

Wichtig ist also alle relevanten mathematischen Funktionalitäten für Vektoren zu implementieren. Dazu gehören:

  • Addition, Subtraktion, Multiplikation, Division
  • Längenbestimmung
  • Normierung (den Vektor auf Länge 1 skalierung)
  • Normalenberechnung (einen Vektor berechnen, welcher senkrecht auf dem Ursprungsvektor steht)
  • Skalarprodukt von zwei Vektoren
  • Kreuzprodukt von zwei Vektoren (in 2D-Raum ein Skalar)

Projektion

Für 2D-Physics-Engine sind lediglich 1D-Projektionen relevant. Hierzu wird ein Projektionsvektor (Vektor mit der Länge 1) und mindestens ein zu projezierender Vektor benötigt. Die Projektion wird berechnet, indem man das Skalarprodukt für alle gewünschten Vektoren mit dem Projektionsvektor berechnet. Es entsteht ein Intervall, welches in Kombination mit dem Projektsvektor die Projektion innerhalb des ursprünglichen Koordinatensystems beschreibt. Projektionen werden benötigt für:

  • Berechnung der Tiefe einer Kollision (Minimum Translation Distance)
  • Berechnung der Normalen- und Tangenanteile von Geschwindigkeiten
  • Bestimmung von Überschneidung von polygonalen Formen

Geometrische Objekte

Form

Kreis

Polygon

Dynamik

Die Kinematik (gr.: kinema, Bewegung) ist die Lehre der Bewegung von Punkten und Körpern im Raum, beschrieben durch die Größen Weg s (Änderung der Ortskoordinate), Geschwindigkeit v und Beschleunigung a, ohne die Ursachen einer Bewegung (Kräfte) zu betrachten. Ihr Gegenstück ist die Dynamik, die sich mit der Bewegung von Körpern unter Einwirkung von Kräften beschäftigt. Kinematik und Dynamik sind Teilgebiete der Mechanik. (Quelle: Wikipedia)

Masse

Zustand

Kräfte

Körper

Integration

Euler

Runge-Kutta

Weitere

  • Midway
  • Verlet

Kollisionen

Kollisionserkennung

Kollisionsauflösung

Verfügbare Physics-Engines

Box2D

Die Box2D-Engine basiert auf der gleichnamigen C++-Engine von Erin Catto. Die Engine ist plattformunabhängig, wurde bereits für den Nintendo DS und das iPhone eingesetzt und wird in vielen aktuellen PC-Spielen verwendet. Box2D ist mit Abstand die performanteste und umfangreichste Physics-Engine für AS3. Die einzige Kritik gilt dem Aufbau der API, diese wird manchmal als unhandlich und/oder unverständlich bezeichnet, hauptsächlich weil die AS3-Version ein direkter Port der C++-Version ist und somit für viele Actionscript-Entwickler nicht intuitiv genug ist.

Motor Physics

Motor Physics ist im Inneren Box2D sehr ähnlich, da der Entwickler sich stark an den Algorithmen und Vorgehensweise von Erin Catto orientiert hat. Die Engine soll in gewissen Bereichen eine bessere Performance bieten als Box2D, jedoch gibt es bisher keine direkten Vergleiche oder Benchmarks. Außerdem bietet Motor Physics nicht den vollen Funktionsumfang von Box2D. Der Aufbau der API unterscheidet sich jedoch etwas, da die Engine von Anfang auf AS3 ausgelegt war.

APE - Another Physics Engine

Die APE ist eine Weiterentwicklung der AS2-Physics-Engine Flade. Ein zentrales Argument für diese Engine, ist die oft genannte einfache und intuitive Struktur der API, was dadurch begründet sein kann, dass die Engine bereits seit 2005 entwickelt wurde und von Beginn an für Actionscript ausgelegt war. Im Gegensatz zu den oben genannten Engines besitzt sie jedoch einen sehr eingeschränkten Funktionsumfang.

aM Physics Engine

André Michelle, bekannter Actionscript-Entwickler und Sprecher auf vielen Flash-Konferenzen, stellt eine einfache Physics-Engine zur Verfügung. Diese ist jedoch nicht für die Produktion von Applikationen sondern für das Ausprobieren von Physics geeignet.


FOAM

It is meant as an architectural and mathematical reference for developers interested in physics simulation in the area of game development or otherwise. It trades efficiency for modularity and extensibility.(Quelle:[1])

Die FOAM-Engine ist ebenfalls nicht für den Produktionsbetrieb geeignet, zeigt jedoch eindrucksvoll und verständlich wie Algorithmen für eine Physics-Engine implementiert werden müssen.

lyneth

lyneth ist eine Physics-Engine von Alexander Lawrence. Der Fokus dieser Engine liegt auf der Verständlichkeit der API und der Anbindung an Flash-Applikationen. Die Performance ist jedoch in keiner Weise vergleichbar mit der von Box2D oder Motor Physics. Die lyneth-Engine ist nicht für den Produktionsbetrieb geeignet und momentan nicht frei verfügbar. Der Kern der Engine wird unter einer Open-Source Lizenz veröffentlicht.