Hi, ich habe vor kurzem mein Cameramovement auf gluLookat umgestellt. Vorher hab ich das ueber ein Translate und zwei Rotates je eines um die x- und eins um die y-Achse gemacht, jetzt nutz ich halt die GluLookat.
Position hab ich ja, Normalenvektor hab ich auch, jetz brauch ich nur noch den Lookatvektor. Den errechne ich aus der Position und den beiden rotationsvektoren, mit der folgenden Rechnung:
Die Rotation an sich funktioniert ganz gut, nur irgendwie dreht er sich auf eine sehr obskure Weise, sobald ich direkt unter mich gucke, also mit etwa mit einem LookAtVector von (0,-1,0)
Laesst sich irgendwie nich so leicht beschreiben, ich hoff mal, ihr wisst, was ich mein.
Vllt hat da ja auch wer ne ahnung, wie man den LookAtVector fuer gluLookAt ausrechnet.
Dieses seltsame Verhalten liegt an Deinem Up-Vektor. Die Kamera sieht ja in richtung eye->center. und wo 'oben' ist, bestimmt up. Wenn jetzt eye->center winkelmäßig nahe an up liegt (delta phi <<1), verhaut er sich. Wenn Du 'nach unten' oder 'nach oben' schauen willst, musst Du up nachziehen. Das gleiche gilt für Loopings und so.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Würde es ausreichen den Upvektor als Normalenvektor aus Position und Eye zu errechnen? Würd mir soauf anhieb einfallen, oder muss man da einen erheblichen Mehraufwand betreiben?
Du musst erst aus dem alten Up und eye->center das Kreuzprodukt bilden für einen Hilfsvektor. Diesen kehrst Du dann um(Richtungsmäßig) und berechnest daraus und eye->center den neuen up (wieder kreuzprodukt). Umdrehen musst du den Hilfsvektor, da sich sonst der Upvektor umdreht und das würde dann zu lustigen Anzeigeeffekten führen.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Also ich habe letztlich doch wieder von gluLookAt abgelassen und bin wieder bei Rotate und Translate... es ist ein dauerndes Hin und Her
Eigentlich wollte ich auf Matrizen gehen, aber ich bekomm es nimmer hin.... keine Ahnung, warum das bei mir nich mehr geht, zumal ich mal ne funktionierende Version hatte.
Nun bin ich jedenfalls bei Translate und Rotate, weil man das gut nachvollziehen kann.
Ich hab an meine Camera mal eine Pfadverfolgung angebunden. Die Camera soll sich also auf den folgenden Punkten bewegen:
Code:
pfad.AddPoint(Unite(-1,1,1));
pfad.AddPoint(Unite(1,1,1));
pfad.AddPoint(Unite(1,1,-1));
pfad.AddPoint(Unite(-1,1,-1));
Sie bewegt sich also auf einem Quadrat um den Nullpunkt (0,0,0) und dreht sich dabei immer so weiter, dass die Camera direkt auf den Nullpunkt schaut.
Wenn ihr euch die Demo anseht, werdet ihr zwei Probleme feststellen:
Das ding flackert ziemlich; warum weiss ich nicht.
Sobald es einen Winkel von -45° etwa ueberschreitet, verändert sich der Punkt, auf den die Camera gerichtet ist, das heisst, sie schaut nicht mehr in den Nullpunkt, sondern auf irgendeinen Punkt um die (0,0,-1) oder sowas.
Ich sitz schon ne ganze weile dran und hab keine Ahnung, warums nicht geht.
Meine Updatefunktion der Camera fuer die Pfad berechnung lautet wie folgt:
Ja also ich habe mich in einigen Foren (DSDT und Delphiforum) sowie bei diversen Tuts schlau gemahct und hab meine Camerarotation versucht, auf Kugelkoordinaten umzubauen. Soweit so gut. Das folgende Tutorial beschreibt es im Grunde recht gut: http://mo.mathematik.uni-stuttgart.de/i ... ussage441/
allerdings funktioniert es partout nicht so, wie ich das gern haette. meine rotation sieht jetzt folgendermaßen aus:
Code:
var
distance, r, delta, phi:Single;
v1: TGLVectorf3;
begin
// bestimmung des momentanen Punktes auf dem Pfad
distance := LMSpeed * Renderer.CurTime/1000;
// differenzvektor zwischen Blickpunkt (Lookpath.getpos) und Position (translation)
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.