簡體   English   中英

如何在OpenGL中正確旋轉和縮放對象?

[英]How to properly rotate and scale an object in OpenGL?

我正在嘗試每幀構建模型矩陣,為此我創建了平移,旋轉和縮放矩陣並將其相乘。 但是我似乎無法弄清楚它如何構建旋轉矩陣並正確縮放它。

這是我在做什么:

glm::mat4 scale = glm::scale(mat4(1.0f), my_models[i].myscale);
glm::mat4 rotateM(1.0); 
glm:mat4 translate = glm::translate(mat4(1.0f), my_models[i].initialPos);

rotateM = mat4_cast(my_models[i].Quat); 
rotateM = glm::rotate(rotateM, (float) my_models[i].angle * t, my_models[i].animation_axis[0]);

my_models[i].modelMatrix = translate * rotateM *scale;
my_models[i].Quat = quat_cast(my_models[i].modelMatrix); 

在構造函數中,我正在使用:

quat Quat = glm::angleAxis(glm::radians(90.f), glm::vec3(0.f, 1.f, 0.f));

如果my_models [i] .myscale恰好為1.0f,它旋轉就很好,但是如果它更大,則對象將繼續增長並怪異地旋轉。 四元數對我來說很新,所以我假設我在搞砸。

我想念什么? 有沒有更簡單的方法來構建模型旋轉矩陣? 如果是這樣,我應該保存什么信息?

編輯:正如jparima建議,以下解決了我的問題。

glm::mat4 scale = glm::scale(mat4(1.0f), my_models[i].myscale);
glm::mat4 rotateM(1.0); 
glm::mat4 translate = glm::translate(mat4(1.0f), my_models[i].initialPos);

my_models[i].Quat = rotate(my_models[i].Quat, my_models[i].angle * t, my_models[i].animation_axis[0]);

rotateM = mat4_cast(my_models[i].Quat); 

my_models[i].modelMatrix = translate * rotateM * scale;

從GLM quaternion.hpp獲得quat_cast它說

將純旋轉4 * 4矩陣轉換為四元數。

您要在那里設置整個模型矩陣,該矩陣也具有縮放和平移。 實際上,我根本不知道為什么要將矩陣轉換為四元數。 因此,如果要應用旋轉,則可以刪除最后一行( quat_cast )並直接更新四元數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM