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

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

Страницы: 125 26 27 28 29 30 Следующая »
vindastПостоялецwww8 окт. 201813:48#405
MikeNew
> Смешанным произведением векторов как вариант.
Не понял. Таким способом можно определить только лежит ли точка в плоскости треугольника. (dot(P - A, cross(B - A, C - A))
Или я не то подумал?

ps:
Пост https://gamedev.ru/code/forum/?id=235421&page=27#m403 очень актуально.

vindastПостоялецwww8 окт. 201814:53#406
Я тут понял что я не так делал (нашел в интернетах подобный вопрос) . Нужно из всего списка треугольников, который виден с нового экстремума оставить только те ребра, которые лежат только в одном треугольнике.
Новый вопрос: как сделать такую штуку эффективно? Ну очевидный способ я, разумеется, увидел. Просто проверяем лежит ли каждое ребро только в одном треугольнике, если да то добавляем новый треугольник с ним экстремумом, иначе ничего не делаем.

Правка: 8 окт. 2018 14:53

nullptrПостоялецwww8 окт. 201816:47#407
vindast, эту статью видел? http://hacktank.net/blog/?p=119
vindastПостоялецwww8 окт. 201817:08#408
nullptr, да, да видел. Но не понял как он проверяет ребро на уникальность.

Я Уже сделал решение в лоб:

nullptrПостоялецwww8 окт. 201818:50#409
vindast
> Но не понял как он проверяет ребро на уникальность.
Он пробегается по всем треугольникам и определяет какие из них видны со стороны новой опорной точки.
Перед удалением этих треугольников он добавляет все их ребра в список.
При добавлении ребер он проверяет есть ли в списке ребра с такими же координатами вершин, но направленные в противоположенную сторону (if(newEdge.a == oldEdge.b && newEdge.b == oldEdge.a)). Если есть, то новое не добавляется, а старое удаляется.
Из оставшихся ребер и опорной точки строятся новые треугольники, которые закрывают дыру.
vindastПостоялецwww8 окт. 201819:01#410
nullptr, спс. Попробую так сделать.
vindastПостоялецwww10 окт. 20184:08#411
Сделал я. И алгоритм построения контактных площадок  тоже (Axis rotation). Только получается что все нормально работает в контактах фейс / фейс, фейс / ребро, ребро / ребро, а вот с вершина / фейс все очень печально. (пока только боксы смотрел)

Забить на это? 

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

SuslikМодераторwww10 окт. 20184:29#412
vindast
> вершина / фейс
это как бы самый базовый случай. проверяй ещё.
vindastПостоялецwww10 окт. 20184:38#413
Suslik, а как Вы у себя считали устредненную нормаль?
Я сейчас проверяю что новый сапорт поинт != старый, и соответственно добавляю новую точку в полигон и увеличиваю сумму нормалей.

А потом после обхода normal = NormalSum / count

Иногда получается, что нормаль чуть чуть отклонена от настоящей. Но нужная точка отсекается.

Правка: 10 окт. 2018 4:40

vindastПостоялецwww10 окт. 20185:13#414
У меня тут еще один вопрос возник.
По поводу саппорт мапинга. А что делать есть есть несколько экстремумов в одном направлении? На пример бокс и нормаль его грани - 4 штуки.

Правка: 10 окт. 2018 5:14

SuslikМодераторwww10 окт. 20185:53#415
vindast
> А что делать есть есть несколько экстремумов в одном направлении?
выбирать любой

vindast
> Я сейчас проверяю что новый сапорт поинт != старый, и соответственно добавляю
> новую точку в полигон и увеличиваю сумму нормалей.
> А потом после обхода normal = NormalSum / count
примерно так же, только нормали надо не усреднять(это собъёт нормализацию), а просто нормализовать полученную взвешенную сумму.

vindastПостоялецwww10 окт. 201814:20#416
Suslik
> взвешенную
?????????????
По какому принципу?
SuslikМодераторwww10 окт. 201818:23#417
vindast
я складываю с весами, равными углу относительно центра масс. не знаю, может быть, можно умнее.
vindastПостоялецwww10 окт. 201821:56#418
Suslik,
normalAVG += dot(Normal[i], normalize(Centr)) * Normal[i];
PlaneNormal = normalize(normalAVG);

Так?

Правка: 10 окт. 2018 22:07

vindastПостоялецwww11 окт. 201820:14#419
Даже не знаю что я не так сделал.

бокс vs бокс, 8 осей, eps = 0.3


Страницы: 125 26 27 28 29 30 Следующая »

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

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