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 参数解决了这个问题。显然视图转换不正确。
我的简单 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 参数解决了这个问题。显然视图转换不正确。