Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2012, 22:44   #1
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
Вопрос Как создать в простеньком 3d шутере элементарную физику.

Всем привет!!!
Решил написать свой простенький 3d шутер. Камера работает, но с глюками, исправлю. Есть несколько комнат соединенных коридорчиками. Сам вопрос в том как сделать так что-бы человек не проходил сквозь стены, поднимался и спускался по лестницам(наклонные плоскости), прыгал и приземлялся на землю по законам притяжения, запрыгивал на ящики?
P.S. делаю на Delphi 7 + OPENGL.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 19.04.2012, 14:02   #2
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Несколько ссылок.

Что такое Collision Detection и зачем оно нужно?
http://gdlinks.hut.ru/cdfaq/intro.shtml#about
http://gdlinks.hut.ru/cdfaq/

AABB: Axis-Aligned Bounding Box http://www.gamedev.ru/code/terms/AABB
OBB: Oriented Bounding Box http://www.gamedev.ru/code/terms/OBB


AABB + OBB несколько видео лекций с кодом на си
http://www.youtube.com/watch?v=Z-R2oirJ3vw

Свой велосипед как раз забросил на данном этапе. Простейшие классы AABB у меня уже делают проверку, но руки пока не доходят дальше это дело развить.
Warn вне форума Ответить с цитированием
Старый 19.04.2012, 20:53   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

К физике это никакого отношения не имеет - сплошная геометрия.
Как справедливо отмечено, ключевое слово collision detection - по нему и гуглить.
s-andriano вне форума Ответить с цитированием
Старый 19.04.2012, 21:58   #4
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Тоесть, если я всё правильно понял это простая геометрия?
А как быть если у меня порядка 100 кубов разной формы будет? Мне что столкновение персоонажа с каждым из них проверять? Можно как нибудь написать функцию, которая будет срабатывать на каждой прорисовке сцены и динамически проверять столкновение персоонажа с остальными кубами? Тоесть один раз эту функцию написать, а дальше прорисовывать сцену и функция будет сама определять где и с чем столкнулся герой.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 19.04.2012, 22:24   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы собирались к каждому кубу писать отдельный код?
(типа проверяем куб1, проверяем куб2)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.04.2012, 22:38   #6
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Как бы нет. Эти кубы либо земля, либо какая-то возвышенность либо ящик.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 19.04.2012, 23:30   #7
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Я думал, что в игрушках обрабатывается место нахождения героя и проверяется, находится ли в его области (кубе) посторонние элементы, если да, то что-то происходит. Я не знаю как что делается, это моя первая игра в 3d. Как реализована такая геометрия в gta, к примеру?
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 19.04.2012, 23:41   #8
DCxDemo
Пользователь
 
Регистрация: 16.04.2012
Сообщений: 17
По умолчанию

в гта вместо кубов в основном используются сферы, что занимает меньше места, но принцип тот же. для всей модели мира просчитывается модель столкновений.
направление тебе дали верное. копай aabb не ошибёшься.

**
вот вдобавок
http://programmersforum.ru/showthread.php?t=116198

Последний раз редактировалось DCxDemo; 20.04.2012 в 00:32.
DCxDemo вне форума Ответить с цитированием
Старый 20.04.2012, 08:29   #9
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

ОК, понял что кучу строк похожих друг на друга прийдется писать.
Но как обработать столкновения прямоугольника под наклоном. Самый выраженный пример- лестница. Как она реализовывается? Ведь мне прийдеться не только обнаружить столкновение (кстати, как здесь то это сделать, ведь элипсы и кубы не подойдут), но и сделать так чтоб человек по ней поднимался. Надо найти значение Y при известных X и Z, если я все правильно понял. Как расчитать эти координаты?
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 20.04.2012, 18:48   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от vovken1997 Посмотреть сообщение
А как быть если у меня порядка 100 кубов разной формы будет? Мне что столкновение персоонажа с каждым из них проверять?
Да.
Проверка столкновения одного персонажа с 100 объектов - всего порядка 100 проверок - совершенно обыденное дело.
Если нужно проверять не только персонажа, а каждый куб с каждым (ну, или персонажей 100) - немного хуже - порядка 10000 проверок, но тоже пока терпимо, а вот если объектов 1000 и каждого с каждым...
В этом случае нужно принимать дополнительные меры для сокращения объема вычислений. Например, разбиением пространства на отдельные объемы.
Цитата:
Можно как нибудь написать функцию, которая будет срабатывать на каждой прорисовке сцены и динамически проверять столкновение персоонажа с остальными кубами? Тоесть один раз эту функцию написать, а дальше прорисовывать сцену и функция будет сама определять где и с чем столкнулся герой.
Ну, писать процедуру, функцию или линейный участок кода - суть дела не меняется.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать элементарную браузерную текстовую игру Canku Фриланс 1 03.02.2011 15:14
Обязательно ли сдавать физику для того чтобы поступить на программиста? Xesus18 Свободное общение 16 28.01.2011 08:10
Прошу написать элементарную программу santyc Фриланс 18 08.07.2009 00:30
Помогите решить элементарную задачу на паскале Kreed Помощь студентам 1 02.10.2007 07:34