1 | |
Как сделать плавную коллизию?25.11.2013, 10:38. Показов 1892. Ответов 3
Метки нет (Все метки)
Привет. Есть коллизия. Камера сталкивается с
окружностью. Когда координаты камеры приближаются к произвольной точке окружности, происходит отталкивание камеры в направлении перпендикулярном касательной. Из-за этого камера дергается. Как сделать, чтобы она плавно скользила вдоль окружности. зы: окружность состоит из большого числа вершин. ззы: во время проверки находятся самые близкие к камере вершины окружности и от образованного ими отрезка строится перпендикуляр к касательной.
0
|
25.11.2013, 10:38 | |
Ответы с готовыми решениями:
3
Как сделать коллизию подгруженым 3ds моделям? Как сделать коллизию(столкновение) в игре? Как сделать плавную анимацию? Как сделать плавную прозрачность картинки? |
25.11.2013, 11:42 | 2 |
А если увеличить кол-во вершин окружности в N раз амплитуда дёрганья уменьшится?
Странный подход. По-идеи, аналитически вычислять пересечение сфер гораздо менее затратно. Вообще для плавности нужно использовать интерполяцию, хотя бы линейную: P = P0 + a*t Где P-текущее положение камеры, P0 - положение камеры сразу после определения что камеру необходимо отодвинуть. a - вектор в конечную точку P1 куда должна быть перемещена камера a = (P1-P0) t - параметр определяющий промежуточное положение на отрезке между P0 и P1 при t = 0 P = P0 при t = 1 P = P1 Итого: P = P0 + (P1-P0)*t
1
|
25.11.2013, 13:29 [ТС] | 3 |
Кажется до меня начинает доходить (как до жирафа) .
Порядок действий такой: 1) получаю координаты камеры в момент времени t0 2) получаю координаты камеры в момент времени t1 3) если в момент t1 коллизии нет, то двигаю камеру, иначе камера остается в координатах момента t0. Тогда возникает другой вопрос, если в случае с коллизией камера остается в координатах момента t0, то камера полностью останавливается и не может скользить вдоль касательной. На геймдеве мне подсказали переводить вектор движения камеры в вектор касательной. В общем это выход из проблемы, но тогда все становится просто ужасающе сложно если поверять столкновение не с 2D окружностью, а с 3D обьектом произвольной формы. Потому что нужно будет сначала находить плоскость (3 точки как минимум), затем на этой плоскости строить вектор касательной направленный вдоль движения камеры.... Ужас, это не физика, а целая геометрия.
0
|
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
27.11.2013, 08:19 | 4 |
пусть у нас есть объект произвольной формы столкновение с которым мы считаем коллизией. будем считать коллизией случай когда расстояние от "глаза" до любой грани, ребра или вершины объекта меньше "размера глаза" (меньше радиуса сферы описанной вокруг "глаза" таким образом что бы углы "экрана" лежали на сфере). перед каждым перемещением камеры будем вычислять точку пересечения луча проведенного по линии движения камеры с поверхностью отстоящей от объекта на "размер глаза". если такая точка найдена переходим в эту точку, рассчитываем проекцию вектора скорости камеры на плоскость коллизии и пытаемся продолжить оставшееся нам по времени перемещение в этом направлении. если найдена еще одна коллизия нам придется вычислять проекцию уже этого спроектированного вектора на плоскость новой коллизии. ну а когда мы найдем еще одну коллизию движение остановится ибо мы уже не сможем ползать по поверхности будучи зафиксированными с двух сторон.
Добавлено через 2 минуты что бы не мучатся с построением поверхности отстоящей от тела на размер глаза можно изначально подобрать поверхность коллизии таким образом что бы она была как можно более простой и мы не могли залезть в объект экраном. например выбрать в качестве поверхности коллизии прямоугольный параллелепипед)
1
|
27.11.2013, 08:19 | |
27.11.2013, 08:19 | |
Помогаю со студенческими работами здесь
4
Как сделать плавную анимацию height? Как сделать плавную анимацию картинки? Как сделать плавную задержку модального окна Как сделать плавную прокрутку на JS без jQuery? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |