Ainsi, tout récemment, j'ai appris à utiliser escouades, je me suis une caméra fps aller, mais je reçois un certain rouleau « indésirables » lors de la rotation de la locale jusqu'à et droite vecteurs, mais je Je suis assez sûr que c'est normal, mais comment puis-je l'empêcher de faire ça? J'ai essayé quelques méthodes de here et here, les deux ne fonctionnaient pas et ont donné des résultats bizarres lors de la rotation de l'appareil photo. Toute aide serait appréciée!Rouleau non désiré sur l'appareil photo FPS
void Transform::Update()
{
transform = position * glm::toMat4(quatRot) * scale;
}
void Transform::ApplyRotation(glm::vec3 rot, bool isDegr = true)
{
if (isDegr)
quatRot = glm::quat(GetRads(rot)) * quatRot;
else
quatRot = glm::quat(rot) * quatRot;
}
glm::vec3 Transform::Forward() const
{
return glm::normalize(glm::vec3(transform[2][0], transform[2][1], transform[2][2]));
}
glm::vec3 Transform::Right() const
{
return glm::normalize(glm::vec3(transform[0][0], transform[0][1], transform[0][2]));
}
glm::vec3 Transform::Up() const
{
return glm::normalize(glm::vec3(transform[1][0], transform[1][1], transform[1][2]));
}
void FPCamera::Update()
{
Transform *trans = GetOwner()->GetTransform();
Vec2_i difference = GetWindow()->GetDifference();
glm::vec3 tmpDiff(-(static_cast<float>(difference[1]) * 0.5f), -(static_cast<float>(difference[0]) * 0.5f), 0.0f);
trans->ApplyRotation(trans->Right() * tmpDiff[0]);
trans->ApplyRotation(trans->Up() * tmpDiff[1]);
view = glm::inverse(trans->GetMatrix());
}
normaliser votre vecteur –
@TonyJ Je suppose que vous voulez dire le paramètre 'rot' sur' ApplyRotation'? Je l'ai normalisé, mais il y aura toujours du roulement. – Karutoh
Je dirais de le lancer dans le débogueur, d'ajouter des assertions pour vérifier si le vecteur est normalisé. Je ne peux pas dire à quel point le vecteur n'est pas normalisé sans un exemple minimal, vous devez comprendre cela. Aussi, c'est juste une suggestion, pas nécessairement le problème, j'ai juste vu assez de bugs avec des vecteurs et des quats quand ils ne sont pas normalisés. –