Autor Beitrag
Shaddow11
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 25.10.07 10:13 
Hi, ich bastel derzeit an einer Camera mit Pfadsteuerung. Das heisst, meine Camera bewegt sich ueber eine festgelegte Anzahl von Vektoren. Dabei ist ebenso der Blickpunkt, also der Punkt, auf den die Camera gerichtet ist, festgelegt.

Ich habe zb folgende Punkte, auf denen sich meine Camera bewegt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
pfad.AddPoint(Unite(-1,1,1));
pfad.AddPoint(Unite(1,1,1));
pfad.AddPoint(Unite(1,1,-1));
pfad.AddPoint(Unite(-1,1,-1));


Dabei liegt der Blickpunkt, auf den die Camera gerichtet ist, bei Unite(0,0,0);

Nun soll die Camera also bei dem Punkt (-1,1,1) starten und nach (0,0,0) gucken. Dann bewegt sie sich von (-1,1,1) zu (1,1,1) und dann zu (1,1,-1) und dann zu (-1,1,1) und dabei wird sie immer auf den Punkt (0,0,0) gedreht.


Nun geht es hier keinesfalls um die 3D-Technische Realisierung, die steht bereits. Nur der mathematische bzw Logische Hinterbau hinkt, denn das Programm arbeitet nicht so, wie ich das gern haette.

Für meine Rechnung habe ich mir also folgendes ueberlegt.
Die Camera steht auf (-1,1,1) und soll zu (1,1,1) bewegt werden und sich dabei immer so drehen, dass sie genau auf (0,0,0) schaut.

Meinen Momentanen Punkt bekomme ich immer per Aufruf von:
ausblenden Delphi-Quelltext
1:
2:
distance := LMSpeed * Renderer.CurTime/1000;
CurPoint := LookPath.GetPos(distance);


CurPoint gibt also zu jeder Millisekunde den momentanen Positionsvektor an.
Ich muss also nur noch herausfinden, welche Winkel zwischen CurPoint und (0,0,0) liegen.

Meine Rechnung dazu sieht bisher so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var distance, nX, nY: Single;
CurPoint, DiffVector: TGLVectorf3;
begin
distance := LMSpeed * Renderer.CurTime/1000;
CurPoint := LookPath.GetPos(distance);
DiffVector := SubtractVector(CurPoint,Translation);

nX := DotProductVector(DiffVector,Unite(DiffVector[0],0,DiffVector[2])) / (LengthOfVector(DiffVector)*LengthOfVector(Unite(DiffVector[0],0,DiffVector[2])));
nY := DotProductVector(DiffVector,Unite(0,DiffVector[1],DiffVector[2])) / (LengthOfVector(DiffVector)*LengthOfVector(Unite(0,DiffVector[1],DiffVector[2])));

nX := Arccos(nX)/DEG2RAD;
nY := Arccos(nY)/DEG2RAD;


Winkel nX gibt an, um wieviel Grad die Camera sich um die x-Achse drehen soll.
Winkel nY gibt an, um wieviel Grad die Camera sich um die y-Achse drehen soll.

Ich habe damit jetz ne ganze Menge rumprobiert, aber funktioniere tut es leider nicht wirklich.
Nochmal die Anmerkung: Ich brauch hier keine OpenGL-Hilfe sondern eine rein mathematische bzw logische Analyse, ob meine Herangehensweise sinnvoll ist. Hoffe wirklich, dass ihr mir helfen könnt. Danke schonmal im Voraus an alle, die sich die Mühe machen, sich mit dem Problem auseinander zu setzen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 26.10.07 22:00 
Schau Dir mal dieses Tutorial an; ich denke, da solltest Du noch ein paar Hinweise zum Thema finden können ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 26.10.07 23:42 
Was musst du genau haben?

Den Richtungsvektor von Kamera zum Ursprung? Das wäre bloss der normierte Vektor von Ursprung zur Kamera.

Was willst du überhaupt mit den Winkeln? Vielleicht versuchst du eine Drehmatrix zusammenstellen?

Am besten du schreibst uns was du genau brauchst. Ich glaube was du suchst ist eine Projektionsmatrix, die kannst du z.B. aus Kamera-Position, Target-Position und Up-Vektor berechnen (siehe lookup matrix)
Shaddow11 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 11.11.07 11:40 
also das tut hab ich schon vor ner weile gelesen ^^
und noch einige andere kameratuts.. is alles nich so einfach.

mal zur erklaerung: forum.dsdt.info/viewtopic.php?t=34575

hier steht alles sehr detailiert, hoffe das hilft euch