Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 04.11.2011, 11:46   #1
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Адрес: Уфа
Сообщений: 335
Репутация: 31

icq: 498991
По умолчанию столкновения в GLScene

Привет всем! Пишу 3D игру в GLScene. Загружаю 3D объекты, создал земную поверхность, небо. Главная проблема сейчас - как сделать так чтобы нельзя было проходить сквозь всякие объекты и землю?
beygul вне форума   Ответить с цитированием
Старый 04.11.2011, 17:43   #2
cashmail
Форумчанин
 
Регистрация: 23.06.2011
Сообщений: 201
Репутация: 5
По умолчанию

Ну скажем делаем таймер, если обект ближе к камере (Определить по x,y) то останавливаемся, имхо
cashmail вне форума   Ответить с цитированием
Старый 04.11.2011, 19:57   #3
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Адрес: Уфа
Сообщений: 335
Репутация: 31

icq: 498991
По умолчанию

а можно подробнее как это написать в коде?
beygul вне форума   Ответить с цитированием
Старый 14.11.2011, 14:13   #4
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Адрес: Уфа
Сообщений: 335
Репутация: 31

icq: 498991
По умолчанию

как остановится?
beygul вне форума   Ответить с цитированием
Старый 14.11.2011, 16:24   #5
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Адрес: Новосибирск
Сообщений: 214
Репутация: 32

skype: andrey19930403
По умолчанию

У твоих объектов (земля, стена и т.п.) должна быть какая то плотность, которая мешает пройти через него.
Пример у стены некая плотность. Когда тот же ящик (или шарик) с ней сталкивается, идет проверка, может ли он пройти сквозь стену.
__________________
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума   Ответить с цитированием
Старый 16.11.2011, 17:57   #6
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Адрес: Уфа
Сообщений: 335
Репутация: 31

icq: 498991
По умолчанию

Какая плотность? Вы о чём?
как сделать так, чтобы нельзя было проходить камерой сквозь другие объекты?
Вобщем я сделал так: Привязал к камере куб. То биш куб перемещается вместе с камерой всегда. Он невидим, но мы как бы находимся внутри него. Потом для куба и например дерева создал событие столкновения через CollisionManager. Меня интересует что нужно в нём прописать? В самом событии, чтобы нельзя было проходить сквозь дерево. И ещё! С деревом всё предельно просто, а вот как быть с 3DS объектами?

Тоесть событие столкновения фиксируется, А вот как остановить движение камеры?
beygul вне форума   Ответить с цитированием
Старый 17.11.2011, 15:34   #7
Beermonza
Инженер ИС
Профессионал
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Репутация: 746
По умолчанию

Цитата:
Сообщение от beygul Посмотреть сообщение
Тоесть событие столкновения фиксируется, А вот как остановить движение камеры?
Ответ в вопросе кроется.
__________________
Руководитель проекта MMO 2D RPG
Beermonza вне форума   Ответить с цитированием
Старый 17.11.2011, 20:48   #8
Selestis
Участник клуба
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Адрес: Самара
Сообщений: 719
Репутация: 268
По умолчанию

Ну а как вы её двигаете?) Просто при передвижении проверяйте на близость к другим объектам (в простейшем случае), и если не прошло проверку, то не двигайте камеру по направлении к ним. Если охото покруче, вроде бы к GLScene приделан физ. двиг ODE, посмотрите примеры.
__________________
Изобретатель велосипедов
Selestis вне форума   Ответить с цитированием
Старый 18.11.2011, 15:56   #9
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Адрес: Уфа
Сообщений: 335
Репутация: 31

icq: 498991
По умолчанию

Вобщем я реализовал. Но по своему! Но только с одним деревом. Деревья я размножил с помощью ProxyObject. Но никак не могу сделать так, чтобы камера, а точнее куб внутри камеры, реагировал на остальные прокси деревья.

Я создал для прокси объекта событие колизион. Но у меня получается так, что когда я запускаю программу - я нажимаю клавишу 'w' то биш вперёд, а камера удаляется с точностью наоборот, то биш назад. Так же, если нажимаю назад - камера идёт вперёд. Лево право - тоже всё наоборот. Почему так? Ведь изначально, я ни с одним деревом не сталкиваюсь. а в событии OnCollision я прописал следующее:

Цитата:
if ((iskeydown('ц') or iskeydown('w'))) then begin GLCamera1.Move(-0.15); GLCube1.Move(-0.15); end;
if (iskeydown('s') or iskeydown('ы')) then begin GLCamera1.Move(0.15); GLCube1.Move(0.15); end;
if (iskeydown('a') or iskeydown('ф')) then begin GLCamera1.Slide(0.15); GLCube1.Slide(0.15); end;
if (iskeydown('d') or iskeydown('в')) then begin GLCamera1.Slide(-0.15); GLCube1.Slide(-0.15); end;
Если не добавлять столкновение с Proxy объектами - то этот код работает с одним деревом. Но если я добавил событие с Proxy объектами - то вижу эффект который описал выше. То есть кнопки работают наоборот, как будто я столкнулся с прокси деревьями, хотя фактически - я нахожус от них на значительном расстоянии

GLCube1 - это куб в котором находится камера. Именно с ним мы проверяем на столкновение дерево и прокси деревья.

Цитата:
readln(f,n);
for i:=1 to n do begin
GLProxyObject1:=TGLProxyObject.Crea teAsChild(GLDummyCube1);
GLProxyObject1.MasterObject:=GLTree 1;
GLProxyObject1.ProxyOptions:=[pooObjects, pooTransformation, pooEffects];
Read(f,x1);
readln(f,z1);
GLProxyObject1.Position.X:=x1;
GLProxyObject1.Position.Z:=z1;
end;
Таким образом я размножаю деревья через прокси. Читаю координаты из файла.
beygul вне форума   Ответить с цитированием
Старый 18.11.2011, 22:12   #10
Selestis
Участник клуба
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Адрес: Самара
Сообщений: 719
Репутация: 268
По умолчанию

Ну, попробуйте при столкновении в caption формы писать имя объекта, с которым столкнулись (пронумеровав их, например) и так проверить, верно ли вообще рассчитываются столкновения. Или просто сделать индикатор на каждом кадре: есть коллизия или нет. И если столкновения возникают так где не следует - корректировать код добавления коллизии для объекта. Кстати, показали бы его...
__________________
Изобретатель велосипедов
Selestis вне форума   Ответить с цитированием
Ответ

Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода столкновения объектов Asker13 Gamedev - cоздание игр: Unity, OpenGL, DirectX 13 29.12.2010 17:45
Столкновения 3D моделей Zver1993 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 09.10.2010 13:19
столкновения без Delphix somebody94 Помощь студентам 0 29.06.2010 12:10
создать программу столкновения шаров execute Помощь студентам 4 23.10.2009 13:59
Расчет столкновения шариков. belomorinka Общие вопросы Delphi 3 02.06.2009 18:54


08:07.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru