Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Помогите написать физический движок :) (26 стр)

Помогите написать физический движок :) (26 стр)

Страницы: 125 26 27 2830 Следующая »
SuslikМодераторwww4 окт. 201814:10#375
}:+()___ [Smile]
локальный минимум в случае с малыми пересечениями всегда будет совпадать с глобальным, если в качестве начального приближения взять разницу двух точек, гарантированно лежащих внутри геометрий. а в случае с большими пересечениями всё равно. все алгоритмы вроде minkowsky portal refinement ищут локальный минимум и основная проблема не в этом. основная проблема обычно в численных неустойчивостях в неудобных случаях.

vindast
> gjk-epa (я чуть-чуть про него почитал) начинается с симплекса, которым
> закончился gjk, и должен вернуть область пересечения - контактную площадку.
почитай ещё

vindastПостоялецwww4 окт. 201814:16#376
Suslik
> почитай ещё
Если есть годная статья на тему, то буду благодарен, если скинете. Я вот нашел это:
http://www.dyn4j.org/2010/05/epa-expanding-polytope-algorithm/#epa-top
Там как раз пишут про то, что нужен симплекс с которым gjk закончился. (Там двумерный случай).

SuslikМодераторwww4 окт. 201814:21#377
gjk-epa возвращает не контактную площадку, а minimal translation distance
vindastПостоялецwww4 окт. 201815:48#378
Suslik
А как генерить контактную площадку?
Чем дальше в лес тем больше дров. Подзадача с минимальной выпуклой оболочкой - отдельная песня. Много алгоритмов, какой выбрать не ясно.
SuslikМодераторwww4 окт. 201815:56#379
vindast
> А как генерить контактную площадку?
ты, наверное, даже ещё не представляешь, какая это эпопея

я делаю так: https://gamedev.ru/code/articles/convex_collisions

Правка: 4 окт. 2018 15:57

vindastПостоялецwww4 окт. 201816:10#380
Suslik, я читал ту статью, там 2d clipping самая сложная часть, ничего кроме как попарно проверять ребра на пересечение и проверять каждую точку каждого н-угольника на попадание во второй не придумал.

Я похоже совсем запутался. gjk последняя в нем ближняя к нулю точка (v(i + 1) у Вас) это и есть ось проникновения. Да?

И Ваша версия gjk сильно отличается от всего, что я наблюдал.

Правка: 4 окт. 2018 16:14

SuslikМодераторwww4 окт. 201816:32#381
vindast
> Suslik, я читал ту статью, там 2d clipping самая сложная часть, ничего кроме
> как попарно проверять ребра на пересечение и проверять каждую точку каждого
> н-угольника на попадание во второй не придумал.
каждый н-угольник можно считать выпуклым. поэтому пересечение их можно найти за O(n). к тому же n — параметр алгоритма и сложности исходной геометрии не зависит.

vindast
> jk последняя в нем ближняя к нулю точка (v(i + 1) у Вас) это и есть ось
> проникновения. Да?
gjk вообще оси проникновения не умеет искать, так как не работает для пересекающихся геометрий. он ищет разделяющую ось. sgjk ищет ось проникновения.

nullptrПостоялецwww4 окт. 201817:22#382
vindast
Вот тут чувак очень хорошо объясняет принцип GJK - https://www.youtube.com/watch?v=Qupqu1xe7Io
vindastПостоялецwww4 окт. 201818:52#383
nullptr, я это видео сегодня смотреть начал как раз.
Там есть непонятные моменты (ввиду плохого знания английского).
В пункте, где он рассматривает отрезок AB, есть условие If AB, он имеет в виду что dot(B - A, origin - A) > 0.0?
А в пункте где, рассматривается треугольник, есть if(ABC x AC) имеется в виду что ABC это нормаль треугольника?
И соответственно dot(cross(normalABC, C - A), origin - A)  > 0.0?

Правка: 4 окт. 2018 19:00

nullptrПостоялецwww4 окт. 201820:05#384
vindast
В пункте, где он рассматривает отрезок AB, есть условие If AB, он имеет в виду что dot(B - A, origin - A) > 0.0?

Да, If AB это проверка, в том же ли направлении вектор АВ, что и вектор на начало координат. Он об этом и начинает рассказывать на 23:35.
А в пункте где, рассматривается треугольник, есть if(ABC x AC) имеется в виду что ABC это нормаль треугольника?
И соответственно dot(cross(normalABC, C - A), origin - A)  > 0.0?

Да.

Там у видоса субтитры есть..

vindastПостоялецwww4 окт. 201823:24#385
nullptr, есть еще вопрос. А что делать когда получается тетраэдр? На сколько я понял, он будет конечным симплексом.
Нужно лишь проверить принадлежит ему начало координат и все?
nullptrПостоялецwww5 окт. 20180:30#386
vindast, да, если начало координат находится внутри тетраэдра, то значит геометрии пересекаются и дальше этот симплекс подаем на вход в EPA, к примеру.
Если же симплекс не содержит нули, то упрощаешь его до треугольника или ребра и идешь на новый виток, пока, либо какого-то лимита не достигнешь, либо не опишешь нули тетраэдром.
vindastПостоялецwww5 окт. 20180:47#387
Заряжу сразу еще пачку вопросов.

Получается что будет в тетраэдре новая вершина А, и соответственно три старые B, C, D. По логике есть шесть потенциальных направлений поиска.
Нормали треугольников ABC, ACD, ADB и нормали к ребрам AB, AC, AD? Правильно рассуждаю? Есть подозрение что вершину D можно отбросить. Или нет? (симплекс становится треугольником для первого и отрезком для второго случая).

Принадлежность нуля симплексу нужно искать только для тетраэдра или и для треугольника и для отрезка? ( то есть для всего)

nullptrПостоялецwww5 окт. 20181:49#388
>Есть подозрение что вершину D можно отбросить.
Почему? Насколько я понимаю, нам не нужно искать ниже основания тетраэдра и выше его вершины в точке А.
Если ноль лежит на отрезке или на треугольнике, то вроде как получается, что геометрии не пересекаются, а лишь касаются друг друга.. хотя не уверен..
+ Показать
nullptrПостоялецwww5 окт. 20184:02#389
>Если ноль лежит на отрезке или на треугольнике, то вроде как получается, что геометрии не пересекаются, а лишь касаются друг друга.. хотя не уверен..
Не, что-то я какую-то чушь написал..
Это если одна из опорных точек лежит в нуле, то значит геометрии касаются..
Если ноль лежит на отрезке, то получается, что нам нужно кросс продукт брать не с вектором АО, а с каким-то другим, чтобы нормаль получить.. Но в таком случае получается, если мы построим треугольник, то опять таки ноль будет и отрезку принадлежать и треугольнику.. если дальше от треугольника строить тетраэдр (в какую сторону?), то получается, что ноль будет на поверхности тетраэдра - значит есть пересечение!?.. если брать ребро от треугольника, то дальше тоже самое получается..
Страницы: 125 26 27 2830 Следующая »

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

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