【发布时间】:2020-07-07 22:12:11
【问题描述】:
我最近一直在创建一个基本的 gui,我试图让用户能够旋转形状/图像/精灵。但是,当我使用 glm::rotate 尝试更改模型矩阵时,我得到了一些意想不到的结果。转换后的形状会改变尺寸,旋转太远,并且还会围绕看似随机的点旋转。
着色器代码:
#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_modelMatrix = glm::mat4(1.0f);
m_modelMatrix = glm::rotate(m_modelMatrix, 45.f, 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));
一切都是二维的。
【问题讨论】:
-
度数通常用弧度指定,
45.f是一个巨大的值。 -
是的,对不起,我本来打算写 glm::radians(45.f)。但是,无论哪种方式,它仍然无法正常工作。
-
您必须使用投影矩阵,它负责处理视口的纵横比。此外请注意,对象围绕 (0, 0) 旋转。
-
我确实有一个投影矩阵和一个视图矩阵。
-
@cummiesinmytummy 请用当前代码更新问题并显示投影矩阵的设置方式。