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

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

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

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

Ответ
 
Опции темы
Старый 30.01.2010, 23:38   #1
Raiter
Гигант индустрии
 
Регистрация: 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
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Raiter (01.02.2010)
Старый 31.01.2010, 10:17   #3
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Raiter (01.02.2010)
Старый 31.01.2010, 14:04   #4
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Ответ: Поведение камеры

Сообщение от ABTOMAT Посмотреть сообщение
И да, код из первого поста огорчает
Да я знаю, что код черезжопный. Мозг не работал вообще.

Павел
Спасибо, но это не совсем то....

Мне нужно что бы курсор (прицел) спокойно перемещался по экрану, а камера перемещалась за ним, если он отдалился на некоторое расстояние от игрока...

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

Последний раз редактировалось Raiter, 01.02.2010 в 02:31.
(Offline)
 
Ответить с цитированием
Старый 01.02.2010, 03:35   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Поведение камеры

работало плавно
Требуется добавить плавный разгон и торможение?
Не сочтите занудой, но
http://ru.wikipedia.org/wiki/Апериодическое_звено
диф.ур реушается простейшим
http://ru.wikipedia.org/wiki/Метод_Эйлера

И да - все попытки реализовать иначе, будут лишь частным случаем; более громоздким и менее универсальным.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Raiter (01.02.2010)
Старый 01.02.2010, 19:46   #6
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Ответ: Поведение камеры

Всем спасибо за помощь, особенно АВТОМАТу
(Offline)
 
Ответить с цитированием
Старый 01.02.2010, 20:20   #7
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Поведение камеры

2imper зануда xD
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Dream за это полезное сообщение:
Android (01.02.2010), h1dd3n (01.02.2010)
Ответ


Опции темы

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

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


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


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