|
3D-программирование Вопросы, касающиеся программирования 3D мира |
13.12.2007, 19:27
|
#1
|
Нуждающийся
Регистрация: 02.11.2007
Сообщений: 93
Написано 0 полезных сообщений (для 0 пользователей)
|
Ограничение наклона камеры в 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
А есть ли какой-нибудь готовый алгоритм, который бы работал без сбоев?
|
(Offline)
|
|
14.12.2007, 00:33
|
#2
|
Нуждающийся
Регистрация: 02.11.2007
Сообщений: 93
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Ограничение наклона камеры в FPS
Что, никто не знает?
|
(Offline)
|
|
14.12.2007, 00:50
|
#3
|
Разработчик
Регистрация: 09.12.2007
Сообщений: 376
Написано 83 полезных сообщений (для 122 пользователей)
|
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)
|
(Offline)
|
|
14.12.2007, 01:15
|
#4
|
Оператор ЭВМ
Регистрация: 01.12.2007
Сообщений: 39
Написано 6 полезных сообщений (для 7 пользователей)
|
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
У меня стоит так вроде....работает без глюков
Хотя может я и ошибаюсь...
|
(Offline)
|
|
14.12.2007, 03:23
|
#5
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
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
|
(Offline)
|
|
14.12.2007, 15:31
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Ограничение наклона камеры в FPS
Угу, варриант Cyan'а имхо тут самый лучший, ни проскоков, контролируешь сенсивити и все прилогающиеся плюсы, только вот можно было избавиться от переменной CamYaw, хотя наверное с ней будет варриант чуток пошустрее.
А это:
If (CamPitch > CamMaxPitch) Then CamPitch = CamMaxPitch
If (CamPitch < -CamMaxPitch) Then CamPitch = -CamMaxPitch
Можно заменить так:
If abs(CamPitch)>CamMaxPitch CamPitch=CamMaxPitch*Sgn(CamPitch)
|
(Offline)
|
|
14.12.2007, 15:44
|
#7
|
Нуждающийся
Регистрация: 02.11.2007
Сообщений: 93
Написано 0 полезных сообщений (для 0 пользователей)
|
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 не крутился.
|
(Offline)
|
|
14.12.2007, 15:49
|
#8
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Ограничение наклона камеры в FPS
Не мудри, почитай и поймёшь принцип, а дальше сам под своё закодишь.
|
(Offline)
|
|
14.12.2007, 15:59
|
#9
|
Нуждающийся
Регистрация: 02.11.2007
Сообщений: 93
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Ограничение наклона камеры в FPS
Сообщение от MoKa
Не мудри, почитай и поймёшь принцип, а дальше сам под своё закодишь.
|
Так у меня в коде принцип, вроде бы, нормальный. А почему проскальзывает-то, этого я не пойму.
|
(Offline)
|
|
14.12.2007, 16:02
|
#10
|
Бывалый
Регистрация: 20.11.2007
Сообщений: 663
Написано 145 полезных сообщений (для 176 пользователей)
|
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
|
(Offline)
|
|
14.12.2007, 16:58
|
#11
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Ограничение наклона камеры в FPS
Maxxx.!!!., потому что у тебя юзаеться сразу достование градуса, а при применении граздуса на него применяеться Angle Mod 360, поэтому. А переменная это объодит, т.к. мы сперва проверяем переменную.
|
(Offline)
|
|
14.12.2007, 17:08
|
#12
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Re: Ограничение наклона камеры в FPS
Жжоте чуваки. Смотрите пятый пост - http://www.boolean.name/showpost.php...11&postcount=5 и не позорьтесь более.
|
(Offline)
|
|
15.12.2007, 00:16
|
#13
|
Разработчик
Регистрация: 09.12.2007
Сообщений: 376
Написано 83 полезных сообщений (для 122 пользователей)
|
Re: Ограничение наклона камеры в FPS
Разница в кодах только во внешнем виде и использовании Turn'а, из-за него и "проскакивание", когда скорость мыши большая. Я ограничил скорость мыши, но логичнее наверное юзать RotateEntity для поворотов.
JohnK, не позорнее постить прямо из семплов?
|
(Offline)
|
|
15.12.2007, 09:03
|
#14
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Re: Ограничение наклона камеры в FPS
JohnK, не позорнее постить прямо из семплов?
|
LOL?
Я про то, что уже был дан идеальный вариант в пятом посте. И о том, что не надо что-то еще придумывать, а то пошли уже трюки всякие.
|
(Offline)
|
|
15.12.2007, 11:22
|
#15
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Ограничение наклона камеры в FPS
JohnK, насчёт идеальности несоглашусь, к нему будет посложнее прикрутить сглаживание, чем к другому.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:02.
|