我将3D和z轴上的一些旋转添加到我的程序中,该程序使用OpenGL、CGLM、STB、GLFW和GLAD.程序没有警告或错误,程序的输出仍然只是我的清晰 colored颜色 .

下面是我应用转换的程序循环的一部分.

// 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上运行.

代码的预期输出是下图,但带有我的个人资料图片,而不是笑脸.

Intended output

推荐答案

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.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}}

C++相关问答推荐

为什么在传输 Big Data 时共享内存段的运行时间比管道更长?

如何解决C中的严格别名?

在C中使用动态内存分配找到最小的负数

为什么双重打印与C中的float具有不同的大小时具有相同的值?

以前版本的tty_ldisc_ops.ioctl()是否也需要文件参数?

struct 上的OpenMP缩减

C语言编译阶段与翻译阶段的关系

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

进程已完成,退出代码为138 Clion

如何确保在C程序中将包含uft8字符的字符串正确写入MySQL?

是否需要包括<;errno.h>;才能使用perror?

为什么用非常数指针变量改变常量静态变量时会出现分段错误?

处理EPOLL_WAIT中的接收数据和连接关闭信号

将数组插入数组

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

从CentOS 7到Raspberry PI 2B的交叉编译-无法让LIBC和System Include标头一起工作

使用正则表达式获取字符串中标记的开始和结束

CS50 pset 5的皱眉脸正确地处理了大多数基本单词,并且拼写判断不区分大小写.

atoi函数最大长-长误差的再创造

如何用用户输入的多个字符串填充数组?