Как я могу настроить вектор по направлению другого вектора? - PullRequest
0 голосов
/ 23 января 2020

Я работаю над простой маленькой игрой / симулятором, где хочу отскочить от мяча. Я пытаюсь заставить мяч подпрыгивать не совсем реалистично, а скорее "игровой вселенной".

У меня есть эти переменные для работы:

Vector ball_direction; // Direction the ball was moving in prior to impact
Vector ball_bounce_direction; // New direction of the ball computed from the collided face's normal
Vector collide_face_normal; // The normal of the collided face
Vector collide_face_perp; // perpendicular to the normal of the collided face
Vector gravity; // The gravity of the world-- doesn't really factor in since I want to do this operation based on the collision normal

Так что в основном то, что я хочу сделать это:

умножить ball_bounce_direction на .6 в направлении collide_face_normal. умножьте ball_bounce_direction на 1.0 в направлении collide_face_perp.

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

Может кто-то сказать мне, что мне нужно сделать для ball_bounce_direction, чтобы добиться этого?

1 Ответ

2 голосов
/ 23 января 2020

Если вы думаете о точечном произведении как «величина вектора в направлении другого вектора», вы можете разбить ball_bounce_direction на две части (я предполагаю, что у вас есть функция dot):

Vector bbd_norm = ball_bounce_direction.dot(collide_face_normal)*ball_bounce_direction;
Vector bbd_perp = ball_bounce_direction.dot(collide_face_perp)*ball_bounce_direction;

Это работает, потому что collide_face_* векторы перпендикулярны, тогда вы можете построить новый вектор:

ball_bounce_direction = 0.6*bbd_norm + bbd_perp;
...