# glm rotating quaternion in Y axis deforms object

I'm implementing my own game engine in C++ and I need help here,

I have a game object, its orientation property is a quaternion and I want to rotate it A degrees in the Y axis.

So, I have:

currentAngle += 0.01; // currentAngle is a member variable, so yes i initialized it
quat q(currentAngle, vec3(0, 1, 0));
myGameObject->SetOrientation(q);

GameObject::SetOrientation(quat q)
{
myOrientation  = q;
}


but as the game object rotates, it also gets scaled (deformed). So I checked how I am applying the transformation matrices

myModelMatrix = Math::CreateTransformationMatrix(
transformation->GetPosition(),
transformation->GetOrientation(),
transformation->GetScale());

mat4& Math::CreateTransformationMatrix(vec3&    translation, quat& orientation, vec3& scaleSize)
{

mat4 translate = glm::translate(glm::mat4(), translation);
mat4 rotate = glm::toMat4(orientation);
mat4 scale = glm::scale(glm::mat4(), scaleSize);

return  translate * rotate * scale;
}


but it looks ok (at least to me), I removed the scale matrix form the multiplication to check if somehow I was doing something with it. However, it didnt fix anything.

I also tried:

  quat q(currentAngle, vec3(0, 1, 0));
quat orientation = myGameObject->GetOrientation();
orientation  = orientation  *q;
myGameObject->SetOrientation(orientation);


But it didnt work either. I also checked the code in my shaders and I am positive is not the problem.

This is how I send the matrices to the shader:

glUseProgram(progarmId);1
glUniformMatrix4fv(uniforms[name], 1, GL_FALSE, glm::value_ptr(matrix));


I tried modifying the 3rd parameter to True and swapping the order of the projection view matrix multiplication and it didnt work either :/

So, guys ... any ideas what could I be doing wrong ? I'm out of ideas :/