|
3D-программирование Вопросы, касающиеся программирования 3D мира |
30.01.2010, 23:38
|
#1
|
Гигант индустрии
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений (для 92 пользователей)
|
Поведение камеры
Здравстуйте. Итак возник вопрос с поведением камеры.
Суть такова. Режим 3Д, вид сбоку. Нужно что бы камера вела себя следующим образом: просто двигалась за курсором на небольшое расстояние по Х и Y. Вродь всё просто, но что-то у меня мозг не соображает толком.
Сделал так:
;создание камеры
Player\Entity = CreatePivot()
Player\CamPivot = CreatePivot(Player\Entity)
PositionEntity Player\CamPivot,0,50,0
Camera = CreateCamera(Player\CamPivot)
PositionEntity Camera,0,0,-200
TurnEntity Camera,10,0,0
;обновление камеры
If ( MouseY() > 400 ) And ( EntityY(Camera) > -100 ) Then
If EntityY(Camera) > -(MouseY() - 400) Then
MoveEntity Camera,0,-CamSpeed,0
End If
End If
If ( MouseY() < 200 ) And ( EntityY(Camera) < 100 ) Then
If EntityY(Camera) < -(MouseY() - 200) Then
MoveEntity Camera,0,CamSpeed,0
End If
End If
If EntityY(Camera) < 0 Then
If EntityY(Camera) < -(MouseY() - 400) Then
MoveEntity Camera,0,CamSpeed,0
End If
End If
If EntityY(Camera) > 0
If EntityY(Camera) > -(MouseY() - 200) Then
MoveEntity Camera,0,-CamSpeed,0
End If
End If
If ( MouseX() > 600 ) And ( EntityX(Camera) < 100 ) Then
If EntityX(Camera) < (MouseX() - 600) Then
MoveEntity Camera,CamSpeed ,0,0
End If
End If
If ( MouseX() < 200 ) And ( EntityX(Camera) > -100 ) Then
If EntityX(Camera) > (MouseX() - 200) Then
MoveEntity Camera,-CamSpeed ,0,0
End If
End If
If EntityX(Camera) > 0 Then
If EntityX(Camera) > (MouseX() - 600) Then
MoveEntity Camera,-CamSpeed ,0,0
End If
End If
If EntityX(Camera) < 0
If EntityX(Camera) < (MouseX() - 200) Then
MoveEntity Camera,CamSpeed ,0,0
End If
End If
Но работает это не совсем корректно. Тоесть камера перемещается не настолько плавно как хотелось бы...
Подскажите способ реализации такой камеры...
|
(Offline)
|
|
31.01.2010, 03:07
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Поведение камеры
MX% = MouseX()
MY% = MouseY()
dt% = 14
CX# = (MX-GraphicsWidth()*0.5)/Float(GraphicsWidth())*1
CY# = (MY-GraphicsHeight()*0.5)/Float(GraphicsHeight())*-1
MoveEntity Cam,(CX-EntityX(cam))*0.003*dt,(CY-EntityY(cam))*0.003*dt,0
как-то так.
3д-шное меню, ведёшь курсор в сторону - и камера за ним, и по мере приближения замедляется
работает отлично
коэффициенты подгонять методом научного тыка
И да, код из первого поста огорчает
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.01.2010, 10:17
|
#3
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Поведение камеры
Немного доработав пример сделал такую хрень:
;создание камеры
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
Type Player
Field Entity
Field CamPivot
End Type
Const CamSpeed#=.1
For K=1 To 300
C=CreateCube()
PositionEntity C,Rand(-100,100),Rand(-100,100),Rand(-100,100)
Next
Player.Player=New Player
Player\Entity = CreatePivot()
Player\CamPivot = CreatePivot(Player\Entity)
PositionEntity Player\CamPivot,0,50,0
Camera = CreateCamera(Player\CamPivot)
PositionEntity Camera,0,0,-200
TurnEntity Camera,10,0,0
Repeat
RenderWorld
;обновление камеры
aX#=aX#*.97
aY#=aY#*.97
aY#=aY#-MouseYSpeed()*.01
aX#=aX#+MouseXSpeed()*.01
TranslateEntity Camera,aX#,aY#,0
MoveMouse 100,100
Flip
Until KeyHit(1)
End
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.01.2010, 14:04
|
#4
|
Гигант индустрии
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений (для 92 пользователей)
|
Ответ: Поведение камеры
Сообщение от ABTOMAT
И да, код из первого поста огорчает
|
Да я знаю, что код черезжопный. Мозг не работал вообще.
Павел
Спасибо, но это не совсем то....
Мне нужно что бы курсор (прицел) спокойно перемещался по экрану, а камера перемещалась за ним, если он отдалился на некоторое расстояние от игрока...
Как бы камера должна доганять прицел. Тоесть так, как у меня в примере, но нужно что бы это работало плавно....
Последний раз редактировалось Raiter, 01.02.2010 в 02:31.
|
(Offline)
|
|
01.02.2010, 03:35
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Поведение камеры
Требуется добавить плавный разгон и торможение?
Не сочтите занудой, но
http://ru.wikipedia.org/wiki/Апериодическое_звено
диф.ур реушается простейшим
http://ru.wikipedia.org/wiki/Метод_Эйлера
И да - все попытки реализовать иначе, будут лишь частным случаем; более громоздким и менее универсальным.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.02.2010, 19:46
|
#6
|
Гигант индустрии
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений (для 92 пользователей)
|
Ответ: Поведение камеры
Всем спасибо за помощь, особенно АВТОМАТу
|
(Offline)
|
|
01.02.2010, 20:20
|
#7
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Поведение камеры
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Dream за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:44.
|