Autor Beitrag
jjturbo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Di 28.04.09 08:53 
Moin Forum,

ich möchte mit einer GLCamera in meinem frei umherfahren können.
Gibt es dafür fertige Ansätze? Oder muß ich alles zu Fuß mit Winkelfunktionen selbst errechnen?

Ich habe das mal so versucht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm3.FormMouseWheel(Sender: TObject; Shift: TShiftState;WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var Weg       :Real;
    sinPitch  :Real;
    sinTurn   :Real;
    sinRoll   :Real;
    cosPitch  :Real;
    cosTurn   :Real;
    cosRoll   :Real;

begin

  Weg := WheelDelta/1000;

  sinPitch := sin(GLCamera1.PitchAngle*pi/180);
  sinTurn  := sin(GLCamera1.TurnAngle*pi/180);
  sinRoll  := sin(GLCamera1.RollAngle*pi/180);
  cosPitch := cos(GLCamera1.PitchAngle*pi/180);
  cosTurn  := cos(GLCamera1.TurnAngle*pi/180);
  cosRoll  := cos(GLCamera1.RollAngle*pi/180);

  GLCamera1.Position.X  := GLCamera1.Position.X - (Weg * sinTurn) - (Weg * sinRoll);
  GLCamera1.Position.Y  := GLCamera1.Position.Y - (Weg * cosPitch) - (Weg * cosRoll);
  GLCamera1.Position.Z  := GLCamera1.Position.Z - (Weg * cosTurn) - (Weg * sinPitch);


end;


So einfach gehts leider net...

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
jjturbo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Di 28.04.09 11:34 
Ok, so gehts:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm3.FormMouseWheel(Sender: TObject; Shift: TShiftState;WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var Weg   :Real;
    WegX  :Real;
    WegY  :Real;
    WegZ  :Real;
begin

  Weg := WheelDelta/1000;

  sinPitch := sin(GLCamera1.PitchAngle*pi/180);
  sinTurn  := sin(GLCamera1.TurnAngle*pi/180);
  cosPitch := cos(GLCamera1.PitchAngle*pi/180);
  cosTurn  := cos(GLCamera1.TurnAngle*pi/180);

  WegX := Weg * cosPitch * sinTurn;
  WegY := -Weg * sinPitch;
  WegZ := Weg * cosPitch * cosTurn;


  GLCamera1.Position.X  := GLCamera1.Position.X - WegX;
  GLCamera1.Position.Y  := GLCamera1.Position.Y - WegY;
  GLCamera1.Position.Z  := GLCamera1.Position.Z - WegZ;


end;


Wenn ich mich jetzt eine Zeit lang umherbewegt und die Kamera hoch- und runtergeschwenkt habe, dann steht das Bild irgendwie schief...
Dann sollte doch mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm3.Button1Click(Sender: TObject);
begin

  GLCamera1.PitchAngle := 0;
  GLCamera1.TurnAngle  := 0;
  GLCamera1.RollAngle  := 0;

  GLCamera1.Position.X  := 0;
  GLCamera1.Position.Y  := 0;
  GLCamera1.Position.Z  := 12;

end;


alles wieder in seiner ursprünglichen Form zu sehen sein, oder?
Aber obwohl wieder alle Kamerapositionen und -winkel zurückgesetzt wurden, zeigt die Kamera irgendwo hin, leider nicht so wie vor dem Start :(

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...