Народ, подскажите как можно сделать веревку для соединения объектов в 2D Физ. движке. Очень надо!
А вот мне интересно - работа всё ещё идёт? (:
Mortem
Если вопрос ко мне, то она уже подошла к концу :) Игра на этом движке:
Gregory_krovosos
Ага, а как там на счёт отдельного релиза 2D-движка?
Mortem
Пока не планируется, а смысл? Я посмотрел - есть бесплатные не хуже моего...
Э... Я может не так выразился... Я имел в виду конечно же движок 2D-физики.
Если ты об этом же - линками не поделишься? (:
Я вот думаю что негоже такой хорошей физике пропадать зазря... (:
Mortem
поищу ссылку, так не помню...
Действительно классная демка физического движка. Третий день балуюсь =). Решил сам сделать физику.
Почитал "Двумерный движок физики многоугольников и окружностей" и понял все до пятой главы.
А дальше я не понял что такое "нормаль контакта удара". Я так понял, что ее надо определять во время определения
точки пересечения двух тел. Но как? Подскажите пожалуйста.
IvanSem
Нормаль контакта это, строго говоря, нормаль к периметру одного из тел в точке контакта. Например, нормаль середины стороны квадрата есть перпендикуляр к стороне, а нормаль окружности в любой ее точки есть нормализованный вектор из центра окружности в точку контакта.
Смысл нормали в следующем. При контакте тела "расталкиваются" по нормали контакта. Импульс прикладывается по нормали к точке контакта тела.Самое неприятное в данной ситуации - "неправильная" нормаль, то есть нормаль, при которой тела будут "залезать", а не "расходится". Если неаккуратно считать нормаль, то она вместо расталкивания тел будет, наоборот, их сближать и возникнет 1) притягивание тел 2) залезание тел друг в друга.
ИМХО, быстрое нахождение точки контакта, нормали и расстояния взаимопроникновения и есть ноу-хау и суть движка, остальное более-менее просто.
Большое спасибо! Давно на форумах не видел людей которые так терпеливо отвечают на столько вопросов.
Люди вот без рене курта как считать (алгоритм верлее) использует старое ускорение.
vector3 An;
LPParticl part;
for(int i =0 ;i<m_pMeshOfCels->conteiner->number_particls;i++)
{
part = *(m_pMeshOfCels->conteiner->particls+i);
An.x = part->acceleration.x;
An.y = part->acceleration.y;
An.z = part->acceleration.z;
part->acceleration.x = (part->forse.x/part->mass);
part->acceleration.y = (part->forse.y/part->mass);
part->acceleration.z = (part->forse.z/part->mass);
part->velocity.x += 0.5*(An.x + part->acceleration.x) * time_step;
part->velocity.y += 0.5*(An.y + part->acceleration.y) * time_step;
part->velocity.z += 0.5*(An.z + part->acceleration.z) * time_step;
part->position.x += (part->velocity.x + 0.5*An.x*time_step) * time_step;
part->position.y += (part->velocity.y + 0.5*An.y*time_step) * time_step;
part->position.z += (part->velocity.z + 0.5*An.z*time_step) * time_step;
}
...обладает более высоким порядком по времени чем s = vx*dt+(adt^2)/2
Это единственный проект, который меня сильно заинтересовал. Я втянулся в него с головой. Но метод, описываемый в статье мне абсолютно не знаком. Я увлекаюсь физикой, а точнее механикой, хотя дается это все нелегко.
Грэгори, ты ведь сам эти формулы выводил? Если так, то какой литературои ты пользовался. Как было отмечено ранее, эти методы не объясняются в школе, даже в институте их не изучают так углубленно. Где можно об этом почитать, на более или мене доступном пониманию языке?
P.S. Сейчас скачал демку... Поиграю =))
Aknot
Нет, не сам ) Школьная механика, увы, отдыхает. Не знаю, кто вывел идею с импульсами, вполне возможно она не совсем корректна.
Gregory_krovosos
Месяц назад тоже начал заниматься физ. движком. Реализация отличается от твоей, но метод тот же: нормаль контакта, глубина взаимопроникновения => импульс => изменение скорости тел. Только вот тела всё время подрагивают вместо того, чтобы покоиться на плоскости. Может подскажешь, как решить проблемму?
Тема в архиве.