Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 02, 2025 04:15

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kamera via Matrix. Denkfehler?
BeitragVerfasst: Fr Mai 24, 2013 10:19 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Servus,

dachte ich bekomme es allein hin, aber leider doch nicht ganz. Die Bewegung im Raum habe ich bis jetzt immer mit glTranslatef und glRotatef erledigt. Da ich aber einen Vektor benötige um zu wissen wo ich hinschaue, dachte ich mir, es geht vielleicht einfacher mit einer Matrix.

Also habe ich mir das Tut mit dem Objekt und der Rotation angeschaut. Soweit so gut.
Hier mal meine Rotation der Cam nach links
Code:
  1.  
  2.     s := DegToRad(-0.5);
  3.  
  4.     m:=CreateRotationMatrix(ftCamY, s);
  5.     ftCamY:=VectorTransform(ftCamY, m);
  6.     ftCamMatrix := MatrixMultiply(ftCamMatrix, m);
  7.  
  8.     NormalizeVector(ftCamX);
  9.     ftCamY := VectorCrossProduct(ftCamZ, ftCamX);
  10.     NormalizeVector(ftCamY);
  11.     ftCamZ := VectorCrossProduct(ftCamX, ftCamY);
  12.     NormalizeVector(ftCamZ);
  13.  


Später noch das setzen der Matrix
Code:
  1.  
  2.   glTranslatef(ftCamPos[0], ftCamPos[1], ftCamPos[2]);
  3.   glMultMatrixf(@ftCamMatrix);
  4.  


Das bewegen und das drehen geht soweit nur drehe ich mich immer noch um den Ursprung 0,0,0.
Das laufen in diese Richtung geht auch. Weis nicht weiter, dachte hätte das Tut soweit eigentlich verstanden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera via Matrix. Denkfehler?
BeitragVerfasst: Fr Mai 24, 2013 14:40 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Zitat:
Das bewegen und das drehen geht soweit nur drehe ich mich immer noch um den Ursprung 0,0,0.


Dann stimmt was mit der Reihenfolge nicht, versuch mal Translate nach dem MultMatrix.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera via Matrix. Denkfehler?
BeitragVerfasst: Fr Mai 24, 2013 21:09 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Das habe ich auch schon probiert. Dann drehe ich mich richtig, nur bewege ich mich dann nicht mehr in die richtung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera via Matrix. Denkfehler?
BeitragVerfasst: Fr Mai 24, 2013 22:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Wenn du den Bewegungsvektor einfach nur aufaddierst bewegst du dich nur an den Achsen entlang. Du musst den Vektor wahrscheinlich vorher mit der Rotationsmatrix multiplizieren damit dieser auch in die Kamera Richtung zeigt.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera via Matrix. Denkfehler?
BeitragVerfasst: So Mai 26, 2013 08:16 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Hmmmm, werde es mir am Montag nochmal anschauen und berichten :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera via Matrix. Denkfehler?
BeitragVerfasst: Mo Mai 27, 2013 09:53 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Habe mir die Sourcen nochmal angeschaut. Ein einfaches aufaddieren ist das eigentlich nicht.
Das ist der Code.
Code:
  1.  
  2.   APosVect[0] := APosVect[0] + (ALocalZ[0] * ASpeed);
  3.   APosVect[1] := APosVect[1] + (ALocalZ[1] * ASpeed);
  4.   APosVect[2] := APosVect[2] + (ALocalZ[2] * ASpeed);
  5.  

ALocalXYZ ist der Vektor (TVector3f) der Cam, APosVect ist die Position der Cam.
Das müste so eigentlich funktionieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera via Matrix. Denkfehler?
BeitragVerfasst: Mo Mai 27, 2013 11:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Beinhaltet ALocalZ schon die Drehung mit der Kamera Richtung? Ich poste einfach mal meinen Code (auch wenn der sicher nicht perfekt ist, weil ich die Rotationsmatrix jedes mal neu berechne). Die Move Funktion bewegt die Kamera relativ zum Sichtwinkel. MoveAbsolute entspricht dabei in etwa deinem Code welche die Kamera an den Achsen im Koodinatensystem bewegt.
Code:
  1.  
  2. procedure TCameraMatrix.Move(v: TVertex3f);
  3. var
  4.   m:TMatrix4x4f;
  5. begin
  6.   m.identity();
  7.   m.rotateX(Rotation.v[0]);
  8.   m.rotateY(Rotation.v[1]);
  9.   m.rotateZ(Rotation.v[2]);
  10.  
  11.   v:=m*v;
  12.   MoveAbsolute(v);
  13. end;
  14.  
  15. procedure TCameraMatrix.MoveAbsolute(v: TVertex3f);
  16. begin
  17.   fPosition:=fPosition+v;
  18. end;
  19.  
  20. ...
  21.  
  22. APosVect.Move(ALocalZ*speed);
  23.  

(Ich habe die Operatoren für meine Matrizen und Vektoren Records überladen/geschrieben damit der Code übersichtlicher wird, das dürfte sich aber einfach in Funktionsaufrufe umschreiben lassen). Ich hoffe ich habe das Problem richtig verstanden.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kamera via Matrix. Denkfehler?
BeitragVerfasst: Mo Mai 27, 2013 12:30 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Ja eigentlich schon und deswegen habe ich das nochmal kontrolliert.
Bei der Rotation, wird mein lokales Koordinatensystem garnicht verändert, der Vektor zeigt immer noch in die Richtung von wo es los ging. Bei Z also (0,0,1) und das kann nicht sein.
Daher muss der Fehler noch in der Rotationsberechnung sein....
hmm, dann mal wieder testen....


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Mai 27, 2013 14:06 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Habe nun mein Problem gelöst bekommen. Hatte in beiden Teilen noch einen Fehler.
Vorwärts
Code:
  1.  
  2.     ftCamPos[0] := ftCamPos[0] - (ftCamz[0] * 0.1);
  3.     ftCamPos[1] := ftCamPos[1] - (ftCamz[1] * 0.1);
  4.     ftCamPos[2] := ftCamPos[2] + (ftCamz[2] * 0.1);
  5.  

Rotation um die Y-Achse
Code:
  1.  
  2.       m := CreateRotationMatrix(ALokalY, AValue);
  3.       ALokalX := VectorTransform(ALokalX, m);
  4.       ALokalZ := VectorTransform(ALokalZ, m);
  5.       AObjMatrix := MatrixMultiply(AObjMatrix, m);
  6.  

thx...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]