Войти
ПрограммированиеФорумФизика

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

Страницы: 126 27 28 2935 Следующая »
#390
(Правка: 9:44) 9:42, 5 окт. 2018

nullptr
> Если ноль лежит на отрезке
то вершина одной геометрии касается ребра другой

в общем случае при разработке gjk лучше избегать случая, когда расстояние между геометриями меньше некоторого eps, потому что это вызывает численные нестабильности. лучше предположить, что между геометриями есть некоторый зазор, а если этот зазор оказывается на очередной итерации меньше eps, то стартовать sgjk или epa, прибавив к cso сферу радиусом в eps.


#391
(Правка: 11:45) 11:44, 5 окт. 2018

Suslik
> прибавив к cso сферу радиусом в eps.
Это вообще как? ( в смысле куда?)

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

На счет избегания численной нестабильности. Я вот как думаю тогда сделать: после каждого шага возвращается вектор с новым направлением на начало координат. Если его длинна меньше какого-нибудь маленького значения, то буду считать что найдено пересечение.
Только вопрос остается с тем как достроить симплекс ( и нужно ли его вообще достраивать).

Я решил, что дальше буду делать epa.

#392
17:09, 5 окт. 2018

Вроде сделал. Вроде)))))))))

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

Пока буду курить epa. Если у кого есть годная ссылка на эту тему, то пожалуйста в студию.

Есть еще вопрос, если альтернативы для построения контактных площадок методу, что предложил Suslik?

#393
17:11, 5 окт. 2018

vindast
> Есть еще вопрос, если альтернативы для построения контактных площадок методу,
> что предложил Suslik?
есть. bullet использует persistent contact manifold. только не спрашивай, как проверять ранее кешированные точки — никто не знает.

#394
(Правка: 17:30) 17:24, 5 окт. 2018

Suslik, спрошу как найти самую глубокую точку контакта.

Я могу предположить, что берем две точки от каждого конвекса вдоль и против оси контакта, а что потом?

#395
(Правка: 18:45) 18:42, 5 окт. 2018

vindast
> Есть еще вопрос, если альтернативы для построения контактных площадок методу,
> что предложил Suslik?
>
> Suslik Модератор www «»
Ещё есть петурбирация+clipping  как в bullet  , ну это работает точно так плохо как и AxisRotation+clipping , а дело в том что не петурбирация не AxisRotation не дадут правильные контактные площадки для дольнейшого clippingа в 100% случаев.  Ибо за чистую кофициент esp для разных геометрий он разный, который надо подбирать с помощью бубна.
Наверное единственный способ правильно пристроить контрактные площадки для дольнейшого  clippinga это делать как в движке Newton , то бишь за ранее проицелизировать ребра как своеобразный граф, и потом контактные площадки строить как граф по поверхности отнсительно нормали колизии. Кароче говоря просто перебрать нужные ребра и построить из них строить конаткыне площадки . Где в графе каждое ребро имеет указатель  на следующие ребро.
Но проблема в том что прийдётся хранить дополнительную типа (Edge_N, Face_N) , а не просто одну функцию Sp(Dir)!

Suslik
> есть. bullet использует persistent contact manifold.
Он плохо работатет , особено с concave_mesh 

#396
0:28, 6 окт. 2018

Пример работы, вдруг интересно будет. Моя реализация всегда возвращает тетраэдр в случае пересечения.

#397
11:37, 6 окт. 2018

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

#398
(Правка: 14:21) 14:21, 6 окт. 2018

MikeNew,рейкастишь, радуешься жизни ) Но не всегда.

#399
(Правка: 19:06) 19:04, 7 окт. 2018

Есть быстрый и эффективный способ проверки принадлежности точки треугольнику?
(Я только способ с формулой герона представляю - разбивка на три треугольника и проверка равенства суммы площадей площади начального)
Если что, точка заведомо в плоскости треугольника.

#400
(Правка: 21:09) 21:08, 7 окт. 2018

Можно так: для каждого отрезка, образующего сторону треугольника, проверить, лежит ли исследуемая точка и оставшаяся вершина треугольника по одну сторону от этого отрезка.

#401
1:41, 8 окт. 2018

vindast
> Есть быстрый и эффективный способ проверки принадлежности точки треугольнику?
3 cross product с проверкой знака?

#402
1:50, 8 окт. 2018

Типа как-то так:
Для 2д случая:

float cross2d(vec2 a, vec2 b) {
  return a.x*b.y - a.y*b.x;
}

bool PointInTriangle(vec2 p, vec2 pt1, vec2 pt2, vec2 pt3) {
  float s = cross2d(p, pt2 - pt1);
  return (s * cross2d(p, pt3 - pt2) > 0) && (s * cross2d(p, pt1 - pt3) > 0);
}

Для 3д случая:

bool PointInTriangle(vec3 p, vec3 pt1, vec3 pt2, vec3 pt3) {
  vec3 p1c = cross(p, pt2 - pt1);
  vec3 p2c = cross(p, pt3 - pt2);
  vec3 p3c = cross(p, pt1 - pt3);
  return ( dot(p1c, p2c) > 0 ) && ( dot(p2c, p3c) > 0 );
}

#403
(Правка: 2:40) 2:37, 8 окт. 2018

MrShoor, а дешевле ли это чем три раза перерасчет по формуле герона?

MrShoor сюда зашел)
Метод выглядит довольно красиво.

Возникла у меня у меня проблема с EPA.
Собственно с ep. На стадии добавления новой вершины в polytope.
делаю как: нашел минимальную ось, если нет экстермальной точки в этом направлении дальше чем эта точка (с некоторой погрешностью) то поиск завершен. А если есть, возникает проблема что polytopу надо расширить по новой экстремальной точки.

По тутору, что я нашел https://youtu.be/6rgiPrzqt9w?t=1458 нужно выкинуть все треугольники у которых нормаль в том же направлении, что и новый экстремум (dot(v, normal) > 0.0f). Вопрос в том как понять reverse edge или нет. Я нашел решение только для двумерного случая. Вопрос для трехмерного плохо гуглится. Помогите )
Я пытался просто проверить куда смотрит нормаль нового треугольника в сторону от origin или нет. Но это не всегда работает. Иногда появляются два треугольника которые смотрят друг на друга.

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

#404
5:49, 8 окт. 2018

vindast
> Есть быстрый и эффективный способ проверки принадлежности точки треугольнику?
Смешанным произведением векторов как вариант.

Страницы: 126 27 28 2935 Следующая »
ПрограммированиеФорумФизика