OpenGL顶点着色器:奇怪的矩阵转换

OpenGL vertex shader: weird matrix translation

本文关键字:转换 顶点 OpenGL      更新时间:2023-10-16

我正在尝试使用矩阵基于时间移动三角形。但是它做了一些奇怪的事情:

它应该做什么:在x轴上移动

作用:三角形的顶部点是固定的,其他点似乎以圆形运动围绕它移动,并在x, z轴上缩放(我仍然在2d中,所以我没有深度)。

My c++ Code:

    ...
    GLfloat timeValue = glfwGetTime();
    GLfloat offset = (sin(timeValue  * 4) / 2);
    GLfloat matrix[16] = {
        1, 0, 0, offset,
        0, 1, 0, 0,
        0, 0, 1, 0,
        0, 0, 0, 1
    };
    GLuint uniform_m_transform = glGetUniformLocation(shader_program, "m_transform");
    glUniformMatrix4fv(uniform_m_transform, 1, GL_FALSE, matrix);
    ...

顶点着色器:

#version 330 core
 layout (location = 0) in vec3 position;
 layout (location = 1) in vec3 color;
 out vec3 ourColor;
 uniform mat4 m_transform;
 void main()
 {
     ourColor = color;
     gl_Position = m_transform * vec4(position, 1.0);
 }

我不知道我做错了什么,根据教程,矩阵属性我已经设置为偏移应该改变x平移。

你知道我错在哪里吗?

您正在提供一个行为主矩阵,因此您需要指定转置:

glUniformMatrix4fv(uniform_m_transform, 1, GL_TRUE, matrix);

参考:glUniform,检查转置参数