Как можно отклонить вектор направления / величины на основе вектора направления / величины и столкнувшегося треугольника? - PullRequest
1 голос
/ 01 января 2011

Итак, у меня есть алгоритм столкновения треугольник-> AABB, и он возвращает треугольник, с которым столкнулась AABB.Я надеялся, что 3 вектора треугольника и направление / величина движения позволят мне определить отклоненный вектор, чтобы при столкновении со стеной под углом вы двигались медленнее, в зависимости от угла столкновения, но вдоль стороныстена.Это позволило бы устранить проблему слипания при столкновении только с движением, когда столкновения нет.Любые предложения или ссылки будут с благодарностью!Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 января 2011

Сначала я бы преобразовал величину / направление в вектор (это гораздо удобнее).

Затем (c ++):

float towards=dot(velocity,norm);  // velocity component into triangle
if(towards<0)                      // is moving into triangle
  velocity-=towards*norm;          // remove component

Тогда он не может переместиться в треугольник,towards<0 может потребоваться изменить в зависимости от вашего обычного.Также хорошо, что пружинное усилие выталкивает его.

0 голосов
/ 01 января 2011

Удалите компонент скорости вдоль нормали треугольника.

Идея состоит в том, что вы можете представить движение как часть, которая движется "в" треугольник и остаток (который будет в перпендикулярных направлениях). Если вы просто двигаетесь с остатком, вы больше не будете приближаться к треугольнику при движении (или дальше, но в этом случае вам не следует обнаруживать столкновение).

В псевдокоде:

// v := velocity vector of moving object
// p[3] := points that make up the triangle

triangle_normal = cross(p[2]-p[0], p[1]-p[0])
problematic_v = project(v, onto=triangle_normal)
safe_movement = v - problematic_movement

Обратите внимание, что это намеренно не сохраняет величину вектора движения, так как это заставит вас очень быстро скользить вдоль стены при беге прямо на нее.

Для получения более подробной информации и некоторых красивых картинок см. Уроки в Зале бассейна: Быстрое, точное обнаружение столкновений между кругами или сферами в Гамасутре Вы не используете сферы, но, по сути, вы делаете идеально пластичное (так как вы не отскакиваете) столкновение.

...