Главная » Статьи » Заметки на полях

Избегайте острых углов.
Если вы используете пандовский CollisionHandlerPusher для обработки столкновений, то старайтесь избегать острых углов в вашей геометрии, предназначенной для коллизий. На рисунке я попробовал показать почему.

Пушер для расчёта реакции на столкновение использует нормаль поверхности с которой столкнулся. В случае "А" всё просто - мы движемся по плоской поверхности, реакция этой поверхности представлена единственным вектором. Результирующее движение - сумма желаемого перемещения и реакции поверхности. Но вот мы наткнулись на угол "Б" - теперь пушер видит две нормали (может и больше) и реакцию поверхности рассчитывает как сумму этих нормалей. Вроде бы всё хорошо, но есть одно "но" - когда мы наконец проходим угол, одна из составляющих нормалей исчезает, и вектор реакции меняет своё направление, как резко - зависит от угла который мы проходим. Чем острее угол, тем резче смена вектора, так что становится заметен рывок объекта, причём порой довольно ощутимый. При тупых углах этот "артефакт" значительно менее заметен. Вот поэтому при создании геометрии для коллизий нужно стараться избегать острых углов, например делать фаски.

Категория: Заметки на полях | Добавил: ninth (24.04.2010)
Просмотров: 3517 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 2
1  
Да уж. Например для игровой карты в виде единственного квадрата понадобится минимум 4 фаски, в результате вместо шести поликов получаем 10. А если взять какой нить бункер с кучей коридоров и дверей...

2  
Поэтому снова повторяюсь - для коллизий почти никогда не используется видимая геометрия - рисуется отдельная упрощённая и оптимизированная.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Онлайн всего: 1
Гостей: 1
Пользователей: 0