forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Ограничение наклона камеры в FPS (http://forum.boolean.name/showthread.php?t=5282)

Maxxx.!!!. 13.12.2007 19:27

Ограничение наклона камеры в FPS
 
Как ограничить X-наклон камеры в FPS?

Пробовал так -

u#=80
If Abs(EntityPitch#(CAM))=>u# RotateEntity CAM,u#*Sgn(EntityPitch#(CAM)),0,0

Но камера часто уходит в недопустимый диапазон и все переворачивается вверх ногами.

И так пробовал - результат получше, но все-равно частенько не работет.

If EntityPitch#(Cam)>80 Then RotateEntity CAM,79.9,0,0
If EntityPitch#(Cam)<-80 Then RotateEntity CAM,-79.9,0,0


А есть ли какой-нибудь готовый алгоритм, который бы работал без сбоев?

Maxxx.!!!. 14.12.2007 00:33

Re: Ограничение наклона камеры в FPS
 
Что, никто не знает?

FrankH 14.12.2007 00:50

Re: Ограничение наклона камеры в FPS
 
ИМХО метод дубовый, но попробуй так:
Код:

TurnEntity player,0,Float(-MouseXSpeed()*camspeed),0,True
yspd#=Float(MouseYSpeed()*camspeed)
If yspd#>20 yspd#=20
If yspd#<-20 yspd#=-20
If (EntityPitch#(Cam)<80) And (yspd#>0) Then
    TurnEntity cam,yspd#,0,0
Else
    If (EntityPitch#(Cam)>-70) And (yspd#<0) Then TurnEntity cam,yspd#,0,0
EndIf

ограничение вверх проскакивает иногда, если поставить (EntityPitch#(Cam)>-80)

sSwSs 14.12.2007 01:15

Re: Ограничение наклона камеры в FPS
 
Тебе должно фатить этого...

TurnEntity Player,0,-MouseXSpeed()/2,0
TurnEntity cam,MouseYSpeed()/2,0,0
MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
If Abs(EntityPitch#(cam))>80 RotateEntity cam,80*Sgn(EntityPitch#(cam)),0,0

У меня стоит так вроде....работает без глюков
Хотя может я и ошибаюсь...

Platon 14.12.2007 03:23

Re: Ограничение наклона камеры в FPS
 
ЖЖоте :)
Код:

CamYaw# = CamYaw + MouseXSpeed() * MouseXSens#
If (CamYaw >  359) Then CamYaw =  CamYaw - 360
If (CamYaw <    0) Then CamYaw = CamYaw + 360
CamPitch# = CamPitch - MouseYSpeed() * MouseYSens#
If (CamPitch >  CamMaxPitch) Then CamPitch =  CamMaxPitch
If (CamPitch < -CamMaxPitch) Then CamPitch = -CamMaxPitch
RotateEntity(Camera, CamPitch, CamYaw, 0)

Где
CamMaxPitch - максимальный угол поворота камеры по X
MouseYSens# - чувствительность мыши по Y, от 0 до 1
MouseXSens# - чувствительность мыши по X, от 0 до 1

moka 14.12.2007 15:31

Re: Ограничение наклона камеры в FPS
 
Угу, варриант Cyan'а имхо тут самый лучший, ни проскоков, контролируешь сенсивити и все прилогающиеся плюсы, только вот можно было избавиться от переменной CamYaw, хотя наверное с ней будет варриант чуток пошустрее.

А это:
Код:

If (CamPitch >  CamMaxPitch) Then CamPitch =  CamMaxPitch
If (CamPitch < -CamMaxPitch) Then CamPitch = -CamMaxPitch

Можно заменить так:
Код:

If abs(CamPitch)>CamMaxPitch CamPitch=CamMaxPitch*Sgn(CamPitch)

Maxxx.!!!. 14.12.2007 15:44

Re: Ограничение наклона камеры в FPS
 
Что-то не работают эти варианты. Может я туплю (наверно, точно туплю :"( ). Вот мой код для движения игрока:

CAM -камера, PL - игрок
u# - ограничение наклона

u#=80;
TurnEntity CAM,MouseYSpeed(),0,0
TurnEntity PL,0,-MouseXSpeed(),0

If KeyDown(17) Then MoveEntity Pl,0,0,0.2
If KeyDown(31) Then MoveEntity Pl,0,0,-0.2
If KeyDown(30) Then MoveEntity Pl,-0.2,0,0
If KeyDown(32) Then MoveEntity Pl,0.2,0,0

MoveMouse 1024/2,768/2
mx=MouseXSpeed ()*0.5
my=MouseYSpeed ()*0.5

MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
If Abs(EntityPitch#(CAM))=>u# RotateEntity CAM,u#*Sgn(EntityPitch#(CAM)),0,0
If EntityPitch#(Cam)>80 Then RotateEntity CAM,79.9,0,0
If EntityPitch#(Cam)<-80 Then RotateEntity CAM,-79.9,0,0


Как бы сюда это вставить, чтобы работало. А то я подставлял, и он вообще по оси X не крутился.

moka 14.12.2007 15:49

Re: Ограничение наклона камеры в FPS
 
Не мудри, почитай и поймёшь принцип, а дальше сам под своё закодишь.

Maxxx.!!!. 14.12.2007 15:59

Re: Ограничение наклона камеры в FPS
 
Цитата:

Сообщение от MoKa
Не мудри, почитай и поймёшь принцип, а дальше сам под своё закодишь.

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

newman 14.12.2007 16:02

Re: Ограничение наклона камеры в FPS
 
У меня вот так.Просто вставь это в цикл.

u#=70
my#=MouseYSpeed()
mx#=MouseXSpeed()
TurnEntity cam,my/8,0,0
TurnEntity player,0,-mx/8,0
MoveMouse GraphicsWidth()*0.1,GraphicsHeight()*0.1
If Abs(EntityPitch#(cam))>u# RotateEntity cam,u#*Sgn(EntityPitch#(cam)),0,0

moka 14.12.2007 16:58

Re: Ограничение наклона камеры в FPS
 
Maxxx.!!!., потому что у тебя юзаеться сразу достование градуса, а при применении граздуса на него применяеться Angle Mod 360, поэтому. А переменная это объодит, т.к. мы сперва проверяем переменную.

johnk 14.12.2007 17:08

Re: Ограничение наклона камеры в FPS
 
Жжоте чуваки. Смотрите пятый пост - http://www.boolean.name/showpost.php...11&postcount=5 и не позорьтесь более.

FrankH 15.12.2007 00:16

Re: Ограничение наклона камеры в FPS
 
Разница в кодах только во внешнем виде и использовании Turn'а, из-за него и "проскакивание", когда скорость мыши большая. Я ограничил скорость мыши, но логичнее наверное юзать RotateEntity для поворотов.
JohnK, не позорнее постить прямо из семплов?

johnk 15.12.2007 09:03

Re: Ограничение наклона камеры в FPS
 
Цитата:

JohnK, не позорнее постить прямо из семплов?
LOL?
Я про то, что уже был дан идеальный вариант в пятом посте. И о том, что не надо что-то еще придумывать, а то пошли уже трюки всякие. :-D

moka 15.12.2007 11:22

Re: Ограничение наклона камеры в FPS
 
JohnK, насчёт идеальности несоглашусь, к нему будет посложнее прикрутить сглаживание, чем к другому.


Часовой пояс GMT +4, время: 10:16.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot