opengl 添加第三个维度和z轴旋转后,对象未呈现

camsedfj  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(134)

我在我的程序中添加了3D和一些z轴旋转,程序使用了OpenGL、CGLM、STB、GLFW和GLAD。程序没有警告或错误,程序的输出仍然是我清晰的颜色。
下面是我的程序循环中应用转换的部分。

// Create transformations
mat4 model      = {{1.0f}};
mat4 view       = {{1.0f}};
mat4 projection = {{1.0f}};

glm_rotate(model, glm_rad(-55.0f), (vec3){1.0f, 0.0f, 0.0f});

// Translating the scene in the reverse direction of where the user wants to move
glm_translate(view, (vec3){0.0f, 0.0f, -3.0f});
glm_perspective(glm_rad(45.0f), (float)WINDOW_WIDTH / (float)WINDOW_HEIGHT, 0.1f, 100.0f, projection);

// Retrieve the matrix uniform locations and pass them to the shaders
GLint modelLoc = glGetUniformLocation(myShaderPtr->shaderID, "model");
GLint viewLoc = glGetUniformLocation(myShaderPtr->shaderID, "view");
GLint projectionLoc = glGetUniformLocation(myShaderPtr->shaderID, "projection");

glUniformMatrix4fv(modelLoc, 1, GL_FALSE, &model[0][0]);
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, &view[0][0]);
glUniformMatrix4fv(projectionLoc, 1, GL_FALSE, &projection[0][0]);

这是我的顶点着色器:


# version 330 core

layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;

out vec2 TexCoord;

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

void main() {
    gl_Position = projection * view * model * vec4(aPos, 1.0);
    TexCoord = vec2(aTexCoord.x, aTexCoord.y);
}

如果需要更多的代码,程序在github here上运行。
代码的预期输出是下面的图像,但带有我的个人资料图片,而不是笑脸。

rsl1atfo

rsl1atfo1#

mat4 transform = {{1.0f}};不会执行您所期望的操作。C没有像C那样的构造函数。C版本的构造函数使用Identity matrix初始化矩阵。您必须使用glm_mat4_identity使用单位矩阵进行初始化:

mat4 model, view, projection;
glm_mat4_identity(model);
glm_mat4_identity(view);
glm_mat4_identity(projection);

请注意,单位矩阵的主对角线上有1,其他地方有0:

{{1.0f, 0.0f, 0.0f, 0.0f},
 {0.0f, 1.0f, 0.0f, 0.0f},
 {0.0f, 0.0f, 1.0f, 0.0f},
 {0.0f, 0.0f, 0.0f, 1.0f}}

相关问题