嘿傢伙我想做一個Camera類,使用glm庫中的lookAt。我有4點,第一個是眼睛,那就是相機在太空中的位置,第二個是相機看的地方,第三個是upp,設置相機的方向,第四是側面,這是眼睛和眼睛的交叉產物。相機旋轉使用lookAt
所以最終我得到了3個向量的基礎,所有這些向量的起源都在眼點。我得到了相機的座標系。
在我的相機類中,我希望能夠圍繞相機的座標系旋轉,而不是世界的座標系。所以我正在做的是圍繞相機座標系的一個軸旋轉。
我構建具有初始值類是這樣的:
void Observer::initialize(glm::vec3 eye, glm::vec3 look, glm::vec3 upp, glm::vec3 side)
{
this->eye = eye; // (0.0, 0.0, 0.0)
this->look = look; // (0.0, 0.0, -1.0)
this->upp = upp; // (0.0, 1.0, 0.0)
this->side = side; // (1.0, 0.0, 0.0)
}
當欲繞x軸例如我調用該函數從GLM這樣旋轉座標系:
void Observer::pitch(GLfloat pitch)
{
glm::mat4 rotate(1.0f);
rotate = glm::rotate(rotate, pitch, side - eye);
look = glm::vec3(rotate * glm::vec4(look, 1.0f));
upp = glm::vec3(rotate * glm::vec4(upp, 1.0f));
}
到目前爲止,我瞭解到,我所有的點仍然構成了相機的座標系,並且所有矢量都相互垂直。
但是,然後我使用這些觀點,我用lookAt函數獲得了相機在世界上的位置。
glm::mat4 view = glm::lookAt(eye, look, upp);
,如果我開始轉動了很多乘以這個矩陣與OpenGL的
模型視圖矩陣,幾個旋轉後的攝像頭「反映」旋轉,就像我在其他的方式旋轉(我不知道如何以更好的方式描述真正發生的事情)。
我真的不明白髮生了什麼事。在應用旋轉後,我應該對矢量進行歸一化處理?我有一個萬向節鎖的問題(我對萬向節鎖沒有太多瞭解)?