Форум: "Игры";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизПеремещение камеры в трех осях в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.058 c