Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [GL-Scene] Kamera soll nicht rollen

  Alt 10. Mär 2004, 20:45
Habs geschafft . Hat zwar mal richtig Hirnschmalz verbraten zu kapieren, wie GLScene mit seinen Daten umgeht (sch**ss Doku... Vollmüll...), aber i hobs.

Wer wissen möchte, hier etwas Kot:
Delphi-Quellcode:
Golbal:
var
  Keys : array[0..255] of boolean;
  MouseBtns : array[0..1] of boolean;
  LastMousePosX,
  LastMousePosY : Integer;

.
.
.

procedure TForm1.AsyncTimer1Timer(Sender: TObject);
var spd : Single;
    pos : TVector3f;
    hasmoved : boolean;
    DirX,
    DirY,
    DirZ : Single;
    RotateA,
    RotateB : Single;
    PosX,
    PosY,
    PosZ : Single;
    a, b : TVector3f;
begin
  spd := (100 / RealFPS) * 0.05;

  DirX := GLCamera1.Direction.X;
  DirY := GLCamera1.Direction.Y;
  DirZ := GLCamera1.Direction.Z;

  RotateA := ((Mouse.CursorPos.X - LastMousePosX) / 500);
  RotateB := ((Mouse.CursorPos.Y - LastMousePosY) / 500);

  PosX := 0;
  PosY := 0;
  PosZ := 0;

  hasmoved := false;
  if Keys[ord('A')] then
   begin
     PosX := PosX + (DirZ*spd);
     PosZ := PosZ - (DirX*spd);
     hasmoved := true;
   end;

  if Keys[ord('D')] then
   begin
     PosX := PosX - (DirZ*spd);
     PosZ := PosZ + (DirX*spd);
     hasmoved := true;
   end;

  if Keys[ord('W')] then
   begin
     PosX:= PosX + (DirX*spd);
     PosY:= PosY + (DirY*spd);
     PosZ:= PosZ + (DirZ*spd);
     hasmoved := true;
   end;

  if Keys[ord('S')] then
   begin
     PosX := PosX - (DirX*spd);
     PosY := PosY - (DirY*spd);
     PosZ := PosZ - (DirZ*spd);
     hasmoved := true;
   end;

  GLCamera1.BeginUpdate;
  if hasmoved then
   begin
     pos[0] := PosX;
     pos[1] := PosY;
     pos[2] := PosZ;
     GLCamera1.Position.Translate(pos);
   end;

  a[0] := 0;
  a[1] := 1;
  a[2] := 0;

  b[0] := DirZ;
  b[1] := 0;
  b[2] := -DirX;

  if MouseBtns[0] then GLCamera1.Direction.Rotate(a, RotateA);
  if MouseBtns[0] then GLCamera1.Direction.Rotate(b, -RotateB);
  GLCamera1.EndUpdate;

  LastMousePosX := Mouse.CursorPos.X;
  LastMousePosY := Mouse.CursorPos.Y;
end;
Soweit so gut. Ich bin jetzt erstmal für ein paar Minuten glücklich, und gleich kommt bestimmt der Donnerschlag... kennt man ja

Happy Grüße,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat