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