Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение камеры в трех осях в OpenGL [Delphi]


Signate ©   (2005-09-14 18:41:00) 

сделал перемещение по плоскости 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;


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


Axis   (2005-09-17 12:05:00) [1]


> XProger ©

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


XProger   (2005-09-17 01:20:00) [2]

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


Axis   (2005-09-16 19:45:00) [3]


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


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


XProger   (2005-09-15 18:03:00) [4]

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


Signate   (2005-09-15 13:44:00) [5]

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


RzCoDer   (2005-09-15 12:13:00) [6]

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


Signate   (2005-09-15 10:13:00) [7]

XProger ©   (14.09.05 19:45) [2]

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


DR0N   (2005-09-14 21:10:00) [8]

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


XProger   (2005-09-14 19:45:00) [9]

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

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 18:54:00) [10]


{----------------------------------------------------------------------------}
{ * 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо