yxyx136
yxyx136

Reputation: 17

OpenGL vertex shader: weird matrix translation

I'm trying to move a triangle based on time using a matrix. But it does some weird stuff:

What it should do: move on the x-axis

What it does: The top point of the triangle is fixed and the other points seem to move around it in a circular movement and scale on the x, z axis (I'm still in 2d so I don't have depth).

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);
    ...

My vertex shader:

#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);
 }

I don't know what I did wrong, according to the tutorial the matrix attribute I've set to offset should change the x-translation.

Do you know what's my mistake?

Upvotes: 0

Views: 255

Answers (1)

BeyelerStudios
BeyelerStudios

Reputation: 4283

you are providing a row-major matrix, so you need to specify the transpose:

glUniformMatrix4fv(uniform_m_transform, 1, GL_TRUE, matrix);

Reference: glUniform, check the transpose parameter.

Upvotes: 4

Related Questions