Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 05.10.2007, 02:34   #1
evel
AnyKey`щик
 
Регистрация: 18.09.2007
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Плавное перемещение камеры

Здрасьте, вот такой у меня гемор-
Вообщем сделал я карту своего города...увидел как-то карту Кировска от Chuma и захотел такую-же сотворить, но лучше...
Все нормально вроде сделал...и модельки и свет и фог...даже меню набросал...камера плавно летает...вообщем красотища!..Ах да - трабл такой : Как можно сделать так чтобы при нажатии кнопки (например моего меню) камера (которая привязанна к спрятонной коробочке) мягко передвигалась в указанные мною координаты...
Вообщем типа так:
жму кнопку...камера плавно разворачивается в сторону координат...камера плавненько летит к координатам икс,игрег,зэд...

пробовал вот так:

If Press_Button(movA) PositionEntity loh,110,0,110 PointEntity loh,NG

NG- это бокс который я подвесил над нужной координатой...-но летит эта камера очень быстро и не красиво

P/S кнопка уже есть...
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 08:50   #2
jimon
 
Сообщений: n/a
Re: Плавное перемещение камеры

1) пишем вот такую вот функцию
Function AnimateValue#(in#,ch#,speed#)
	If Abs(ch - in) <= speed Then Return ch
	Return in + Sgn(ch - in) * speed
End Function
2) делаем глобальные переменые где то
Global CameraAnimate%,CamAnimX#,CamAnimY#,CamAnimZ#

3) при нажатии на movA просто пишем
if Pres_Button(movA) then
CameraAnimate = 1
CamAnimX = 110
CamAnimY = 0
CamAnimZ = 110
end if
4) далее пишем такую вот фигню примерно :
if CameraAnimate = 1 then
local camx#,camy#,camz#
camx = AnimateValue(entityx(camera),CamAnimX,1.0)
camy = AnimateValue(entityy(camera),CamAnimY,1.0)
camz = AnimateValue(entityz(camera),CamAnimZ,1.0)
PositionEntity camera,camx,camy,camz

тут проверяем растояние от камеры до конечной точки
if distance < 10 then CameraAnimate = 0

end if
ps. ето только анимация движения по координатам
я думаю анимацию поворота и самому можно доделать аналогично
ps2. мой метод жостко кривой, но рабочий
 
Ответить с цитированием
Старый 05.10.2007, 11:47   #3
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Re: Плавное перемещение камеры

Да, а еще можно воспользоватся вот этой функцией:
Function CurveValue#(newvalue#,oldvalue#,increments# )
newvalue#=newvalue#+(oldvalue#-newvalue#)/increments
Return newvalue#
End Function
А далше делаем так:
cur_x = CurveValue#(new_x,old_x, increments)
cur_Y = CurveValue#(new_y,old_y, increments)
cur_z = CurveValue#(new_z,old_z, increments)

positionentity camera,cur_x, cur_y, cur_z
Ну это почти тоже самое.
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 12:13   #4
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: Плавное перемещение камеры

вторая более универсальная !!
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 16:41   #5
jimon
 
Сообщений: n/a
Re: Плавное перемещение камеры

H@NON
в твоей функции будет "дребезжание" числа
у тебя просто при lim newvalue -> oldvalue
получится что (oldvalue#-newvalue#)/increments бесконечно малое
и в теории получается что newvalue никогда не достигнет oldvalue
а на практике из-за погрешностей в етой зоне возможно будет что
new_value будет то больше, то меньше old_value

да и она переносит с разной скоростью
 
Ответить с цитированием
Старый 05.10.2007, 17:20   #6
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Re: Плавное перемещение камеры

Да я понимаю это. Я знал что число newvalue не достигнет oldvalue, но так можно добится замедление движения в конце. Это получается сначало почти мгновенный перенос, а потом замедление. У меня не наблюдалось погрешности числа newvalue, да я и не использовал голую функцию, ставил условия, проверку на расстояние как ты описал выше. Вообще лучший вариант это работа с целыми числами.
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 19:07   #7
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: Плавное перемещение камеры

newvalue не достигнет oldvalue по этому происходит "дребезжание" числа !!
что бы его избежать нужно еще 1 условие поставить при котором newvalue не будет приблежатся к oldvalue !!
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 20:05   #8
evel
AnyKey`щик
 
Регистрация: 18.09.2007
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Попрбовал оба варианта...оба хороши, спасибо ...но остановился на первом...вообщем вот ,что получилось:

 
Global CameraAnimate%,CamAnimX#,CamAnimY#,CamAnimZ#
 
While Not KeyDown (1)
 
  If Press_Button(movA) Then
      CameraAnimate = 1
        CamAnimX = 80
        CamAnimY = 0
        CamAnimZ = 110
  End If
  If CameraAnimate = 1 
     Local camx#,camy#,camz#
     camx = AnimateValue(EntityX(loh),CamAnimX,0.3)
     camy = AnimateValue(EntityY(loh),CamAnimY,0.3)
     camz = AnimateValue(EntityZ(loh),CamAnimZ,0.3)
     PositionEntity loh,camx,camy,camz
  EndIf
 
  If Press_Button(movB)
     CameraAnimate = 1
        CamAnimX = 150
        CamAnimY = 0
        CamAnimZ = 110
  End If
  If CameraAnimate = 1
     Local camx1#,camy1#,camz1#
     camx = AnimateValue(EntityX(loh),CamAnimX,0.3)
     camy = AnimateValue(EntityY(loh),CamAnimY,0.3)
     camz = AnimateValue(EntityZ(loh),CamAnimZ,0.3)
     PositionEntity loh,camx,camy,camz
  EndIf
 
 UpdateWorld
 RenderWorld 
 Flip
 Wend
 
Function AnimateValue#(in#,ch#,speed#)
 If Abs(ch - in) <= speed Then Return ch
 Return in + Sgn(ch - in) * speed
End Function
но.. loh прилипает к координатам и режим,как бы свободного полета, пропадает...,что бы ешё дописать ,чтобы он отлипал от координат?,после того как туда прилетел..
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 20:07   #9
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: Плавное перемещение камеры

то есть один раз переместился и всё ??
или в чем трабла ??
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 20:27   #10
evel
AnyKey`щик
 
Регистрация: 18.09.2007
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Плавное перемещение камеры

Сообщение от IGR
то есть один раз переместился и всё ??
или в чем трабла ??
Ну как...эээ...двигаю я по городу привязанную камеру к коробке...воот..(как бы в *свободном режиме*)...жму на кнопку(типа переместиться в 150,0,100) она плавно летит туда (ок,так и нужно)...жму на другую кнопку, летит туда (так же плавно,ок)...она так и будет летать туда ,куда я её посылаю...но трабл в том,что она как бы прилипает к последней координате и *свободный режим* пропадает..т.е. сдвинуть её уже больше не могу...вот..
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 23:40   #11
jimon
 
Сообщений: n/a
Re: Плавное перемещение камеры

перечитай мой пост
там вот такой вот текст
тут проверяем растояние от камеры до конечной точки
if distance < 10 then CameraAnimate = 0
в принципе делается вот так
local dist_q# = EntityX(cam)*EntityX(cam)+EntityY(cam)*EntityY(cam)+EntityZ(cam)*EntityZ(cam)
if dist_q < (10*10) then CameraAnimate = 0
ps. сверяем квадраты чисел, ибо быстрее
 
Ответить с цитированием
Старый 06.10.2007, 12:17   #12
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Re: Плавное перемещение камеры

Ага, просто постявь условие работы перехода камеры если она дальше от цели на некоторое значение.
(Offline)
 
Ответить с цитированием
Старый 06.10.2007, 21:34   #13
evel
AnyKey`щик
 
Регистрация: 18.09.2007
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Ок! Все летает..сдвигается...разобрался...вчера пол ночи вчитывался в код...вроде все, примерно понял как работает...а отлипает она от координаты простым щелчком мыши...сам чес.говоря не понял до конца ,почему...наверно тут дело уже в ГУИ...

Всем Спасибо!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение персонажа по карте. GRAY_WOLF Наше Open Source Software 0 18.12.2009 19:33
Плавное вращение..м? pepel 2D-программирование 2 02.10.2009 00:04
перемещение и координаты Peter 3D-программирование 6 27.08.2009 15:49
Перемещение вертексов PrgMan 3D-программирование 1 31.07.2009 21:37
Плавное перемещение игрока Fant 3D-программирование 4 18.04.2006 22:48


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com