![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с камерой
Xeno © (2005-03-19 15:58:00)Кто нибудь знает почему в демке "actortwocam" когда включен вид от первого лица,если сильно резко повращать мышкой в разные стороны актёр начинает заваливаться в бок?? Причём если мышь не трогать или сильно не дёргать то все нормально. Пробовал на разных машинах, подобный эффект присутствует везде. Кто нибудь знает как это лечиться?
Xeno (2005-03-23 07:05:00) [1]Может и нет :-))
DeadMeat (2005-03-22 21:07:00) [2]Ты думаешь это плохо? То, что ты сам его нашел..
---
...Death Is Only The Begining...
Xeno (2005-03-22 06:11:00) [3]Жаль никто сразу не подсказал,много времени потерял на поиск алгоритма...
Xeno (2005-03-22 06:09:00) [4]Нашёл ещё одно решение,заключается в ручной обработке поворота объекта с камерой, вроде как полностью решает данную проблемму:
procedure TForm1.MouseView();
var
mpos:Tpoint;
begin
GetCursorPos(mpos);
SetCursorPos(SceneW, SceneH);
Player.TurnAngle:=Player.TurnAngle-((mpos.x-SceneW)*0.1);
if ((Player.PitchAngle-(mpos.y-SceneH)*0.1) < 90) //Makes sure that you can't
and ((Player.PitchAngle-(mpos.y-SceneH)*0.1) > -90) then //pitch your head too much.
Player.PitchAngle:=Player.PitchAngle-(mpos.y-SceneH)*0.1;
Player.Up.X:=-sin(Player.PitchAngle*pi/180)*sin(Player.TurnAngle*pi/180);
Player.Up.Y:=cos(Player.PitchAngle*pi/180);
Player.Up.Z:=-sin(Player.PitchAngle*pi/180)*cos(Player.TurnAngle*pi/180);
end;
procedure TForm1.Realign();
begin
Player.Direction.Z:=cos(Player.TurnAngle*pi/180);
Player.Direction.X:=sin(Player.TurnAngle*pi/180);
Player.Direction.Y:=sin(Player.PitchAngle*pi/180);
end;
Xeno (2005-03-20 15:51:00) [5]Если кому интересно проблемму решил так:
xangle:=mouse.CursorPos.X-screen.Width/2;
yangle:=mouse.CursorPos.Y-screen.Height/2;
setcursorpos(screen.width div 2,screen.Height div 2);
GlCamera1.MoveAroundTarget(-yangle*40*deltaTime,0);
Player.TurnHorizontal(xangle*40*deltaTime);
где Player - TGLDummyCube,GlCamera1 - камера смотрящая на Player'а, проблема у Navigator1'а похоже в определении координат по оси У,хотя могу и ошибаться....
mr_Coder (2005-03-19 23:13:00) [6]Для Navigator'а поставь
UseVirtualUp=True;
VirtualUp=Y
DeadMeat (2005-03-19 18:47:00) [7]Это все Navigator и иже с ним...
У него есть папра минусов, если плохо настроить...
Вот этот и он начинает не плавно двигать когда фпс ниже 60.
Поэтому я делал свое управление мышью.
---
...Death Is Only The Begining...