[OpenGL] Poruszanie sie po mapie

Odpowiedz Nowy wątek
2009-11-16 10:51

Rejestracja: 17 lat temu

Ostatnio: 6 lat temu

0

Witam
Problem jest następujący: Otóz mam pewna procedure która porusza widza względem osi x,y,z, obrót oka następuje względem k (kąt poziomy oka) do rzeczy:

poruszanie jest za pomocą klawiszy W,S,A,D

var
  K : Real = 0; // kąt poziomy obr. oka 
  PosX: Real = 0;
  PosZ: Real = 0;
// k = od 0 do 360

procedure TOpenGLform.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #97 then posX := posX + 0.1;
  if key = #100 then posX := posX - 0.1;
  if key = #119 then posZ := posZ + 0.1;
  if key = #115 then posZ := posZ - 0.1;  
end;

w jaki sposób przerobic kod by poruszanie klawiszami W,S,A,D bylo zintegrowane ze skierowaniem oka (K) w dana strone? Ew. moze byc poruszanie tylko klawiszem [W]

z gory dziekuje :)


Pozostało 580 znaków

Quakespectator
2009-11-16 15:25
Quakespectator
0
                                 int p = GetTickCount();
glop = kąt
                               direction.x = cos(glop*(pi/180.0));
                               direction.y = 0.0f;
                               direction.z = sin(glop*(pi/180.0));

//                             direction = Normalize(direction);
pos - pozycja = aktualnej pozycji przemnozonej przez predkosc * czas pomiedzy klatkami

        pos = vectors_add(pos,vector_multiple(direction,V   * x ) );

}

Pozostało 580 znaków

2009-11-17 00:43

Rejestracja: 17 lat temu

Ostatnio: 6 lat temu

0

poradziłem sobie :) zastosowałem procedura glLookAt() dla ustawienia kamery. Następnie zmienne posx, posy, posz - to polozenie oka na osiach x,y,z a K - kąt nachylenia w poziomie

dla zainteresowanych zamieszczam kod poruszania względem nachylenia kąta 'k' kamery (w rezultacie poruszamy sie pa mapie jak w grach fpp):

    Ord('W'):
    begin
      PosX:=PosX+Cos(DegToRad(K+180))*0.01;
      PosZ:=PosZ+Sin(DegToRad(K+180))*0.01;
    end;
    Ord('S'):
    begin
      PosX:=PosX+Cos(DegToRad(K))*0.01;
      PosZ:=PosZ+Sin(DegToRad(K))*0.01;
    end;
    Ord('A'):
    begin
      PosX:=PosX+Cos(DegToRad(K+90))*0.01;
      PosZ:=PosZ+Sin(DegToRad(K+90))*0.01;
    end;
    Ord('D'):
    begin
      PosX:=PosX+Cos(DegToRad(K-90))*0.01;
      PosZ:=PosZ+Sin(DegToRad(K-90))*0.01;
    end;

gdzie :

var
  K : Real = 321;
  PosX: Real = 0;
  PosZ: Real = 0;

</b>


Pozostało 580 znaków

rererere
2009-11-17 08:35
rererere
0

moze inaczej http://cezet.host.sk/ se ta, wejdz i sciagnij silnik w opengl

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0