Привет!
Я пытаюсь написать простенький 2D физ движок для игры. Литературу прочитал, половину даже понял. Но вот что интересно - большинство существующих движков находят пересечения объектов тогда, когда они уже состоялись - т.е. если, скажем, вершина находится внутри другой фигуры, то произошло пересечение. Меня же заинтересовала возможность найти пересечение, которое еще не произошло, но произойдет в текущем промежутке времени. Это очень просто сделать с окружностями, с "квадратами", движущимися без вращения, с "квадратами", вращающимися, но не движущимися. Но вот вариант, например, когда одна линия неподвижна, а другая движется и вращается, меня реально поставил в тупик...
я делал такой коллижен в 3д.
траекторию по вращению разбивал на более-менее прямолинейные участки. вроде один полный поворот на 8 частей. а уже между двумя положениями - трассировал геометрически. ну и оптимизировал для очень высоких скоростей вращения. больше 10 вращений в секунду просто срезал, всё равно пользователь не заметит).
потом перешел к схеме без абсолютно плоских объектов, коллижен через объем проникновения одного объекта в другой.
Получается, трассировали от вершины одной части до вершины соседней, и если луч не пересекался, то продолжали трассировку от последней части до следующей. Я правильно понял? Но ведь тогда тоже получается не точная координата, а приближенная...
> Но ведь тогда тоже получается не точная координата, а приближенная...
ну пользователь же не будет скриншоты делать, и линейкой точность расчетов проверять. так что можно кое-где упростить
> Я правильно понял?
я детально не помню, давно это было, в обще трассировал геометрию из положения t в положение t+dt сталкиваемых тел относительно друг друга. как dt расчитывал я написал выше.
2 Волгоградец
Здесь есть хорошая статья http://www.gamedev.ru/code/articles/?id=4249 + в комментариях можно найти много инфы и ссылок.
aloha_hawaii, спасибо.
V@NGER, спасибо, я уже изучил это, но опять же, это не покрывает мой вопрос - мне нужно узнать точную координату до того, как объекты пересекутся. Я уверен, что это несложно сделать, если я знаю скорости и размеры всех объектов.
Волгоградец
вообще я в своё время пытался вывести аналитику для простейших случаев коллижена вращающихся тел через трассировку, там кошмар какой-то получался, проще пошагово делать.
Волгоградец
И все же, тебе для игровой ситуации или нужно полное моделирование физ. процесса?
Если первое, то здесь можно использовать просто метод выталкивания одной фигуры из другой, метод позволяет обнаружить и правильно обработать даже те случаи, когда один объект "пролетел" сквозь другой за время dt.
Где-то в коментах к той статье есть ссылки на исходники.
В любом случае у тебя есть две позиции объекта:
1 - когда объект еще не столкнулся с другим (t) и 2 - когда объект уже столкнулся при следующей проверке (t+dt) где dt - время прошедшее с момента последнего update.
Тогда просто выталкиваем объекты друг из друга (т.е. разводим в противополжные стороны их траектории движения, при этом вращения игнорируются). Здесь можно найти и момент столкновения (t0) , т.е t + t0, t0 <= dt и за доли времени до столкновения, вообще любое интересующее тебя положение тел.
Тема в архиве.