gpt4 book ai didi

c++ - 旋转模型矩阵时的形状变形

转载 作者:行者123 更新时间:2023-12-02 10:29:39 25 4
gpt4 key购买 nike

我正在尝试将 glm 库与 openGL 结合使用来旋转形状。不幸的是,当我尝试使用 glm::rotate() 旋转形状时,我的形状尺寸会被拉伸(stretch)。除此之外,形状围绕一个看似随机的点旋转。一切都是二维的。
顶点着色器代码:

#version 330 core

layout(location = 0) in vec2 pos;
uniform mat4 model;
uniform mat4 projection;
uniform mat4 view;

void main()
{
gl_Position = projection * view * model * vec4(pos.x, pos.y, 1.0f, 1.0f);
}
型号矩阵代码:
m_angle = angle;
m_modelMatrix = glm::rotate(glm::mat4(1.0f), glm::radians((float)m_angle), glm::vec3(0, 0, 1));
投影和查看矩阵代码:
glm::mat4 proj = glm::mat4(1.0f);
glm::mat4 view = glm::mat4(1.0f);
proj = glm::perspective(glm::radians(53.f), 1.f, 0.1f, 100.f);
view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));

最佳答案

问题是由于投影矩阵不考虑视口(viewport)的纵横比引起的。在您的代码中,方面参数为 1.0:

proj = glm::perspective(glm::radians(53.f), 1.f, 0.1f, 100.f);

aspect 参数必须是 viewprot 窗口的宽度和高度的比率:
float aspect = (float)window_width/(float)window_height;
proj = glm::perspective(glm::radians(53.f), aspect, 0.1f, 100.f);

关于c++ - 旋转模型矩阵时的形状变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62844247/

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