#1 03.10.2011 15:00:13

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Kamerafahrt um eine Achse

Hallo!

Vielen Dank für die bisherigen Antworten, jede bringt mich DirectX  ein Stück näher. Ist aber noch ein weiter Weg.

Nun versuche mit folgendem Code eine Kamerafahrt um die Z-Achse zu machen:

Code: delphi

procedure tkamera.kamerafahrt;
var
  radwinkel: extended;
begin
  if fzrotkamera then
  begin
  inc (fdegree);
  if fdegree > 360 then fdegree := 1;

  radwinkel := d3dxtoradian(fdegree);
    fauge.x := cos(radwinkel) * fradius;
    fauge.y := sin(radwinkel) * fradius;
    fauge.z := 0;
  end;
end;


Das klappt, also zumindest es bewegt sich was, aber es ruckelt bzw es ist systematisch ein Sprung drin.

Nach dem Untersuchen mit dem Debugger kann es sein, dass der Sprung nach genau 90° ist.

Ich weiß, dass nicht die Kamera verschoben wird, sonder das Bild. Muß ich noch den UP-Vektor verändern? Aber wie, versuche waren irgendwie merkwürdig.

Gruß Peter

Beitrag geändert von Peter-Pascal (03.10.2011 15:00:55)


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#2 03.10.2011 15:16:16

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Kamerafahrt um eine Achse

Zitat:

Muß ich noch den UP-Vektor verändern?

Genau das wird es sein. Wenn die Kameraansicht springt ist es meist der Up-Vektor wink
Sobald du mit der Kamera dich wirklich dreidimensional bewegst und nicht wie bei einem Ego-Shooter auf einer 2D-Ebene läufst, musst du den Up-Vector dynamischer berechnen.

Bei dir fliegt die Kamera, wenn ich es richtig verstanden hab. einen Kreis um die Z-Achse. Das Auge liegt dabei immer auf dem Kreis. Dein Kameraziel denke ich mal wird die Tangente der Kreisbahn sein. Damit wäre dann der Up-Vector in diesem Spezialfall (Auge-Kreiszentrum).Normalisiert.
Wenn ein kleines Strichmännchen über den Kreis laufen würde, würde es ja immer aufrecht auf der Oberfläche stehen (Strichmännchen=Up-Vektor).


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#3 09.10.2011 16:23:52

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Kamerafahrt um eine Achse

Hallo Gnietschow,

ich habe ein wenig herumexperimentiert und das ist bei rausgekommen:

Code: delphi

procedure tkamera.kamerafahrt;
var
  radwinkel: extended;
begin
  if fzrotkamera then
  begin
  inc (fdegree);
  if fdegree > 360 then fdegree := -1;

//neu
  if fdegree = 0 then foben := d3dxvector3 (0,1,0);
  if fdegree = 91 then foben := d3dxvector3 (0,-1,0);
  if fdegree = 181 then foben := d3dxvector3 (1,0,0);
  if fdegree = 271 then foben := d3dxvector3 (0,1,0);

  radwinkel := d3dxtoradian(fdegree);
    fauge.x := cos(radwinkel) * fradius;
    fauge.y := sin(radwinkel) * fradius;
    fauge.z := 0;
//    D3DXVec3Normalize(FOben,FAuge); habe ich zuerst getestet, funktioniert garnicht
  end;
end;


Die Fahrt ist gleichmäßig. Soweit ich das sehe bewegt sich das Object gleichmäßig.

FAuge ist der Eye-Vektor, FOben ist der UP-Vektor. (eigentlich klar, ich sags bloß)

Gruß Peter

Beitrag geändert von Peter-Pascal (09.10.2011 16:24:30)


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson