OpenGL – 即使使用正确的矩阵也会出现严重失真

OpenGL – Severe distortions even with correct matrices

我的简单 OpenGL 程序显示了一个非常严重扭曲的形状。我正在使用 GLM 进行矩阵数学运算。我将 modelView 矩阵和投影矩阵值与另一个正确显示值的程序进行了比较。然而,它仍然是扭曲的。可能是什么原因?下面是矩阵代码:

modelViewMatrix = glm::lookAt(glm::vec3(3.0f, 5.0f, 7.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));

projectionMatrix = glm::perspective(glm::radians(45.0f), (float)height/(float)width, 0.01f, 100.0f);

这是顶点着色器代码:

#version 300 es

in mediump vec3 vertexPosition;
uniform mediump mat4 modelViewMatrix;
uniform mediump mat4 projectionMatrix;

out vec3 finalPosition;

void main(void) {

gl_Position = projectionMatrix * modelViewMatrix * vec4(vertexPosition, 1.0);

}

以下是(未点亮的)长方体的屏幕截图:

请注意,正确的图片是黑色的。它们都使用完全相同的着色器以及相同的模型视图和投影矩阵编号。为什么会这样?

我认为纵横比计算不正确 - 应该是宽度/高度。

您目前拥有:

projectionMatrix = glm::perspective(glm::radians(45.0f), 
                   (float)height/(float)width, 0.01f, 100.0f);

尝试将其替换为:

projectionMatrix = glm::perspective(glm::radians(45.0f), 
                   (float)width/(float)height, 0.01f, 100.0f);

我通过更改 glViewport 参数解决了这个问题。显然视图转换不正确。