![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перемещение камеры в трех осях в 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.