В последнее время я смотрю на движок Source. Точнее говоря, это движение типа strafing / bunnyhopping, которое у них есть.
Вот фактический код движения для исходного движка. Мой вопрос указывает на линии 1779 и 1784. Здесь wishspeed
дается значение wishdir's
величина. Хотя когда вектор (wishdir
) — нормализованный вектор, не нормализуется ли величина тоже? (Так что это будет величина 1)
Насколько я понимаю, это то, что происходит, когда что-то нормализуется. Если это правда, почему оператор if строки 1784 с if ( wishspeed != 0 && **(wishspeed > mv->m_flMaxSpeed)**)
, если WishSpeed равен 1? Если заглянуть дальше в код, то есть больше подсказок о том, что WishSpeed не равен 0 или 1, а имеет более высокое значение.
Может ли кто-нибудь объяснить мне, как это возможно?
Как скорость может быть больше 1, когда она должна быть нормализована?
Спасибо!
От developer.valvesoftware.com на float VectorNormalize(vec)
:
Делит вектор на его длину, нормализуя его. Изменяет Вектор и возвращает старую длину.
wishspeed
берет длину wishdir
раньше, чем это было нормализовано.
На этой странице операция документирована:
https://developer.valvesoftware.com/wiki/Vector
VectorNormalize () возвращает исходную длину вектора.