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

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

Страницы: 19 10 11 12 13 14 Следующая »
SuslikМодераторwww10 июня 201814:38#180
vindast
значит, очевидно, ты неправильно ищешь глубину.
vindastПостоялецwww10 июня 201814:38#181
Логика работы не нарушена, просто солвер не будет выталкивать цилиндр из треугольника.
vindastПостоялецwww10 июня 201814:39#182
Вот если минимальная ось совпадает с нормалью треугольника то глубина проникновения ноль, вот что с этим делать?
SuslikМодераторwww10 июня 201814:41#183
vindast
> Вот если минимальная ось совпадает с нормалью треугольника то глубина
> проникновения ноль, вот что с этим делать?
исправлять? я не знаю, откуда у тебя там ноль берётся, его там быть не должно хоть при нулевой проекции, хоть при ненулевой. ещё раз говорю, реши подзадачу из #177, и все вопросы отпадут.

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

Правка: 10 июня 2018 14:42

vindastПостоялецwww10 июня 201814:42#184
Suslik
> vindast
> аналогично, делений там нет. представь себе, что у тебя два одномерных отрезка
> : . для того, чтобы найти длину их пересечения, тебя не должно интересовать,
> вырождены ли они.
float min1, min2, max1, max2;
        triangle.axisProjection(axis[i], min1, max1);
        cylindr.axisProjection(axis[i], min2, max2);


        if (!(max2 >= min1 && max1 >= min2))
        {
          //cout << i << endl;
          collision = false;
          break;
        }
        else
        {

          float a = max(min1, min2);
          float b = min(max1, max2);

          float x = abs(b - a);

          if (x < minProj)
          {
            minProj = x;
            minAxis = axis[i];
          }

        }
vindastПостоялецwww10 июня 201814:44#185
Suslik
> напомню, что здесь под глубиной пересечения понимается не геометрическая длина
> их общей части, а минимальное расстояние, на которое надо отрезки раздвинуть,
> чтобы они перестали пересекаться.
ААААААААААААААА
Все, вот теперь я понял
vindastПостоялецwww12 июня 201812:01#186
Вот что получается.

vindastПостоялецwww12 июня 201812:02#187
Косячек есть когда цилиндр стоит на плоскости.
SuslikМодераторwww12 июня 201812:10#188
vindast
> Косячек есть когда цилиндр стоит на плоскости.
я не удивлён. именно из-за этого цилиндры почти никогда не используют.

мне не нравится твоё трение. рекомендую для разминки протестировать солвер на бесконечно большом коэффициенте трения, тела не должны никуда медленно съезжать даже на наклонных плоскостях. потом потестируй при коэффициенте трения, например, 1.0f. сделай наклонную плоскость под углом 44 градуса и ещё под 46. при коэффициенте трения 1, тела должны неограниченно долго держаться на 44 и соскальзывать с 46 градусов наклона.

Правка: 12 июня 2018 12:11

vindastПостоялецwww12 июня 201812:25#189
Suslik
> мне не нравится твоё трение
Трение на цилиндре шляпа, а на боксах (когда они по одиночке) хорошо работает.
Думаю это связано с тем что есть косяк в нахождении коллизий с плоскостью в случае когда он на ней стоит.

Suslik
> > Косячек есть когда цилиндр стоит на плоскости.
> я не удивлён. именно из-за этого цилиндры почти никогда не используют.
Что нибудь можно сделать?

Правка: 12 июня 2018 12:38

SuslikМодераторwww12 июня 201813:56#190
vindast
> Что нибудь можно сделать?
во, нашёл статью, наконец: https://gamedev.ru/code/articles/convex_collisions

Правка: 12 июня 2018 13:57

vindastПостоялецwww12 июня 201814:09#191
Suslik
> во, нашёл статью
Я ее тоже нашел давно) Там не понятный шаг 2d clipping.
SuslikМодераторwww12 июня 201814:12#192
vindast
> Там не понятный шаг 2d clipping.
просто двумерный алгоритм поиска общей части двух выпуклых многоугольников. пробегаешься по всем рёбрам, ищешь точки пересечения с другими рёбрами и из полученных сегментов ищешь их пересечение.
vindastПостоялецwww16 июня 201811:30#193
в общем как работать с треугольник - бокс разобрался. 

У меня есть объект "земля", который представлен как треугольная сетка.
Собственно я сейчас просто ищу пересечение с каждым этим треугольником по отдельности.
Но возникает проблема когда тело пересекает два треугольника (смежных) оновременно, и в некоторых случаях (на пример когда треугольники в одной плоскости ),
может случить так что оси минимального проникновения противонаправлены.

как работать с тримешами?

Мне не понятно как найти общую для них ось минимального проникновения.

SuslikМодераторwww16 июня 201814:29#194
vindast
> как работать с тримешами?
никак. с тримешами стараются просто не работать, problem solved.
Страницы: 19 10 11 12 13 14 Следующая »

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

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