Скажем, я двигаюсь (0.5,0.5) в стену с нормалью поверхности (-1,0). Я хочу, чтобы конечный результат был (0,0,5), поэтому я не могу продолжать двигаться в стену, а скользить по поверхности.
Как мне этого добиться? я имею
comp_u = n * (maths::dot(dir,n) / maths::dot(n,n));
что дает мне компонент направления, перпендикулярного поверхности столкновения, где ‘n’ — вектор, нормальный к поверхности столкновения, и я могу отменить это. Однако, если я попытаюсь отойти от стены, это отменит этот компонент, то есть я никогда не смогу отойти от стены.
Вы должны выполнять операцию, только если направление движения противоположно направлению нормали … То есть dot(dir,n)
отрицательно.
Если результат положительный, вы удаляетесь от стены и не изменяете dir
,
Других решений пока нет …