旋转对象 OpenGL 时出现严重失真

Intense distortion when rotating objects OpenGL

我一直在尝试通过制作视图矩阵和模型矩阵来旋转四边形。我正在使用 GLM 来执行此操作。

下面是制作矩阵的代码:

glm::mat4 view = glm::translate(glm::mat4(1.0f), position);
view = view * glm::rotate(glm::radians(pitch), glm::vec3(1.0f, 0.0f, 0.0f));

glm::mat4 model = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, 0.0f));

这是顶点着色器:

#version 330 core
layout (location = 0) in vec3 aPos;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
    gl_Position = projection * view * model * vec4(aPos, 1.0);
}

因此这段代码正在旋转对象,但是它们在旋转时变得 非常 扭曲,并且在屏幕的顶部和底部旋转得更慢。我试图查找另一种方法,但屏幕上什么都没有显示。

编辑:这是一个 link 的失真:https://imgur.com/a/HzUNJAe

对于透视图,形状变形很常见。您的案例如下所示:

x 轴穿过你的 QUAD 中心,所以当你围绕 x 旋转时,你的四边形的一半离相机更近而另一半离相机更远......正如你所看到的,靠近的部分可能比尺寸大得多未旋转的 QUAD。

不成比例的失真可能是由两件事造成的:

  1. 鱼眼

    你离相机太近尝试将你的四边形移动到离相机更远的地方,例如在 z 轴上 10.0 或更多单位。离 znear 越近,QUAD 的较近部分和较远部分之间的比例失调越大

    鱼眼受相机的 znear 和 FOV 影响很大,因此改变它们也可能有帮助......(更大的 znear,更小的 FOV)

    我看到鱼眼是这样的:

    如果你的物体离相机太近,那么未旋转的 QUAD 实际上比旋转后的小,因为它在相机观察方向(-z 轴)的焦点和 ZY 平面中的物体边缘之间的视角较小。一旦将相机或 QUAD 移得更远,就不会发生这种情况。

  2. 宽高比错误修正

    当您设置透视图时,请检查您是否提供了正确的宽高比(而不是倒置的)。如果 x 轴和 y 轴上的比例在视觉上不相同,那么当您的 QUAD 直接面对相机时,它不是正方形的……并且在旋转时它可能会产生奇怪的外观。