Я посмотрел на кучу похожих вопросов, и я не могу найти тот, который особенно отвечает на мой вопрос. Я кодирую простую 3D-игру, и я пытаюсь разрешить игроку собирать и перемещать объекты вокруг моей карты. Я, по сути, хочу получить вектор скорости, который «подтолкнет» физический объект на расстояние от глаз игрока, где бы они ни находились. Вот an example этого сделать в другой игре (игрок держит стул лица перед его глазами).Получение вектора скорости из векторов позиций
Для этого я обнаруживаю углы глаз игрока, затем получаю вектор вперед от углов, а затем вычисляю скорость объекта. Вот мой работает код:
void Player::PickupOtherEntity(Entity& HoldingEntity)
{
QAngle eyeAngles = this->GetPlayerEyeAngles();
Vector3 vecPos = this->GetEyePosition();
Vector3 vecDir = eyeAngles.Forward();
Vector3 holdingEntPos = HoldingEntity.GetLocation();
// update object by holding it a distance away
vecPos.x += vecDir.x * DISTANCE_TO_HOLD;
vecPos.y += vecDir.y * DISTANCE_TO_HOLD;
vecPos.z += vecDir.z * DISTANCE_TO_HOLD;
Vector3 vecVel = vecPos - holdingEntPos;
vecVel = vecVel.Scale(OBJECT_SPEED_TO_MOVE);
// set the entity's velocity as to "push" it to be in front of the player's eyes
// at a distance of DISTANCE_TO_HOLD away
HoldingEntity.SetVelocity(vecVel);
}
Все это здорово, но я хочу, чтобы преобразовать свою математику, так что я могу применить импульс. Вместо того, чтобы установить совершенно новую скорость для объекта, я хочу «добавить» некоторую скорость к существующей скорости. Итак, полагая, что у меня есть текущая скорость, какая математика мне нужна, чтобы «добавить» скорость? Это по сути вопрос физики игры. Спасибо!
Velocity является производной от пути по времени – ka2m
ли вам на самом деле нужно, своего рода, " бросать "объекты? – JBL
У меня есть функция рабочего броска. Мне просто нужно добавить импульс скорости, чтобы объект вроде бы «плавал» перед глазами игрока. – arao6