|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 29.05.2004, 12:02 Titel: Kamerabewegung (3rd-Person) |
|
|
Hallo,
ich versuche gerade eine dynamische Kamerasteuerung für eine Ansicht aus der dritten Person zu implementieren.
Mit dynamisch meine ich in etwa so, wie es bei Tomb Raider der Fall ist - also der Abstand, Winkel und die Höhe ist nicht immer genau gleich (im Objektkoordinatensystem der Figur, die man steuern soll), sondern die Kamera bewegt sich mit etwas Verzögerung, beschleunigt und bremst ab.
Dazu habe ich bisher folgenden Lösungsansatz verwendet: (Pseudocode)
Code: |
Für jede Positions- und Rotationskomponente der Kamera {
Berechne den aktuellen Bremsweg durch die aktuelle Geschwindigkeit;
Berechne den Weg, der noch bis zum Ziel zurückgelegt werden muss;
Entscheide, ob Beschleunigt oder gebremst werden muss {
// Beschleunigen
Berechne neue Position und Geschwindigkeit und merke sie dir
} else {
// Bremsen
Berechne neue Position und Geschwindigkeit und merke sie dir
}
}
|
Bis zu einem gewissen Prozentsatz funktioniert das ganze auch ganz gut, aber in bestimmten Situationen Beschleunigt die Kamera auf's blaue hinaus und kommt auch nicht wieder zum gewünschten Zielort zurück.
Ach ja, ich setze natürlich die gewünschte Zielposition, lese aber immer nur die aktuelle Position aus - was ja so auch komplett richtig ist.
Ich würde mich freuen, wenn wir die Art der Berechnung Diskutieren und so verbessern, dass die Kamerabewegung "Butterweich" von statten geht. Dazu habe ich den Quellcode der Kamerasteuerung hochgeladen, so dass ihn sich jeder genau anschauen kann.
PS.: Es ist kein komplettes Projekt hochgeladen, das wäre viel zu groß.
PPS.: Es handelt sich um C#-Quellcode, aber er ist (meines erachtens) ganz gut kommentiert und sollte auch für jeden C++-ler zu verstehen sein. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 29.05.2004, 12:46 Titel: |
|
|
Kommerzielle Spielehits machen das mit Hilfe von sogenannten Quaternions. Eventuell hast du in der Schule schonmal was von 2 dimensionalen Zahlen(komplexe Zahlen) gehört. Quaternions sind (wie der Name schon sagt) 4 dimensionale Zahlen und verhindern den sogenannten "Gimbal Lock". Das ist genau das Problem was du ansprichst.
Das Problem tut sich ca. folgender Maßen auf: Rotiert man die Kamera um 90° auf der Z Achse nach links, dann sind die Vektoren der X-und Y-Ache identisch so dass alle rotationen um den beiden Achsen identisch sind und die Kamera nicht mehr 3 dimensional bewegt werden kann. das kann mit quaternions nicht passieren. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 29.05.2004, 21:44 Titel: |
|
|
@MiracleBoy
Das kling ja sehr interesant, aber ich versteh weder, warum man sie nicht mehr 3 diemnsinoal bewegen kann, noch wie das Problem mit 4 dimensinalen Zahlen umgangen werden soll. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 29.05.2004, 21:53 Titel: |
|
|
was sind 2D Zahlen ? Kann jemand das genauer erklären ? |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 29.05.2004, 21:56 Titel: |
|
|
afaik sind das zahlen, die aus einem reellen und aus einem imaginären teil bestehen.
mehr kann ich aber auch net dazu sagen, die dinger werd ich wohl erst innem vierteljahr kennenlernen wenn ich im mathe-lk bin _________________ Schau mir in die Augen, Kleines. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 29.05.2004, 22:08 Titel: |
|
|
Ich habe mein Problem durch Verbesserung des Algorithmusses gelöst - und das ganz ohne diese Quaternions. - Nebenbei ist der neue Algo auch wesentlich performanter, da wesentlich weniger gerechnet wird (:
PS.: Das ist mein tausendster Beitrag _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 29.05.2004, 23:06 Titel: |
|
|
Kronos hat Folgendes geschrieben: | was sind 2D Zahlen ? Kann jemand das genauer erklären ? |
Naja, eine zweidimensionale Zahl wäre zB:
a wäre dann eine skalare Zahl und bi eben der imaginäre Teil. i ist ungefähr sowas wie eine Einheit.
wobei gilt:
Also schon unter Umständen sehr komplex.
Bei einem Quaternion kommen halt noch 2 weitere Zahlen dazu. Die letzten drei Zahlen bezeichnen dann eine Achse um der rotiert wird, wobei dann die erste Zahl(also der Skalar) den Winkel angibt um den rotiert wird.
Alle Angaben natürlich ohne Gewähr
@Zyrian
Höhö, ich werde schon nach dem Sommerferien im MatheLK sein(wobei ich es bei uns vorher noch etwas dauert bis die Kurssysteme einsetzen, weiß ja ned wie's bei euch is), also dauerts doch noch etwas länger. [/code] |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 30.05.2004, 08:40 Titel: |
|
|
hab auch mathe-lk gewählt, nächstes schuljahr gehts dann los o.O |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 30.05.2004, 09:50 Titel: |
|
|
ich bin auch nach den sommerferien im mathe lk ;P
n vierteljahr sind 3 monate, das kommt auch ungefähr hin ^^ _________________ Schau mir in die Augen, Kleines. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 30.05.2004, 17:07 Titel: |
|
|
Hazel hat Folgendes geschrieben: | Ein Quaternion ist eine 4 dimensionale Darstellung einer komplexen Zahl, keine 4 Dimensionale Zahl. |
*wegduck* |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|