GLSL/GLM: инициализация матрицы вращения не работает

Не дубликат этого вопроса, который касается математики за вращениями.

Основная цель моего кода - просто повернуть несколько точек вокруг оси z. Однако после попытки инициализации матрицы вращения с помощью glm::rotate(m4, a, v3) и проверки ее компонентов быстрый printf выдает примерно 1 800 000 000,0000000... для каждого элемента. Я считаю, что это не правильная функциональность. Код по сути:

int main(int argc, char **argv){
    InitGL(); // openGL, GLFW..
    CreateShaders();            // vertShader: "mat4 trans"-uniform
    GenerateTextures();

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

    uniTrans = glGetUniformLocation(shaderProgram, "trans");
    glm::mat4 trans;

    while(!glfwWindowShouldClose(window)){
        glClear(GL_COLOR_BUFFER_BIT);

        trans = glm::rotate(trans, glm::radians(180.0f), glm::vec3(0.0f, 0.0f, 1.0f));
        glUniformMatrix4fv(uniTrans, 1, GL_FALSE, glm::value_ptr(trans));

        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    CleanUp();
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}

Программа работает так, как задумано, когда матрица вращения не используется. Значения матрицы проверялись с помощью printf("%f", m[0][0]) и так далее. Вот вершинный шейдер, а также для полноты:

const GLchar *vertexSource = R"glsl(
#version 150 core
in vec2 position;
in vec3 color;
in vec2 texcoord;

out vec3 Color;
out vec2 Texcoord;

uniform mat4 trans;

void main(){
    Texcoord = texcoord;
    Color = color;
    gl_Position = trans * vec4(position, 0.0, 1.0);
}
)glsl";

Но опять же, я не думаю, что это шейдер. Есть идеи о том, с чего начать? Нет ошибок или даже предупреждений.

0 ответов

Другие вопросы по тегам