Obtendo o vetor de velocidade a partir de vetores de posição
Eu olhei para um monte de perguntas semelhantes, e não consigo encontrar uma que responda particularmente a minha pergunta. Eu estou codificando um jogo 3d simples, e estou tentando permitir que o jogador pegue e mova entidades pelo meu mapa. Eu essencialmente quero pegar um vetor de velocidade que "empurre" o objeto físico a uma distância dos olhos do jogador, onde quer que eles estejam olhando. Aquium exemplo Isso é feito em outro jogo (o jogador está segurando uma cadeira de entidade na frente de seus olhos).
Para fazer isso, eu descubro os ângulos do olho do jogador, então obtenho o vetor de avanço dos ângulos, então calculo a velocidade do objeto. Aqui está o meutrabalhando código:
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);
}
Tudo isso é ótimo, mas quero converter minha matemática para poder aplicar um impulso. Em vez de definir uma velocidade completamente nova para o objeto, quero "adicionar" alguma velocidade à sua velocidade existente. Então, supondo que eu tenha sua velocidade atual, que tipo de matemática eu preciso para "adicionar" velocidade? Esta é essencialmente uma questão de física do jogo. Obrigado!