Спасибо! А что насчет 4 вопроса?
по третьему вопросу - так как солвер итеративный, то точное решение с его помощью никогда не получится. но чем больше сделано итераций, тем ближе должно быть решение к точному. поэтом попробуй поставь побольше итераций солвера - если их сделать десяток-другой, куб должен отскакивать вертикально.
по четвёртому вопросу какая-то жуткая путаница. контакт манифолд - множество контактов между двумя выпуклыми геометриями. массив, грубо говоря. плюс в нём удобно хранить вектор pd, найденных на предыдущем шаге интегрирования. поэтому для двух боксов манифолд всегда один, или я не понял вопрос.
по третьему попробую.
по четвертому - это у меня проблемы с терминологией)
Вопрос был про то, сколько регистрировать именно фактов контакта. из статья я понял следующее:
при контакте двух боксов регистрируется две точки контакта. причем по две на каждом боксе. далее я отправляю на обсчет в итоге 4 точки - 2 для одного бокс и две для другого. плюс сохраняю pd и глубину контакта. так вот вопрос про то, правильно ли я делаю - или нужно в данном случае только две точки, а не четыре?
каждая точка контакта - это по сути две точки - одна на одном боксе и вторая на втором. манифолд для 2д боксов состоит из двух точек контакта.
ясно. и тогда в каждой из двух точек контакта оба тела расталкиваются, если я правильно понимаю.
да, верно
Вроде добился более-менее нормальной работы (самый большой прирост дало сохранение предыдущго вектора). Хотел спросить насчет касательной (SA при поиске v вспомогательной задачи). Я ее нахожу как перпендикуляр к v, но гложат сомнения. Предполагаю что для много гранника ее лучше находить как прямая проходящая через вершины.
fysx
> Вроде добился более-менее нормальной работы (самый большой прирост дало сохранение предыдущго вектора)
Да, это, конечно, центральная фишка метода. Что вектор-то можно сохранять, именно отсюда такая быстрая сходимость.
> Я ее нахожу как перпендикуляр к v, но гложат сомнения.
Нет, всё верно. Если бы это был обыкновенный многогранник, то, конечно, можно было бы просто взять его ребро. Но не забывай, что этот многогранник задан неявным образом как разница минковского, поэтому нельзя просто взять его определённое ребро.
Ясно. Тогда другое мое сомнение - саппорт вектор многогранника ищу путем перебора вершин - по идее это лучше переделать? например выводить ф-ю для определения вершины по наклону v И повороту тела?
по идее в 3д есть оптимизация hill climbing, когда ты не все вершины перебираешь, а идёшь по списку соседей в оптимальном направлении. в 2д и так направления всего два, особо не поможет. можешь попробовать сохранять предыдущую вершину при взятии саппорт вектора и в следующий раз начинать поиск с неё, но это скорее поможет, если их много.
Тоже думал про сохранение, но видимо для видимого прироста надо будет для каждого контактирующего тела сохранять индекс, может поможет. Сделаю swep and prune, посмотрю по скорости
fysx
а у тебя вообще есть broad phase? ты сначала aabb проверяешь?
Добавил Broad phase, заметного прироста не вижу (с учетом того что тел всего 4, одно статично, и aabb размер не меняет).
4? тестируй хотя бы на 400.
Он и на 4 то тормозит страшно. Видны тормоза, когда круг слева падает с прямоугольника
Тема в архиве.
Официальный сайт Слотокинг obzor365.com |