gpt4 book ai didi

c++ - 使用 GLM 围绕一个点进行 OpenGL 旋转

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:34 28 4
gpt4 key购买 nike

我一直在阅读其他帖子,了解如何通过将枢轴平移到原点、旋转和平移回来来围绕 OpenGL 中的一个点旋转对象。但是,我似乎无法让它工作。我有一个立方体,正在使用 glm::perspective 和 glm::lookAt 生成投影和 View 矩阵。

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 轴。先举手,然后绕圈走,最后放下手。

您很可能想绕另一个轴旋转。

请记住,还有更多现代方法可以像四元数一样进行旋转。这将为您节省大量操作。

关于c++ - 使用 GLM 围绕一个点进行 OpenGL 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26961471/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com