Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Contact information

Contact information

Поделиться
HotwireПостоялецwww16 сен. 201718:25#0
Доброго дня!

Пытаюсь разобраться с нахождением контактной информации. И то, что нашел в сети не очень радует

Сталкиваю два тела A и B, для которых известны Support функции. Далее оперирую с разностью Минковского:

1) Узнаю находится ли начало внутри получившейся фигуры A-B
2) Нахожу кратчайшее расстояние от начала до границы A-B и по пути узнаю нормаль  n для Suppot функции, которая и дает то самое кратчайшее расстояние.

Утверждается, что найденное кратчайшее расстояние есть глубина проникновения, а n — нормаль столкновения. С этим нет никаких вопросов, выкручиваемся, как можем.

Далее говорится, что точки "удара" для A и B можно найти как Support(A,n) и Support(B,-n) соответственно. А вот тут уже уйма вопросов...

Допустим для двух кубов(А и В) реализовалось столкновение грань-вершина (A--грань, B-вершина). Порисовав немного картинки становится ясно, что нормалью столкновения будет нормаль к грани, о которую ударили. Но вот Support(A,n) выдаст, что куб A ударили в вершину...

Каким образом получают правильную точку "удара"?

SuslikМодераторwww17 сен. 20174:52#1
в общем случае одной точки контакта недостаточно для стабильной физики. нужно строить contact manifold, по чему в сети удивительно мало информации, т.к. каждый делает как умеет.

Hotwire
> Допустим для двух кубов(А и В) реализовалось столкновение грань-вершина
> (A--грань, B-вершина). Порисовав немного картинки становится ясно, что нормалью
> столкновения будет нормаль к грани, о которую ударили. Но вот Support(A,n)
> выдаст, что куб A ударили в вершину...
нормалью столкновения будет, очевидно, будет n — это одновременно и ось наименьшего проникновения и нормаль к грани.

Правка: 17 сен. 2017 4:52

HotwireПостоялецwww17 сен. 201713:24#2
Suslik
> нормалью столкновения будет, очевидно, будет n — это одновременно и ось
> наименьшего проникновения и нормаль к грани.
Именно это я вроде бы и написал)

Прочел твою статью про Contact Manifold (2012 года), занятный алгоритм, но если сталкивать, например, две километровые трубы боковыми поверхностями, то реалистичной физики там не жди.

Спасибо за ответ, теперь хоть знаю текущее состояние дел)

SuslikМодераторwww17 сен. 201713:52#3
Hotwire
> Прочел твою статью про Contact Manifold (2012 года), занятный алгоритм, но если
> сталкивать, например, две километровые трубы боковыми поверхностями, то
> реалистичной физики там не жди.
с подобными случаями на самом деле ни один алгоритм нормально не справляется, ну то есть вообще. дело даже не столько в collision detection, а в том, что нарушается time coherence. если я правильно понял, какой ты случай описываешь. вообще тот алгоритм, который я описывал, после доработок уже много лет применял в разных проектах, особых проблем не было.
HotwireПостоялецwww17 сен. 201714:21#4
Я имел ввиду, что даже понаходив support'ы в некотором конусе - это все равно будут точки на торцах каждой трубы, которые в общем случае к реальной локации контакта могут не иметь никакого отношения.

Понятно, что вся проблема заключается в вырожденности некоторых точек относительно Support функции. А что если снять это вырождение, сделав, все плоские фигуры слегка пузатыми? Понимаю, что я далеко не первый кто это предложил, просто вдруг кто-то уже реализовал это и известны результаты

SuslikМодераторwww17 сен. 201716:49#5
Hotwire
> Я имел ввиду, что даже понаходив support'ы в некотором конусе - это все равно
> будут точки на торцах каждой трубы, которые в общем случае к реальной локации
> контакта могут не иметь никакого отношения.
>
нет, это неверно. конус будут образовывать нормали контактных площадок, то есть сами контактные площадки будут длиной с сами трубы.

Hotwire
> А что если снять это вырождение, сделав, все плоские фигуры слегка пузатыми?
> Понимаю, что я далеко не первый кто это предложил, просто вдруг кто-то уже
> реализовал это и известны результаты
тогда можно сразу забыть об устойивом стекинге тех же боксов, они будут друг на друге постоянно немного перекатываться.

/ Форум / Программирование игр / Физика

2001—2017 © GameDev.ru — Разработка игр