Отмена оси поверхности от направления после столкновения

Скажем, я двигаюсь (0.5,0.5) в стену с нормалью поверхности (-1,0). Я хочу, чтобы конечный результат был (0,0,5), поэтому я не могу продолжать двигаться в стену, а скользить по поверхности.

Как мне этого добиться? я имею

comp_u = n * (maths::dot(dir,n) / maths::dot(n,n));

что дает мне компонент направления, перпендикулярного поверхности столкновения, где ‘n’ — вектор, нормальный к поверхности столкновения, и я могу отменить это. Однако, если я попытаюсь отойти от стены, это отменит этот компонент, то есть я никогда не смогу отойти от стены.

0

Решение

Вы должны выполнять операцию, только если направление движения противоположно направлению нормали … То есть dot(dir,n) отрицательно.

Если результат положительный, вы удаляетесь от стены и не изменяете dir,

1

Другие решения

Других решений пока нет …