OpenGL旋转,顶点不起作用

时间:2014-06-17 15:15:53

标签: opengl rotation glm-math

我正在尝试使用着色器上的着色器进行旋转,这是我的着色器的代码:

"#version 150 core\n"
"in vec2 position;"
"in vec3 color;"
"out vec3 Color;"
"uniform mat4 rotation;"
"void main() {"
"   Color = color;"
"   gl_Position = rotation*vec4(position, 0.0, 2.0);"
"}";

我正在使用quat,这是产生matrice的代码并将其转储到着色器中:

glm::quat rotation(x,0.0,0.0,0.5); 
x+=0.001;
ctm = glm::mat4_cast(rotation);
    GLint matrix_loc;

// get from shader pointer to global data
    matrix_loc = glGetUniformLocation(shaderProgram, "rotation");
    if (matrix_loc == -1)
        std::cout << "pointer for rotation of shader not found" << matrix_loc <<  std::endl;
// put local data in shader :
    glUniformMatrix4fv(matrix_loc, 1, GL_FALSE, glm::value_ptr(ctm));

但是当它旋转时,对象变得越来越大,我知道每次迭代循环时我都不需要GetUniformLocation,但这是测试的代码。据我所知,GlUniformMatrix应该让旋转发生。在这些调用之后,我只是绘制我的顶点数组。

1 个答案:

答案 0 :(得分:1)

鉴于它仍在绘制,着色器中的rotation可能是一个有效的矩阵。如果它是制服的一个问题,它可能都是零,没有任何东西可以画。

正如@genpfault所说,ctm需要初始化:

ctm = glm::mat4_cast(rotation);

请参阅:Converting glm quaternion to rotation matrix and using it with opengl

此外,2.0中的vec4(position, 0.0, 2.0)不应该是1.0吗?