You need to multiply your Model matrix. Because that is where model position, scaling and rotation should be (that’s why it’s called the model matrix).

All you need to do is (see here)

Model = glm::rotate(Model, angle_in_radians, glm::vec3(x, y, z)); // where x, y, z is axis of rotation (e.g. 0 1 0)

Note that to convert from degrees to radians, use glm::radians(degrees)

That takes the Model matrix and applies rotation on top of all the operations that are already in there. The other functions translate and scale do the same. That way it’s possible to combine many transformations in a single matrix.

note: earlier versions accepted angles in degrees. This is deprecated since 0.9.6

Model = glm::rotate(Model, angle_in_degrees, glm::vec3(x, y, z)); // where x, y, z is axis of rotation (e.g. 0 1 0)

GLM has good example of rotation : http://glm.g-truc.net/code.html

glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);

glm::mat4 ViewTranslate = glm::translate(

glm::mat4(1.0f),

glm::vec3(0.0f, 0.0f, -Translate)

);

glm::mat4 ViewRotateX = glm::rotate(

ViewTranslate,

Rotate.y,

glm::vec3(-1.0f, 0.0f, 0.0f)

);

glm::mat4 View = glm::rotate(

ViewRotateX,

Rotate.x,

glm::vec3(0.0f, 1.0f, 0.0f)

);

glm::mat4 Model = glm::scale(

glm::mat4(1.0f),

glm::vec3(0.5f)

);

glm::mat4 MVP = Projection * View * Model;

glUniformMatrix4fv(LocationMVP, 1, GL_FALSE, glm::value_ptr(MVP));