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 :/