JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=c4c550acd2bcfac4c011a4a93416d1bdMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Kamerabewegung (3rd-Person)

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 29.05.2004, 12:02    Titel: Kamerabewegung (3rd-Person) Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 29.05.2004, 12:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 29.05.2004, 21:44    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 29.05.2004, 21:53    Titel: Antworten mit Zitat

was sind 2D Zahlen ? Kann jemand das genauer erklären ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 29.05.2004, 21:56    Titel: Antworten mit Zitat

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 Wink
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 29.05.2004, 22:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 29.05.2004, 23:06    Titel: Antworten mit Zitat

Kronos hat Folgendes geschrieben:
was sind 2D Zahlen ? Kann jemand das genauer erklären ?

Naja, eine zweidimensionale Zahl wäre zB:
Code:

k = (a +bi)

a wäre dann eine skalare Zahl und bi eben der imaginäre Teil. i ist ungefähr sowas wie eine Einheit.
wobei gilt:
Code:

i*i = wurzel(-1)


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 Wink

@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. Crying or Very sad [/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 30.05.2004, 08:40    Titel: Antworten mit Zitat

hab auch mathe-lk gewählt, nächstes schuljahr gehts dann los o.O
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 30.05.2004, 09:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 30.05.2004, 09:54    Titel: Antworten mit Zitat

Ein Quaternion ist eine 4 dimensionale Darstellung einer komplexen Zahl, keine 4 Dimensionale Zahl. ;)

http://en.wikipedia.org/wiki/Quaternion
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 30.05.2004, 17:07    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:
Ein Quaternion ist eine 4 dimensionale Darstellung einer komplexen Zahl, keine 4 Dimensionale Zahl. Wink

*wegduck* Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum