|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.04.2012, 22:44 | #1 |
Дружелюбный
Форумчанин
Регистрация: 23.02.2012
Сообщений: 692
|
Как создать в простеньком 3d шутере элементарную физику.
Всем привет!!!
Решил написать свой простенький 3d шутер. Камера работает, но с глюками, исправлю. Есть несколько комнат соединенных коридорчиками. Сам вопрос в том как сделать так что-бы человек не проходил сквозь стены, поднимался и спускался по лестницам(наклонные плоскости), прыгал и приземлялся на землю по законам притяжения, запрыгивал на ящики? P.S. делаю на Delphi 7 + OPENGL. -==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
|
19.04.2012, 14:02 | #2 |
Форумчанин
Регистрация: 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 у меня уже делают проверку, но руки пока не доходят дальше это дело развить. |
19.04.2012, 20:53 | #3 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
К физике это никакого отношения не имеет - сплошная геометрия.
Как справедливо отмечено, ключевое слово collision detection - по нему и гуглить. |
19.04.2012, 21:58 | #4 |
Дружелюбный
Форумчанин
Регистрация: 23.02.2012
Сообщений: 692
|
Тоесть, если я всё правильно понял это простая геометрия?
А как быть если у меня порядка 100 кубов разной формы будет? Мне что столкновение персоонажа с каждым из них проверять? Можно как нибудь написать функцию, которая будет срабатывать на каждой прорисовке сцены и динамически проверять столкновение персоонажа с остальными кубами? Тоесть один раз эту функцию написать, а дальше прорисовывать сцену и функция будет сама определять где и с чем столкнулся герой. -==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
|
19.04.2012, 22:24 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а вы собирались к каждому кубу писать отдельный код?
(типа проверяем куб1, проверяем куб2) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
19.04.2012, 22:38 | #6 |
Дружелюбный
Форумчанин
Регистрация: 23.02.2012
Сообщений: 692
|
Как бы нет. Эти кубы либо земля, либо какая-то возвышенность либо ящик.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
|
19.04.2012, 23:30 | #7 |
Дружелюбный
Форумчанин
Регистрация: 23.02.2012
Сообщений: 692
|
Я думал, что в игрушках обрабатывается место нахождения героя и проверяется, находится ли в его области (кубе) посторонние элементы, если да, то что-то происходит. Я не знаю как что делается, это моя первая игра в 3d. Как реализована такая геометрия в gta, к примеру?
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
|
19.04.2012, 23:41 | #8 |
Пользователь
Регистрация: 16.04.2012
Сообщений: 17
|
в гта вместо кубов в основном используются сферы, что занимает меньше места, но принцип тот же. для всей модели мира просчитывается модель столкновений.
направление тебе дали верное. копай aabb не ошибёшься. ** вот вдобавок http://programmersforum.ru/showthread.php?t=116198 Последний раз редактировалось DCxDemo; 20.04.2012 в 00:32. |
20.04.2012, 08:29 | #9 |
Дружелюбный
Форумчанин
Регистрация: 23.02.2012
Сообщений: 692
|
ОК, понял что кучу строк похожих друг на друга прийдется писать.
Но как обработать столкновения прямоугольника под наклоном. Самый выраженный пример- лестница. Как она реализовывается? Ведь мне прийдеться не только обнаружить столкновение (кстати, как здесь то это сделать, ведь элипсы и кубы не подойдут), но и сделать так чтоб человек по ней поднимался. Надо найти значение Y при известных X и Z, если я все правильно понял. Как расчитать эти координаты? -==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
|
20.04.2012, 18:48 | #10 | ||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Проверка столкновения одного персонажа с 100 объектов - всего порядка 100 проверок - совершенно обыденное дело. Если нужно проверять не только персонажа, а каждый куб с каждым (ну, или персонажей 100) - немного хуже - порядка 10000 проверок, но тоже пока терпимо, а вот если объектов 1000 и каждого с каждым... В этом случае нужно принимать дополнительные меры для сокращения объема вычислений. Например, разбиением пространства на отдельные объемы. Цитата:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать элементарную браузерную текстовую игру | 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 |