我在我的程序中添加了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上运行。
代码的预期输出是下面的图像,但带有我的个人资料图片,而不是笑脸。
1条答案
按热度按时间rsl1atfo1#
mat4 transform = {{1.0f}};
不会执行您所期望的操作。C没有像C那样的构造函数。C版本的构造函数使用Identity matrix初始化矩阵。您必须使用glm_mat4_identity
使用单位矩阵进行初始化:请注意,单位矩阵的主对角线上有1,其他地方有0: