Эксперименты с физикой. Часть 3.
Запись от Волгоградец размещена 06.04.2010 в 23:17
Продолжаем... В прошлый раз мы создали небольшой физический фрэймворк и я обещал показать, что можно с его помощью сделать. Но прежде добавим еще один класс. На данный момент у нас есть класс пружины AnchoredSpring, которая принимает в качестве параметра только одну частицу. Другой конец у нее закреплен. Сейчас создадим Spring - пружина, на обоих концах которой по частице. Здесь есть небольшая тонкость - т.к. в нашем движке считается, что сила действует на частицу как бы изолированно - т.е. не зависит от каких-то других частиц, мы определили интерфейс с методом applyForce, который принимает в качестве параметра одну частицу. Любая сила реализует этот интерфейс. Но новый класс Spring должен учитывать две частицы. Их мы будем передавать в конструкторе, а в applyForce будем передавать null на каждом шаге. В остальном реализация аналогична AnchoredSpring - на каждую из двух частиц действуют одинаковые силы но направленные в разные стороны. Все, класс готов. Найдем ему применение.
Для начала реализуем камеру, которая должна следовать за кем-то или чем-то. Пускай она следует за мышью (здесь я размер экрана сделал маленьким - и передвигаю якобы сам экран. На самом деле двигаться должен фон). Реализация проста - к мыши крепим AnchoredSpring на другом конце которой - наша камера. Небольшие настройки жесткости, сопротивления и вот что получилось.
Camera.swf
Теперь попробуем создать веревку. Пружинами Spring соединяем частицы друг с другом. И вот что имеем.
Rope.swf
Да уж - на веревку не очень похоже - скорее на эластичную резинку. Это одно из ограничений движка - на данный момент наша пружина может сжиматься до нуля и растягиваться до бесконечности. Поэтому наша веревка растягивается до неприличных размеров. Можно поиграть с жесткостью пружины - но здесь есть опасность переусердствовать и вывести пружину из равновесия. Есть другой вариант решения - добавить ограничения на сжатие и растяжение - так называемые Constraints. Об этом подробно в следующем уроке.
Напоследок создадим ткань. здесь для достижения нужного эффекта нужны особые соединения между частицами. На картинке показаны необходимые связи.
И вот что получилось
Cloth.swf
В следующий раз, как я уже отмечал, поговорим о Constraints. И создадим более прадоподобную веревку, простой рэгдолл и невероятно реалистичную цепь.
tutorial3.zip
Всего комментариев 8
Комментарии
07.04.2010 09:15 | |
Отлично! Будем ждать продолжения =)
|
07.04.2010 14:45 | |
Супер, Вогоградец) только причем здесь камера?
|
07.04.2010 15:03 | |
А чем не камера? Только представь что она стоит на месте, а движется фон (как я и описал выше).
|
08.04.2010 00:15 | |
Да это то понятно. Просто я думал что это будет как то связано с тем, что будет по тексту ниже =)
|
08.04.2010 02:23 | |
Что читаете?
|
08.04.2010 09:38 | |
в Rope.swf к мышке привязан 2 сверху узел, а не первый.
А так - очень здорово! Поставь фпс-мерялку на примеры. |
08.04.2010 11:31 | |
MrPoma, читаю блоги в основном, статьи. Можно на "ты", не такой уж я и старый.
Котяра, учту. Может посоветуешь библиотеку для измерения фпс/памяти? |
09.04.2010 10:59 | |
Последние записи от Волгоградец
- Изометрическая сортировка. Новый подход. (25.01.2013)
- Stage3D заметки (06.04.2012)
- Embed клипа с одним кадром. (16.01.2012)
- Производительность операций с floating point number (18.03.2011)
- FTE based text controls (10.01.2011)