0
所以剛剛我一直在學習使用四元不需要滾,我有一個fps的相機去,但從本地了和右矢量旋轉時,我得到一些「不必要的」滾,但是我很確定這是正常的,但我怎麼阻止它這樣做呢?我嘗試了幾種方法,從here和here,都沒有工作,旋轉相機時出現奇怪的結果。任何幫助,將不勝感激!對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());
}
正常化你的向量 –
@TonyJ我假設你的意思''''''''''''參數'ApplyRotation'?我規範了它,但仍然會出現轉機。 – Karutoh
我會說通過調試器運行它,添加一些斷言來檢查向量是否正常化。沒有一個最簡單的例子,我不能說矢量在哪一點變得不規範,你需要弄清楚。此外,這只是一個建議,不一定是問題,我只是看到了足夠的缺陷與向量和quats時,他們沒有正常化。 –