Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.033 c
1-1140854033
аноним
2006-02-25 10:53
2006.03.26
Frame в run-time :)


15-1140904369
Grol
2006-02-26 00:52
2006.03.26
Технология устранения ошибок в программе


2-1142244040
Arkady
2006-03-13 13:00
2006.03.26
TBlobField


2-1141928354
zxcv
2006-03-09 21:19
2006.03.26
двумерный масив в ф-ии


3-1138958029
Ega23
2006-02-03 12:13
2006.03.26
Создание View - поясните




   Наверх