Воскресенье, 22.09.2024, 16:28
Приветствую Вас Гость | RSS
F.R.O.N.T.
Главная | Статьи | Регистрация | Вход
Меню сайта
Все новые статьи находяться на форуме!!! Видеть их могут только рарегистрированые пользователи...
Категории каталога
Мои статьи [28] Сценарии [0]
Пишите сюда свои сцинарии
Модострой [152]
Статьи по созданию модов
КАК СНЯТЬ ФИЛЬМ??? [0]
Статьи о том как снять фильмы
Мини-чат
Наш опрос
Какой мод лучше всего?
1. АМК 1.4
2. Другие
3. ЖЕСТЬ
4. Зона поражения 1-2
5. Прибой стори
6. Арсенал мод
7. Old good STALKER
8. АВС
9. Симбион
10. Addon To STALKER
11. СРП
12. New Level changer
13. АИ пак
14. CprHicks mod
15. Черноречье
Всего ответов: 110
Главная » Статьи » Мои статьи

Физика
Автор: Тимур Рузиев

Введение.

Наверняка все из вас видели в современных играх то, как ведут себя монстры (или любые другие живые существа игрового мира) при их убийстве. Они падают на пол, как совершенно обычные живые существа (вследствие полного расслабления всех мышц тела), а затем по-всякому валяются по полу (многие любители игр просто обожают с ними играться!). Многим это нравится! Действительно, а почему обычному человеку не должно нравиться очень реалистичное поведение трупов?!?!

Раньше (где-то лет десять тому назад) подобное казалось невозможным (естественно не хватало вычислительной мощности тогдашних персональных компьютеров) и все мы могли лишь мечтать об этом. В последние пять лет ситуация кардинально изменилась (во многом благодаря таким гигантам индустрии как AMD и Intel): теперь процессоры обычных настольных ПК очень неплохо справляются с такой задачей, как расчет динамики твёрдых тел.

В этой статье я планирую рассказать о том, как можно делать rag doll на основе современных физических движков. Напомню, что физический движок может быть как вашим (есть некоторые требования к нему), так и сторонним (Newton, ODE, Tokamak, Meqon, havok, NovodeX и т.д.). В статье я попытаюсь рассказать о том, как сделать это, не привязываясь к определённому физическому движку. В конце статьи будет дан пример того, как можно сделать это на физическом движке Tokamak.

Требования.

Если вы собираетесь использовать физический движок собственного производства, то он должен иметь следующие характеристики:
- иметь поддержку симуляции динамики твёрдых тел;
- иметь хорошие возможности по определению столкновений между геометриями твёрдых тел, а также просчитывать ответную реакцию тел на столкновения между собой (collision response);
- поддерживать такие ограничители движения (constraints) как шарнирное соединение (ball-socket joint) и петельное соединение (hinge joint);

В том случае если вы используете один из таких физических движков, как Newton, ODE, Tokamak, Meqon, havok или NovodeX, то проблем с ними возникнуть не должно — автор даёт 100% гарантию, что в этих физических движках есть всё необходимое для реализации rag doll’ов.

Системные требования: единственное что необходимо, так это то чтобы центральный процессор вашего персонального компьютера был не ниже по производительности, чем допустим процессор Intel Pentium III, с тактовой частотой примерно 1000-1200 мегагерц.

Начинаем.

Что же такое constraint’ы? Загляните в любой англо-русский словарь — constraint переводится как ограничение. Так на самом деле и есть: constraint’ы ограничивают движение тел в пространстве и взаимно между собой, исходя из определённых критериев. Типов constraint’ов имеется великое множество. Я не буду перечислять все, а скажу лишь то, что нам понадобятся всего два их типа: ball-socket joint и hinge joint.

1. Ball-socket joint.


По рисунку наглядно видно, что ball-socket joint есть не что иное, как шарнирное соединение двух тел. Особенность ball-socket joint’а состоит в том, что он ограничивает перемещение тел взаимно между собой, а также ограничивает то, как повернуты тела (вдоль всех трёх осей) относительно друг друга.

2. Hinge joint.


По рисунку мы наглядно видим, что hinge joint есть не что иное, как петельное соединение двух тел. Hinge joint очень похож на ball-socket joint, но разница состоит лишь в том, что теперь тела могут поворачиваться относительно друг друга вдоль только одной из осей.

Rag doll.

Словосочетание rag doll c английского переводится как тряпичная кукла, что очень точно соответствует истине.

Теперь я хочу рассказать, о том, как делается собственно сам rag doll. На самом деле rag doll есть не что иное, как обычная комбинация твёрдых тел различных форм (и конфигураций) и двух видов их соединений между собой.
Это очень легко объяснить на примере. Допустим туловище человека, у нас будет неким convex’ом (выпуклое тело), к нему в разных его точках мы будем присоединять другие элементы тела (твёрдые тела). В свою очередь к этим другим элементам твёрдого тела мы будем подсоединять уже следующие по иерархии части тела.

Пример: к туловищу присоединяем предплечье руки, а к предплечью руки присоединяем кисть руки, и так далее.
Какими типами joint’ов соединять, спросят многие. Я отвечу так: каждый решает сам, основываясь на личных предпочтениях о том, что выглядит реалистичней.
Вообще тема rag doll’ов очень тесно связана с темой скелетной анимации (в процессе убийства монстра, каждая кость его скелета конвертируется в подобную кость rag doll’а), поэтому для более глубокого понимания темы советую прочитать статьи по данной теме на этом сайте.

Надеюсь, основная идея ясна? Ну, если не ясно, то всё прояснится при разборе примера реализации.

Реализация rag doll’а на физическом движке Tokamak.


Для наглядности я решил не применять классы C++, а ограничиться простыми структурами. С той же целью был выбран физический движок Tokamak. Согласитесь, в маленьких примерах удобнее использовать уже готовые, высокоуровневые средства – Tokamak был написан на C++ и имеет свою собственную хорошую математическую библиотеку.

Для тех, кто не знаком с физическим движком Tokamak вообще, я советую почитать следующую статью:
http://www.gamedev.ru/articles/?id=70125

Те, кто желает скачать полную версию Tokamak SDK, могут посетить официальный сайт движка:
http://www.tokamakphysics.com

Я не хочу подробно разбирать каждую строку/структуру/функцию кода примера, да и не нужно это – в коде самого примера всё разложено по полочкам и очень хорошо прокомментировано. Думаю, что проблем с этим не возникнет ни у новичков, ни у более опытных программистов.





Категория: Мои статьи | Добавил: front (16.05.2008)
Просмотров: 722 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
счетчик посещенийсчетчик посещений
Друзья сайта
 
Фан сайт игры S.T.A.L.K.E.R.

Бар_У_границы_Зоны_бар_настоящего_сталкера!

Статистика

На портале: 5
Новичков: 5
Участников: 0

Copyright MyCorp © 2024