samrrr
> мой способ и += должны давать одинаковый результат на таких малых поворотах.
Понял.
Скажи, при прямом столкновении кубов такой разлет нормален? Думаю отсюда начать смотреть, если это неправильно. А то уже которую страницу не могу добиться ответа правильно такое поведение или нет.
Update: а они должны слипнутся намертво. Ну теперь хоть понятно на чем проверять.
Значит после столкновения и решения всех четырех джойнтов все угловые скорости должны быть нулевыми.
MikeNew
> Значит после столкновения и решения всех четырех джойнтов все угловые скорости
> должны быть нулевыми.
нет, я тебе уже кучу раз говорил, что итеративный солвер не даёт точное решение. и ты даже цитировал это, утверждая, будто понял. каждый раз, когда ты решаешь один джойнт в итеративном солвере, он может нарушать какой-то другой, поэтому угловая скорость обнулится только в пределе с бесконечным числом итераций.
Suslik
> нет, я тебе уже кучу раз говорил, что итеративный солвер не даёт точное
> решение. и ты даже цитировал это, утверждая, будто понял. каждый раз, когда ты
> решаешь один джойнт в итеративном солвере, он может нарушать какой-то другой,
> поэтому угловая скорость обнулится только в пределе с бесконечным числом
> итераций.
Ну ок.
Я проследил что происходит в течение трех циклов после столкновения.
Первый цикл - четыре джойнта.
Второй цикл - один джойнт.
Я думаю что это правильно, раз уж тело получило угловые скорости и разлет (а не слипание) происходит именно по этой причине, это так? А то я уже ни в чем не уверен, хотя это звучит логично.
MikeNew
Это называется не сделал тесты на законы сохранения.
samrrr
> Это называется не сделал тесты на законы сохранения.
Не, я поторопился. Там все нормально.
samrrr
> Это называется не сделал тесты на законы сохранения.
Перепроверил точки контакта, солвер - все правильно.
Начинаю снова думать что угловые скорости интегрируются неправильно.
Смотрю чужой движок - там все по факту то же самое что и у меня, скорости интегрируются сложением, но кубики закручиваются и разлетаются правильно. Но я докопаюсь в чем тут дело. :)
MikeNew
> Смотрю чужой движок - там все по факту то же самое что и у меня, скорости
> интегрируются сложением, но кубики закручиваются и разлетаются правильно. Но я
> докопаюсь в чем тут дело. :)
возьми мой класс базиса и попробуй уже с ним. (там мой старый быдло код, но он заведомо рабочий)
В том видео что я кидал, движ юзает его как базовый класс для ригид бади.
MikeNew
> Почему способ первый способ не поломался, в отличие от второго? Почему поломался именно второй?
Потому что второй способ (через сложение) — это грубая аппроксимация первого.
Т. е. ошибка второго растет быстрее с ростом dt.
> Под малыми dt что подразумевается?
Нормальный код при dt ⟶ 0 должен стремиться к точному решению. Т. е., чем меньше dt, тем меньше ошибка. Начиная с некоторого dt ошибкой можно пренебречь, это и будет "малое dt". Это, кстати, еще один хороший тест движка: для, скажем, dt = 1/100 и dt = 1/1000 он должен выдавать одно и то же.
И это не на глаз одно и то же, это надо выводить цифры в лог и сравнивать логи.
Хех, зацените:
Взял я чужой движок, простой, но грамотный (там даже острова есть, не говоря уже о правильных тензорах инерции).
Сделал там так же два кубика, как у меня. Там они вели себя правильно, причем настолько, что при прямом столкновении слипались. При непрямом - правильно закручивались, с одинаковыми скоростями.
Потом я взял и выставил им массу от балды. И получил точно такие же баги как у меня. Точно такой же разлет при прямом столкновении как у меня. При непрямом - точно такие же кривые закручивания с разными (и лишними) угловыми скоростями как у меня.
Так что мне, определенно, стоит начать с тщательного расчета масс и моментов инерции. Наверное, момент инерции у меня великоват, несмотря на то что я его считал как:
\(I = \frac{2}{3}mR^{2}\)
не катит такое упрощение.
MikeNew
Я думал ты реальные цифры берёшь.
метры секунды килограммы
если ты не в системе си, тебя будет ждать бесконечная отладка.
MikeNew
> Сделал там так же два кубика, как у меня. Там они вели себя правильно, причем
> настолько, что при прямом столкновении слипались. При непрямом - правильно
> закручивались, с одинаковыми скоростями.
А в physx что?
samrrr
> А в physx что?
В физ-икс это делать не пробовал.
samrrr
> Я думал ты реальные цифры берёшь.
Что значит "реальные"?
Ну вот есть у меня куб, размером 1.0f.
Пусть я считаю, что у меня 1 метр = 1.0f;
Почему я просто не могу принять что куб из такого материала, что при таких размерах весит 100 кг и что его приближенный момент инерции
I = 2/3*100* (0.5^2) = 16.666 ?
Метры-килограммы, почему так считать нельзя?
MikeNew
Бери реальные цифры сначала, потом попробуй поставить такие.
MikeNew
> Метры-килограммы, почему так считать нельзя?
По идее можно, проверь что в physx.
MikeNew, не слушай samrrr, он не понимает о чем говорит.
MikeNew, и возьми ты мой класс как базу наконец, убедишься точно что дело в поворотах или же нет.
Тема в архиве.