我正在尝试将 MVP 转换应用于 OpenGL 中的正方形
但是,它什么也没显示。
如果我从 Vertex Shader 中删除
mvp
,方形就会被渲染
我正在使用 cglm 作为数学库,但没有它的标签。所以,我给它 glm 标签
我正在将
mat4
制服上传到顶点着色器。我还尝试将 vec3
作为制服上传到着色器并且它有效。所以,我觉得这更像是一个计算问题,而不是着色器问题。但我似乎无法弄清楚。
// Model
mat4 model = {{1.0f}};
glm_translate(model, (vec3){5.0f, 5.0f, 0.0f});
// View Matrix
mat4 view = {{1.0f}};
glm_translate(view, (vec3){0.0f, 0.0f, 10.0f});
// Projection Matrix
mat4 projection;
glm_ortho(0.0f, WINDOW_WIDTH, 0.0f, WINDOW_HEIGHT, 0.001f, 1000.0f, projection);
// The MVP Matrix
mat4 mvp;
glm_mat4_mulN((mat4* []){&projection, &view, &model}, 3, mvp);
// Uploading the Matrix
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "mvp"), 1, GL_FALSE, (float*)mvp);
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec4 aColor;
uniform mat4 mvp;
out vec4 fColor;
void main()
{
gl_Position = mvp * vec4(aPos, 1.0);
// On removing the mvp, the square gets rendered
// gl_Position = vec4(aPos, 1.0);
fColor = aColor;
}
OpenGL坐标系是右手系。在视图空间中,x 轴指向右侧,y 轴指向上方。由于 z 轴是 x 轴和 y 轴的叉积,它指向视图外。投影将观察体积转换为一个独特的立方体 (NDC),镜像 z 轴并将坐标系从右手系转换为左手系。所有不在查看体积(裁剪空间)中的几何体都将被裁剪。因此,您必须在近平面和远平面之间沿负 z 轴移动几何体。例如:
glm_translate(view, (vec3){0.0f, 0.0f, 10.0f});
glm_translate(view, (vec3){0.0f, 0.0f, -10.0f});