![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: нет Всего: 5 |
Доброго времени суток
предположим, пишу 3д-приложение. Кто-нибудь знает самый-самый хороший алгоритм взаимодействия с окружающим миром (управляемый юзверем чудик должен натыкаться на стены, взбираться по холмам, натыкаться на предметы и т.д.). Заранее прошу прощения у модераторов - хотел было запихнуть в "С++ Мультимдеа", но тут более к месту... наверное. Пока у меня все примитивно - холмов нет ваообще, а стенки все прямые. Сохранил координаты всех углов и общим уравнением прямой проверяю расстояние игрока до стены(от точки игрока отходит прямая, вторая ее точка расположена на линии взгляда и вот уже вторая прямая). Но это не универсальный алгоритм. Подскажите, а... --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Модератор: тема перемещена из раздела "Алгоритмы"
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Если у тебя просто ящик, в котором находится игрок - тут всё просто. Но если стенок много (лабиринт, типа), нужно определять в каком коридоре находится игрок и действовать соответственно. Конкретный исходник ты сможешь написать сам, скорее всего никто тебе его не напишет.
З.Ы. для более сложных случаев взаимодействия, есть физические библиотеки. Их много, есть бесплатные: Newton, Tokamak, ODE. -------------------- ![]() |
|||
|
||||
CD20 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.8.2005 Репутация: нет Всего: 1 |
Для начала нужно разбивать уровень на блоки и обрабатывать физические взаимодействия с игроком в том блоке, где он находится. Для простых взаимодействий(например: подобрать предмет или упереться в предмет) лучше использовать алгоритмы с BoundingBox'ом. Вообщем - то все взаимодействия можно так обрабатывать, но если тебе нужно например полигональное попадание, то тут малость сложнее: придётся обрабатывать ещё и полигоны моделей, после того, как зафиксировано их взаимодействие BoundingBox'ами.
|
|||
|
||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
есть что то полезное в Директ Х 9 СДК - в примерах , там есть пример проверки выбора треугольника из модели мышкой ... посмотри по моему там всё что нужно ...
|
|||
|
||||
DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
А можете поподробнее, насчет BoundingBoxов и если можно с примером на Delphi и OpenGL...
![]() |
|||
|
||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
О чёрт , перепутал тему ! извините ... хотя этот пример с выбором полигона в ДХ СДК, всё равно интересен и с точки зрения проверки столкновений ...
ещё читал про отсечение невидимых полигонов методом БСП (бинари спэйс партишнг ) там что то было сказано про то , что этот алгоритм не только отсекает нивидимые полигоны , облегчая жизнь видеокарте но и каким то магическим образом помогает при проверке столкновений , если кто знает объясните может принцип действия ? |
|||
|
||||
Batou |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 7.4.2005 Репутация: нет Всего: 5 |
Если мир разложен по BSP, получается меньше проверок на столкновение. Сама проверка происходит по тем же алгоритмам.
--------------------
.GitS.Мысли творят действительность , а бремя доказательства лежит на сомневающемся. |
|||
|
||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
ааа ! понял !
но как я понял мир один раз разкладывается на дерево , во время инициализации ? если да то мир поменяется и дерево заново строить надо ? |
|||
|
||||
Batou |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 7.4.2005 Репутация: нет Всего: 5 |
Насколько я знаю дерево строится один раз, при компиляции карты (в редакторе карт). В процессе игры дерево не перестраивается.
--------------------
.GitS.Мысли творят действительность , а бремя доказательства лежит на сомневающемся. |
|||
|
||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
ну это если карта не меняется (халф лайф , дум 3 и т.п. хлам ) , сейчас вообще модно всё делать красиво и без вкуса , а если как в Red Faction ? там же карта перестраивается сама ( ну ладно при помощи встроенного редактора - игрока с динамитом ) там же всё меняется - кол-во и положение полигонов относительно друг друга , в таком случае дерево не может быть статичным , или я не прав ?
|
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Никто не засталяет строить дерево для абсолютно всех объектов в сцене.
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Т.е. мы можем разбить свою игровую модель на статичное окружение (карта и т.п.) и на динамические объекты (модельки игроков, снарядов, бочек, кирпичей и т.п.). Сие есть классическая BSP-реализация игровой карты. -------------------- ![]() |
|||
|
||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
т.е если на карте ничего нет статичного то и дерево не построить , как же тогда поступили ребята , Red faction , делавшие ? есть ещё какие то способы ?
|
|||
|
||||
Dmil |
|
|||
Unregistered |
можно еще в этой теме вопрос задать - новую не хочется создавать?
тоже не могу понять основ взаимодействия, а хочется. могу привести для примера игру Rally pro contest на сайте mophun.com там машина едет по дороге и может заезжать на обочины, при этой ее, естественно, наклоняет. вопрос: как понять что машина движется по трассе а не по обочине? машина наклоняется в соответствии с наклоном трассы. а как это делается? в 3d движке нет больших возможностей, в основном, простой обсчет матриц. может кто-нибудь по простому объяснить? заранее спасибо! |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Сделали BSP-уровень с "выемками", которые заполнили "разрушаемыми" затычками - в виде колонн, отдельных стенок, камней; бОльшая часть уровня - статична.
Делается ray scene query - по двум известным координатам (X;Y) вычисляется координата Z, являющаяся пересечением вертикальной линии с плоскостью трассы. Этим мы получаем положение каждого конкретного колеса, дальше остаётся только наклонить машину по законам физики ![]() -------------------- ![]() |
||||
|
|||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Если быть педентичным, то нужно еще сделать тест collision-detection с корпусом и предметами, которые могут быть между колесами. |
|||
|
||||
Dmil |
|
|||
Unregistered |
Пардон, а как узнать что этот кусок сетки - трасса, а не обочина?
и как узнать плоскость трассы? ведь исходно есть: 3d сетка - земля 3d сетка - машина часть сетки земли является трассой, которая имеет изгибы по вертикали и горизонтали. просто сам писал подобную вещь, но делал сам и движок отбражения сетки, поэтому знал откуда взять координаты. а если есть просто сетка и просто команда отобразить, как узнать-то все необходимые данные? или надо еще к сетке дополнительно таблицу иметь с описанием трассы? |
|||
|
||||
arilou |
|
||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
На полигоны обочины под колесом в текущий момент времени опускается перпендикуляр и машина наклоняется в соотв. с этим перпендикуляром. Вроде так.
На досуге зайдите на www.artificialstudios.com и посмотрите список фич. Или на http://www.ogre3d.org - чистый 3D движок. |
||||
|
|||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
хммм в Red faction рушится ВСЁ ! нет статичных "стен" ,есть очень мало неломаемых маленьких статичных объектов , необходимых для прохождения типа лифт , лестница и т.п. которые скорее не ломаются потому , что надо как то пройти игру , а так , весь уровень можно взорвать и наделать не выемок а новые проходы где хочешь , как хочешь и в любой конфигурации , как высчитывать коллизии(а также оптимизировать и срезать ненужные полигоны ) в таком случае ? есть какой то метод типа динамических деревьев или т.п. что можно будет изменять по ходу игрового процесса ?
|
|||
|
||||
mr.DUDA |
|
||||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Естественно
неправда. Уровень "офис" практически неразрушаемый, а на всех остальных ур-нях большинство стенок - статичные, чтобы не ломать игроку кайф от перегрузки процессора.
Есть физические движки, их много, но если хочется ВЕСЬ уровень сделать одним большим физическим телом - придётся много кэшировать, много упрощать, на многое забивать, и в итоге не получится никакого выигрыша по сравнению с подходом а-ля Red Faction. Пока что компы слишком слабые. Сомнения ? Посмотри самые сложные демки для любого физ. движка - какие тормоза при большом кол-ве одновременно обсчитываемых коллизий, не говоря уже о тормозах при наличии разрушаемых объектов. -------------------- ![]() |
||||||
|
|||||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
хорошо , давайте с самого начала ... как БСП дерево помогает при расчёте коллизий ?как его строить ?
|
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |