Физика для игрФорум

Collision Detection для геометрий, заданных SupportMapping'ом (комментарии) (4 стр)

Страницы: 13 4 5 68 Следующая »
#45
18:50, 7 ноя 2011

Ferlan
> тут тоже должен быть минус перед аргументом.
спасибо, не заметил

Ferlan
> Из этого получается, что угол между pdi и vi стремится к нулю, причем pd
> откладывается от O. Верно ли я понимаю, что из этого напрямую следует, что мы
> ищем такой v который проходит через центр координат O. Т.е. задача сводится к
> тому чтобы найти v проходящий через О, он и будет PD.
> Т.е, если r = CSO(v), то необходимо найти такой v, что r = kv, где k некоторое
> число.
> Можно просто решать задачу многомерной оптимизации (в случае 2D - одномерной,
> по углу) (v,cso(v)) / |cso(v)| -> max
да, именно так. вообще говоря, задача многомерной оптимизации формулируется даже проще |cso(v)| -> min, нужно найти самую близкую точку на cso к началу координат, соответствующий ей вектор v и будет DPD. просто специфика задачи в том, что локальный минимум обычно совпадает с глобальным + нужно по максимуму использовать временную когерентность, так как от шага к шагу по времени ситуация меняется несильно. предложенная мной схема именно этим и занимается, обычно PD находится за 1-2 итерации.

Ferlan
> Верно ли утверждение, что если произвольные три отбалды взятые v1, v2, v3 пересекаются в одной точке C, то в качестве PD достаточно взять вектор в направлении CO? Вроде нехилая оптимизация.
не совсем понял, что ты имеешь в виду. три прямые в трёхмерном случае вовсе не обязаны пересекаться в принципе. но ты, кажется, идёшь в направлении идеи portal refinement'а, когда в качестве PD берётся следующее значние: (cso(v1) + cso(v2) + cso(v3)) / 3 и при надобности уточняется, выкидыванием одной из начальных точек(v1, v2 или v3) повторением итерации до тех пор, пока три точки не стянутся достаточно близко друг к другу.

#46
10:40, 28 ноя 2011

Здравствуйте. по мере разбираний с алгоритмом появился вопрос. Как быть, если контакт фактический одной вершиной?(на рисунке будет понятнее). к какой именно точке прикладывать импульс?
geom | Collision Detection для геометрий, заданных SupportMapping'ом (комментарии)

#47
15:33, 28 ноя 2011

fysx
> Здравствуйте. по мере разбираний с алгоритмом появился вопрос. Как быть, если
> контакт фактический одной вершиной?(на рисунке будет понятнее). к какой именно
> точке прикладывать импульс?

из статьи:
2) Наклоним вектор axis на delta градусов против часовой стрелки, и возьмём в этом направлении саппорт пойнт нижнего бокса, обозначим её a1. Далее повернём тот же axis на ту же delta по часовой стрелке, вновь возьмём саппорт пойнт того же бокса и обозначим получившуюся точку b1. Далее инвертируем вектор axis, и, вновь поворачивая его ан угол delta, берём два саппорт пойнта верхнего бокса - a2 и b2. Может получиться так, что какие-то из этих точек совпадут - ничего страшного, это совершенно нормально.
для твоего случая, когда ты наклоняешь axis на delta вправо и влево, саппорт пойнты нижнего бокса совпадут, и вместо точек a1 и b1 ты получишь одну - a1. далее просто проецируешь эту точку на отрезок a2 b2(у тебя проекция обозначена как a1'), в качестве точки контакта выбираешь среднюю между a1 и a1', в качестве нормали - нормаль отрезка a2 b2.

#48
16:06, 28 ноя 2011

Suslik
Благодарю за разъяснение. Плюс я видимо неверно угол выбира, т.к. выбираются две точки. немного недопонял этот вопрос - он у меня генерится динамически. (в зависимости от ориентации объектов - это я ступил) правильно ли будет выбирать delta в зависимости от количества граней?

#49
16:29, 28 ноя 2011

fysx
> правильно ли будет выбирать delta в зависимости от количества граней?
нет. я выбираю всегда константным - таким образом, чтобы две точки, получающиеся на окружности, например, считались одной. то есть это угол около 10 градусов. этот угол соответствует углу, когда две грани можно считать параллельными, то есть если угол между столкнувшимися гранями меньше этого delta, то это столкнулись грани, если больше - столкнулась грань с вершиной.

#50
16:59, 28 ноя 2011

ok, спасибо за статью и разъяснения, буду пробовать.

#51
17:44, 28 ноя 2011

Извиняюсь за надоедливость, появился очередной вопрос - у меня получается в обеих геометриях по одной точке - как раз случай тот что на рисунке. точка а2 содержит в себе и b2, и a1 содержит b1. как в этом случае строить проекцию?

#52
17:56, 28 ноя 2011

fysx
> Извиняюсь за надоедливость, появился очередной вопрос - у меня получается в обеих геометриях по одной точке - как раз случай тот что на рисунке. точка а2 содержит в себе и b2, и a1 содержит b1. как в этом случае строить проекцию?
я проецирую обе получившиеся точки (a1 и a2) на плоскость, перпендикулярную направлению axis. если расстояние между проекциями меньше некоторого эпсилон, но считаем, что это - контакт типа точка-точка, берём точку контакта как среднее и axis как нормаль контакта. иначе контакт не добавляем.

кстати, на рисунке у тебя penetration vector(он же axis) - вертикальная прямая. то есть контакт типа вершина-ребро, а не вершина-вершина.

#53
21:00, 28 ноя 2011

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

#54
21:16, 28 ноя 2011

fysx
> про контакт точка-точчка я понимаю, у меня немного другая проблема - не
> получается контакта ребро - вершина. т.е. и у нижней, и у верхней геометрий оба
> саппорт-вектора сходятся к одной точке. но судя по рисунку, это косяк в
> нахождении самого вектора. хотя там вроде не должно быть проблем - все просто.
> завтра буду перепроверять все
да, если на рисунке вектор направлен не вертикально, это баг. ищи ошибку в его нахождении.

#55
12:00, 2 дек 2011

Добрый день.
Дошли руки, предыдущие проблемы с Вашей помощью я решил, точки находятся нормально. Но вот в таком случае они не находятся(что в приницпе понятно)
penetration depth sample | Collision Detection для геометрий, заданных SupportMapping'ом (комментарии)
как быть в этом случае?

#56
12:03, 2 дек 2011

fysx
не понял. в чём проблема? PD-вектор в данном случае также должен быть вертикальным. проецируем точки одного отрезка на другой, получаем две точки контакта, что не так?

#57
12:35, 2 дек 2011

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

но видимо это я не правильно понял, и контакт считается совершенным если есть любые две точки. буду править код

#58
15:17, 2 дек 2011

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

радует, что ещё кто-то по статье разобрался с алгоритмом, практически от и до

#59
14:03, 5 дек 2011

Suslik
> у двух отрезков по одной точке проецируются, итого в сумме две точки. стоит
> как-то переформулировать этот момент в тексте статьи?
думаю, что стоит, по крайней меря е до  этого допер только после того как задал вопрос)


Suslik
> радует, что ещё кто-то по статье разобрался с алгоритмом, практически от и до
из русскоязычных источников Ваш оказался практически единственным. нашел англоязычные статьи, но в них оказалось очень сложно разбираться. Я Ваш то алгоритм долго пытался понять)
у меня пока что не удалось полностью следовать этому алгоритму -  сначала ищу факт столкновения, потом из полученного направления путем вашего алгоритма получаю уточненное направление и потом уже PD вектор. вроде не тормозит, но проверяю на тегре, поэтому боюсь что будет фейк на более слабом процессоре). В общем спасибо за статью и помощь еще раз)

Страницы: 13 4 5 68 Следующая »
Физика для игрФорум

Тема в архиве.