应用 MVP 转换不会渲染任何 OpenGL

问题描述 投票:0回答:1

我正在尝试将 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;
}
c opengl glsl glm-math
1个回答
0
投票

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});
© www.soinside.com 2019 - 2024. All rights reserved.