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

Aktuelle Zeit: Mi Jul 09, 2025 13:27

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kamera Bewegung
BeitragVerfasst: So Nov 12, 2006 12:22 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, in meiner szene rotiere ich erst und verschiebe dann meine szene, damit ich die kamera relativ zum derzeitigen punkt an dem ich mich befinde drehen kann. jetzt möchte ich die kamera relativ zu blickrichtung bewegen, nach vorn oder zurück, jedoch klappt das net, ich denke dass der grundgedanke stimmt, die bewegungsrichtung stimmt nicht so wirklich ;)
Code:
  1.  
  2.   if kforward then
  3.   begin
  4.     cpos.x := cpos.x + sin(crot.y*pi /180) * movespeed * timestep;
  5.     cpos.z := cpos.z + cos(crot.y*pi /180) * movespeed * timestep;
  6.   end;
  7.  
  8.   if kbackward then
  9.   begin
  10.     cpos.x := cpos.x - sin(crot.y*pi /180) * movespeed * timestep;
  11.     cpos.z := cpos.z - cos(crot.y*pi /180) * movespeed * timestep;
  12.   end;
  13.  


cpos ist der positions und crot der rotationsvektor, movespeed ist die bewegungsgeschwindigkeit und timestep ist klar \";)\"

die initialwerte sehen so aus:

Code:
  1.  
  2.   crot := to_v3d(0, 180, 0);
  3.   cpos := to_v3d(0, -2, 5);
  4.  


so gehts:
Code:
  1.  
  2.   if kforward then
  3.   begin
  4.     cpos.x := cpos.x - sin(degtorad(crot.y)) * movespeed * timestep;
  5.     cpos.z := cpos.z + cos(degtorad(crot.y)) * movespeed * timestep;
  6.   end;
  7.  
  8.   if kbackward then
  9.   begin
  10.     cpos.x := cpos.x + sin(degtorad(crot.y)) * movespeed * timestep;
  11.     cpos.z := cpos.z - cos(degtorad(crot.y)) * movespeed * timestep;
  12.   end;
  13.  


mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 12, 2006 14:08 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Also gehts doch?
Verstehs nit ganz, du hast die Lösung also schon?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 12, 2006 16:41 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
bietet sicher noch raum für optimierungen, aber so läuft das ganze:
Code:
  1.  
  2. procedure TMainForm.Movement;
  3. var
  4.   newspeed: single;
  5. begin
  6.   if kleft then
  7.     crot.y := crot.y - rotspeed * timestep;
  8.   if kright then
  9.     crot.y := crot.y + rotspeed * timestep;
  10.   if kup then
  11.     crot.x := crot.x - rotspeed * timestep;
  12.   if kdown then
  13.     crot.x := crot.x + rotspeed * timestep;
  14.  
  15.   if crot.y < 0 then
  16.     crot.y := crot.y + 360;
  17.   if crot.y > 360 then
  18.     crot.y := 360 - crot.y;
  19.   if crot.x < 0 then
  20.     crot.x := crot.x + 360;
  21.   if crot.x > 360 then
  22.     crot.x := 360 - crot.x;
  23.  
  24.   if (kmleft and (kforward or kbackward)) or
  25.      (kmright and (kforward or kbackward)) then
  26.     newspeed := movespeed / 2 else
  27.       newspeed := movespeed;
  28.  
  29.   if kforward then
  30.   begin
  31.     cpos.x := cpos.x - sin(degtorad(crot.y)) * newspeed * timestep;
  32.     cpos.z := cpos.z + cos(degtorad(crot.y)) * newspeed * timestep;
  33.   end;
  34.   if kbackward then
  35.   begin
  36.     cpos.x := cpos.x + sin(degtorad(crot.y)) * newspeed * timestep;
  37.     cpos.z := cpos.z - cos(degtorad(crot.y)) * newspeed * timestep;
  38.   end;
  39.   if kmleft then
  40.   begin
  41.     cpos.x := cpos.x - sin(degtorad(crot.y - 90)) * newspeed * timestep;
  42.     cpos.z := cpos.z + cos(degtorad(crot.y - 90)) * newspeed * timestep;
  43.   end;
  44.   if kmright then
  45.   begin
  46.     cpos.x := cpos.x + sin(degtorad(crot.y - 90)) * newspeed * timestep;
  47.     cpos.z := cpos.z - cos(degtorad(crot.y - 90)) * newspeed * timestep;
  48.   end;
  49. end;
  50.  


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


Wer ist online?

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.

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