簡體   English   中英

使用GLM圍繞點進行OpenGL旋轉

[英]OpenGL Rotation Around a Point Using GLM

我一直在閱讀有關如何通過將樞軸轉換為原點,旋轉和向后平移來圍繞OpenGL中的點旋轉對象的其他文章。 但是,我似乎無法正常工作。 我有一個多維數據集,並且正在使用glm :: perspective和glm :: lookAt生成投影和視圖矩陣。

glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
// Camera matrix
glm::mat4 View       = glm::lookAt(
                                   glm::vec3(0,3.5,-5),
                                   glm::vec3(0,0,0), 
                                   glm::vec3(0,1,0)  
                                   );
// Model matrix : an identity matrix (model will be at the origin)
glm::mat4 Model      = glm::mat4(1.0f);

然后,在while循環內,將變換應用於這樣的模型矩陣:

    if (glfwGetKeyOnce(window, GLFW_KEY_UP))
    {
        Model = translate(Model, vec3(1.0f, 0.0f, 0.0f));
        Model = rotate(Model, 90.0f, vec3(1.0f, 0.0f, 0.0f));
        Model = translate(Model, vec3(-1.0f, 0.0f, 0.0f));
    }
    mat4 MVP = Projection * View * Model;

在我的頂點着色器中,我有這個:

gl_Position =  MVP * vec4(vertexPosition_modelspace,1);

但是,這仍然只是使立方體繞其中心旋轉。 如果我擺脫了對glm :: translate的調用,而是通過調整頂點的x位置進行翻譯,則它可以正常工作。 但是我認為這不是正確的方法。 我在這里想念什么?

if (glfwGetKeyOnce(window, GLFW_KEY_UP))
{
    Model = translate(Model, vec3(1.0f, 0.0f, 0.0f));
    Model = rotate(Model, 90.0f, vec3(1.0f, 0.0f, 0.0f));
    Model = translate(Model, vec3(-1.0f, 0.0f, 0.0f));
}
mat4 MVP = Projection * View * Model;

嘗試用“豎起大拇指的手”形象地顯示此代碼。 拇指是x軸。 首先,您舉起手,然后走一圈,最后放下手。

您最有可能想繞另一個軸旋轉。

請記住,還有更多現代方法可以像四元數那樣旋轉。 這樣可以減輕您的操作負擔。

暫無
暫無

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

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