[英]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.