Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
1

Как сделать плавную коллизию?

25.11.2013, 10:38. Показов 1892. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. Есть коллизия. Камера сталкивается с
окружностью. Когда координаты камеры
приближаются к произвольной точке окружности,
происходит отталкивание камеры в направлении
перпендикулярном касательной. Из-за этого камера
дергается.
Как сделать, чтобы она плавно скользила вдоль
окружности.
зы: окружность состоит из большого числа вершин.
ззы: во время проверки находятся самые близкие к
камере вершины окружности и от образованного
ими отрезка строится перпендикуляр к касательной.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2013, 10:38
Ответы с готовыми решениями:

Как сделать коллизию подгруженым 3ds моделям?
Доброго времени суток! Я смотрю вот уроки по OpenGL, дошел до...

Как сделать коллизию(столкновение) в игре?
Написал игру сделал карту , карта сделана с помощь двумерного массива Вопрос в том, как сделать...

Как сделать плавную анимацию?
У моей программы лишь 1 задача: двигать одну картинку повверх другой по нажатию той, или иной...

Как сделать плавную прозрачность картинки?
есть картинки на background и надо чтоб она постепенно становилась прозрачной. сверху вниз и у...

3
3419 / 1606 / 236
Регистрация: 26.02.2009
Сообщений: 7,854
Записей в блоге: 5
25.11.2013, 11:42 2
Цитата Сообщение от programina Посмотреть сообщение
Как сделать, чтобы она плавно скользила вдоль
окружности.
А если увеличить кол-во вершин окружности в N раз амплитуда дёрганья уменьшится?
Цитата Сообщение от programina Посмотреть сообщение
во время проверки находятся самые близкие к
камере вершины окружности и от образованного
ими отрезка строится перпендикуляр к касательной.
Странный подход. По-идеи, аналитически вычислять пересечение сфер гораздо менее затратно.

Вообще для плавности нужно использовать интерполяцию, хотя бы линейную:
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
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2013, 08:19
Помогаю со студенческими работами здесь

Как сделать плавную анимацию height?
Привет. Создал страницу с верхним меню навигации. При прокрутке контента меню фиксируется и...

Как сделать плавную анимацию картинки?
Доброго времени суток, господа. Есть картинка. Нам нужно чтобы она бегала по диагонали плавно...

Как сделать плавную задержку модального окна
Привет всем. У меня есть скрипт модального окна, но я столкнулся с проблемой задержки его, ну что...

Как сделать плавную прокрутку на JS без jQuery?
Ни как не могу догнать... Распишите всё пожалуйста по поподробней К примеру вот менюшка: <nav...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru