Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Перемещение камеры в трех осях в OpenGL   Найти похожие ветки 

 
Signate ©   (2005-09-14 18:41) [0]

сделал перемещение по плоскости XZ без проблем (перемещение по направление камеры + стрейф). но надо сделать так, чтобы двигался я в любом направлении (по направлению камеры).


  if isKeyPressed(87) then  //w
  begin
     // cPos - координаты камеры, cAng - угол
     cPos.X := cPos.X + 0.1*cos(degtorad(cAng.Y + 90));

     cPos.Y := cPos.Y - 0.1*cos(degtorad(cAng.X + 90));

     cPos.Z := cPos.Z + 0.1*sin(degtorad(cAng.Y + 90));
  end;

  if isKeyPressed(83) then  //s
  begin
     cPos.X := cPos.X - 0.1*cos(degtorad(cAng.Y + 90));

     cPos.Y := cPos.Y + 0.1*cos(degtorad(cAng.X + 90));

     cPos.Z := cPos.Z - 0.1*sin(degtorad(cAng.Y + 90));
  end;


эта часть работает не точно, если подняться высоко и потом резко спускаться, то не получается движения по направлению. если кто сталкивался с такой проблемой - откликнитесь пожалуйса


 
DR0N ©   (2005-09-14 18:54) [1]


{----------------------------------------------------------------------------}
{ * Module Update : u_camera                                                 }
{ 1) [?] [?] XProger (XProger@list.ru)                                       }
{   TCamera                                                                  }
{     CalcVertex                                                             }
{     SetPos                                                                 }
{----------------------------------------------------------------------------}
unit u_camera;

interface

uses OpenGL;

const radian=pi/180;

type
   TVertex=record
    X, Y, Z: single;
   end;

type
 TCamera = object
  eye    : TVertex;
  center : TVertex;
  Zoom   : single;
  Height : single;
  XAngle,
  YAngle : single;
  procedure CalcVertex;
  procedure SetPos;
 end;

implementation
//----------------------------------------------------------------------------
procedure TCamera.CalcVertex;
var
rast: single;
begin
rast:=cos(XAngle*radian);
center.X:=eye.X+sin(-YAngle*radian)*rast;
center.Y:=eye.Y+sin(XAngle*radian);
center.Z:=eye.Z+cos(-YAngle*radian)*rast;
end;
//----------------------------------------------------------------------------
procedure TCamera.SetPos;
begin
gluLookAt(-eye.X, -eye.Y, -eye.Z,
         -center.X, -center.Y, -center.Z,
         0, 1, 0);
end;
//----------------------------------------------------------------------------
end.


 
XProger ©   (2005-09-14 19:45) [2]

Используй сферические координаты

cPos.X := cPos.Z + Speed * cos(Angle.Y) * cos(Angle.X);
cPos.Y := cPos.Z + Speed * sin(Angle.X);
cPos.Z := cPos.Z + Speed * sin(Angle.Y) * cos(Angle.X);


DR0N, посмотри с такой камерой в -90 и 90 по X ;)
Испольуй это http://xproger.mirgames.ru/?id=1&doc=camera


 
DR0N ©   (2005-09-14 21:10) [3]

XProger, а я ей не пользуюсь, у меня - своя =)


 
Signate ©   (2005-09-15 10:13) [4]

XProger ©   (14.09.05 19:45) [2]

вообще не работает... смотрю вправо - камеру тащит вниз, а влево - вверх


 
RzCoDer ©   (2005-09-15 12:13) [5]

Signate, значит оси путаешь :lol:


 
Signate ©   (2005-09-15 13:44) [6]

делал по примеру [2]... как там напутать можно?


 
XProger ©   (2005-09-15 18:03) [7]

Signate, с углами разберись...


 
Axis ©   (2005-09-16 19:45) [8]


> XProger ©   (15.09.05 18:03) [7]
>
> Signate, с углами разберись...


по твоей статье у меня "камера" не двигается в ориентированном направлении, но вращается.


 
XProger ©   (2005-09-17 01:20) [9]

Ешё раз пересмотри свой код, математически расчитай где у тебя право-лево, низ-верх. Тогда всё встанет на свои места. В случае чего углы конвертируешь в под свою систему координат.


 
Axis ©   (2005-09-17 12:05) [10]


> XProger ©

можно с тобой по асе связаться?



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.056 c
2-1141629214
Bratskiy
2006-03-06 10:13
2006.03.26
Выравнивание Label


2-1141745484
Nsk3D
2006-03-07 18:31
2006.03.26
где собака зарыта?


6-1134458922
stone
2005-12-13 10:28
2006.03.26
Download файлов с использованием ТHTTPReqResp


15-1140814898
Marser
2006-02-25 00:01
2006.03.26
XX съезд КПСС


2-1141744584
Nox321
2006-03-07 18:16
2006.03.26
Как прописать процедуру, где?