![]() |
Пишу Ragdoll
Вложений: 1
Мечтаю написать Ragdoll... Прочитал много инфы, пока сделал вот такую штуку:
(использовал "интеграцию Верлета"). Есть кучка вопросов: 1. --- уже решён --- 2. Как сделать ограничение угла в суставе между двумя точками?.. 3. На конце верёвки болтается треугольник, образованный 3-мя точками. Его всё время клонит в сторону. Как добавить силу тяжести точкам, чтобы они висели ровно?.. Или как-то по-другому это дело решается... Код:
packageМетод "ptGrav" в классе "Particles" реализует "интеграцию Верлета". (код можно тупо вставить как документ-класс, и спкомпилить=)) Так же в зипе приложил этот же код в *.as файле. Всем спасибо за внимание! |
Попробуй так:
Код:
private function ptGrav(event:Event):voidСам не знаю почему, но эта штука мне понравилась :) |
Спасибо!=)) Первый вопрос решён... Сам не догадался, всё ж просто=)) (В коде первого поста поправил)
А как быть с угловыми ограничениями?.. Я слышал, вроде как это называется инверсной кинематикой... |
Можно задействовать 2-й метод и ввести ограничение на углы:
Код:
angle = Math.atan2(dy, dx);Хотя мне кажется это не то, т.к. углы будут не относительными |
с какой целью пишете? если для саморазвития, то ок, если же для создания проекта, где необходимо использовать ragdoll, то советую изпользовать бесплатные библиотеки...самая удачная (на мой взгляд) www.box2d.com
|
Для саморазвития, и для себя=) Бокс2Д крут, но я не хочу юзать чужие библиотеки... Объясните, плиз, про силу тяжести для частиц...
Я обновил исходник, если кто уже старый качал... |
Цитата:
|
Psycho Tiger, там для флэша тоже есть
|
Psycho Tiger, у Box2D есть AS3.0 port...
Ребяты! Плиз, не засоряйте эфир... Хочется всё-таки по теме что-нибудь услышать... |
Погугли статью Position based dynamics, там все есть.
А вообще рагдолы надо делать не Верлетом, а через LCP |
Ну.. Просвети пожалуйста, что такое LCP...=) Статья на английском... Это конечно не критично, но требует в несколько раз больше времени для освоения=(
|
Ну есть два подхода, первый элементарный и неточный это Верлетовский (position based). Второй намного точнее и использующийся во всех нормальных движках (например в box2d) это - импульсный подход. Там как раз вылезает LCP задача - Это когда надо найти такие x и y, что Ax+b=y при условии что x*y=0 , x>=0 y>=0. Про это написано например в статьях Michael Cline'а или Миртича, еще на gamedev в сообществах много написано.
|
вот интересная реализация рагдол... ) http://www.salex.ru/fun/falling-girl.php
|
можно вечно смотреть на три вещи:огонь, воду и падающую девушку ))
|
В движке Хитмана использовалось интегрирование Верлета для одежды и падающих трупов.. Неточность компенсирует быстродействие=)
Господа! Ну ответьте пожалуйста на вопрос про треугольник... Очень надо... Я ж знаю, кто-то точно в курсе=) |
Цитата:
Ждите ответа молча. |
Crash512
1) У вас не правильное разрешение ограничений. Нужно двигать обе точки, а не одну из них. На сом деле вам нужно два типа связей первый тип- это связь мышки с партиклом(то что у вас написано именно тот случай), а второй тип - связь партикла с партиклом - там как раз надо обе двигать на 0.5*dp (в случае равных масс). 2)У вас неверная структура "движка". Все внешние силы (например сила тяжести) должны применяться строго до разрешения ограничений в одной и той же функции. Так же разрешение ограничений делается не 1ой итерацией как у вас а несколькими ( в этом и есть основная фишка данного подхода - все быстро сойдется). 3)Нельзя использовать для расчетов x и y координаты спрайта, лучше завести отдельные переменные, а после каждого шага интегрирования приравнивать их. Вобщем я бы советовал все же прочесть ту статью, и заново все переписать:) |
Спасибо за ответ!=)
Т.е. мне надо проводить интеграцию Верлета не для каждой частицы отдельно, а допустим, загнать все частицы в массив, и использовать цикл с перебором его элементов? При этом, на время разрешения ограничений надо прекращать этот цикл?.. |
Вот обновочка... Учёл все замечания. Треугольник выровнялся, но всю верёвку немного клонит влево... Не могу понять, почему..=(
Код:
package |
Да, добавь переменные xx,yy в класс Particle и все расчёты веди в них, а потом сливай в x и y - все проблемы пропадут!
Добавлено через 19 минут Вот, это работает: Код AS3:
|
Спасибо за ответ=) Странно... У меня весь этот "рэгдолл" теперь непрерывно вращается по часовой стрелке... Код скопировал полностью=)
|
Вот, даже сделал всё с классами) теперь все joint'ы в одном месте:
Код AS3:
Добавлено через 1 минуту Цитата:
Добавлено через 3 минуты ну ещё я ведь добавил время... а вообще спасибо тебе) прочитал статейку про верлета, лень было самому всё писать, а тут бац почти всё готово) |
Блин.. Всё равно вращается=)) Что я не так делаю?.. Можешь прислать исходник, если у тебя всё нормально?
|
я ж говорю, у тя было:
Код AS3:
Код AS3:
кстати, что значит 1.1 тут: Код AS3:
Сделал "слабые связи" всмысле как верёвка, а не палка постоянной длины: Код AS3:
|
Код AS3:
|
Сделал проверку на нулевую длину для связей:
Код AS3:
Вопрос ко всем, а как реализовать трение о поверхность(границы нашего квадрата). Как я понимаю, если частица "проникла" в другой объект, то надо добавить силу трения, направленную в противоположную сторону скорости.. но как это сделать? Есть ли у кого хорошие статейки по теме? |
Трение реализовал) но с WeakJoint связями возникают какие-то баги. Верёвка начинает сама шевелиться!
Код AS3:
|
Много сделано, но есть проблемы
Вложений: 2
Большинство багов исправил, сделал настройки всякие) прикрепляю 1-ый файл - "хорошая" версия.
Во втором файле проблемы.. когда ставлю жёсткие Joint'ы, то вся конструкция начинает вращаться. Кто знает решение и причину проблемы, поделитесь.. |
О... а можешь мне исходник выслать?.. Надо бы нам как-то скооперироваться, и довести это дело до конца. Мне вот нужны именно жёсткие связи=)
Я даже подумываю о том, что это пора в новую ветку выводить=)) В этой уже дофига кода, надо как-то всё в кучу собрать=) |
Вложений: 1
вот код
|
| Часовой пояс GMT +4, время: 14:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.