Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss20:neg_theorie [2020/09/13 14:01] srather [Engine] |
ss20:neg_theorie [2020/09/13 14:05] (aktuell) srather [Kollisionen] |
||
---|---|---|---|
Zeile 33: | Zeile 33: | ||
Ein Portal ist eine Linie -- ein gerader, längst begrenzter "Schnitt" im Raum. Dieser Schnitt hat nun 2 Seiten, die man beide mit verschiedenen Orten verbinden ("zusammenkleben") kann. Betrachtet man nun eine Seite des Portals, so soll man an einem anderen Ort herauskommen können. Also braucht es einen Verschiebungsvektor für die Portalwelt. | Ein Portal ist eine Linie -- ein gerader, längst begrenzter "Schnitt" im Raum. Dieser Schnitt hat nun 2 Seiten, die man beide mit verschiedenen Orten verbinden ("zusammenkleben") kann. Betrachtet man nun eine Seite des Portals, so soll man an einem anderen Ort herauskommen können. Also braucht es einen Verschiebungsvektor für die Portalwelt. | ||
- | Für eine gute Illusion verbindet man normalerweise 2 Portale miteinander, sodass man in beide Richtingen gehen kann und im Bestfall gar nichts davon bemerkt. Diese Portale können aber eine unterschiedliche Ausrichtung haben, also muss ein Portal die Welt auch drehen können. Zusätzlich müsste die Welt gestaucht und gestreckt werden können, um Effekte wie den [[ss20:neg_research#weitere_formen|langen/kurzen Tunnel]] nachzustellen. | + | Für eine gute Illusion verbindet man normalerweise 2 Portale miteinander, sodass man in beide Richtungen gehen kann und im Bestfall gar nichts davon bemerkt. Diese Portale können aber eine unterschiedliche Ausrichtung haben, also muss ein Portal die Welt auch drehen können. Zusätzlich müsste die Welt gestaucht und gestreckt werden können, um Effekte wie den [[ss20:neg_research#weitere_formen|langen/kurzen Tunnel]] nachzustellen. |
Um nicht alle Funktionen einzeln darstellen zu müssen, macht die Engine gebrauch der linearen Algebra. Betrachtet man die Welt als einen Vektorraum, so kann eine Basistransformationsmatrix all diese Transformationen auf einmal erledigen und sogar noch Scherungen. | Um nicht alle Funktionen einzeln darstellen zu müssen, macht die Engine gebrauch der linearen Algebra. Betrachtet man die Welt als einen Vektorraum, so kann eine Basistransformationsmatrix all diese Transformationen auf einmal erledigen und sogar noch Scherungen. | ||
- | Somit kann eine Seite eines Portals mit einer Transformationsmatrix und einem Verschiebungsvektor dargestellt werden. Da hierbei alles linear bleibt, d.h. alle Linien gerade bleiben müssen für Polygone nur die Eckpunkte betrachtet werden. Ist $T$ die Transformationsmatrix und $v$ der Verschiebungsvektor, so lässt sich für einen Eckpunkt am Ort $p$ folgendermaßen seine Position im Portal $p'$ berechnen: | + | Somit kann eine Seite eines Portals mit einer Transformationsmatrix und einem Verschiebungsvektor dargestellt werden. Da hierbei alles linear bleibt, d. h. alle Linien gerade bleiben, müssen für Polygone nur die Eckpunkte betrachtet werden. Ist $T$ die Transformationsmatrix und $v$ der Verschiebungsvektor, so lässt sich für einen Eckpunkt am Ort $p$ folgendermaßen seine Position im Portal $p'$ berechnen: |
$p' ~=~ T·p ~+~ v$ | $p' ~=~ T·p ~+~ v$ | ||
Zeile 49: | Zeile 49: | ||
===== Kollisionen ===== | ===== Kollisionen ===== | ||
- | Die Kollisionen sollen lediglich den Spieler daran hindern durch Objekte zu gleiten, aber nicht dahin zu kommen, wo er hin möchte. Bleibt der Spieler einfach stehen, wenn er ein objekt berührt wird es schnell frustrierend. Ist eine Kollisione ein Physikalisch korrekter elastischer Stoß, so springt prallt der Spieler einfach wie ein Ball von dem Objekt ab, meist in die entgegengesetzte Richtung in die der Spieler eigendlich wollte. | + | Die Kollisionen sollen lediglich den Spieler daran hindern, durch Objekte zu gleiten, aber nicht dahin zu kommen, wo er hin möchte. Bleibt der Spieler einfach stehen, wenn er ein Objekt berührt, wird es schnell frustrierend. Ist eine Kollision ein Physikalisch korrekter, elastischer Stoß, so prallt der Spieler einfach wie ein Ball von dem Objekt ab, meist in die entgegengesetzte Richtung, in die der Spieler eigentlich wollte. |
- | Der Verwendete Ansatz betrachtet den Bewegungsvektor des Spielers und entfernt den Anteil, der senkrecht zum Hinderniss steht. | + | Der verwendete Ansatz betrachtet den Bewegungsvektor des Spielers und entfernt den Anteil, der senkrecht zum Hindernis steht. |
Ist $v$ der Bewegungsvektor $w$ die Richtung der Wand, mit der eine Kollision stattfindet. So gibt es einen Vektor $w'$ mit $w·w' ~=~ 0$ (senkrecht zueinander). Dann gilt: | Ist $v$ der Bewegungsvektor $w$ die Richtung der Wand, mit der eine Kollision stattfindet. So gibt es einen Vektor $w'$ mit $w·w' ~=~ 0$ (senkrecht zueinander). Dann gilt: | ||
Zeile 65: | Zeile 65: | ||
{{:ss20:kollision.png?nolink&688}} | {{:ss20:kollision.png?nolink&688}} | ||
- | Ist das Hindernis keine Linie sondern ein Punkt, so wird der Vektor vom Spieler zum Punkt als $w'$ interpretiert. | + | Ist das Hindernis keine Linie, sondern ein Punkt, so wird der Vektor vom Spieler zum Punkt als $w'$ interpretiert. |
[[#top|↑ Zurück nach oben]] | [[#top|↑ Zurück nach oben]] | ||