Hi guys!
So I have a 3D vector representing the direction a object is facing in my game engine, I calculate this direction by multiplying the objects rotation (which is a quaternion) by a vector which represents forwards (in my case: (0, 0, -1)). However the way I have modelled all the objects in my game engine is via a scene graph where each object can have a parent object. Each object has a local transformation which is relative to its parents transformation.
Each frame I recursively go though each object in the scene graph and calculate the transform matrix (posMatrix * rotMatrix * scaleMatrix) and save this for each object. In the case that the object is a child of another objects then i also multiply the transform matrix by the parents transform matrix, and I am able to get the correct hierarchy transformation in world space coordinates.
However I am having issues with calculating the direction a object is facing while maintaining the hierarchy. I found one solution which works but it is not very efficient, this was:
glm::quat Entity::getRotation(void)
{
if (parentEntity == NULL) {
return transform.getRotation();
} else {
return parentEntity->getRotation() * transform.getRotation();
}
}
glm::vec3 Entity::getDirection(void)
{
if (parentEntity == NULL) {
return transform.getDirection();
} else {
return getRotation() * glm::vec3(0, 0, -1);
}
}
I dont like this solution as I feel there must be a more efficient way to just reuse the parents world transformation matrix that I already calculate to transform this direction vector for me.
I have tried something like this, but it doesn't seem to work correctly:
glm::vec3 Transform::getDirection(void)
{
return getRotation() * glm::vec3(0, 0, -1);
}
glm::vec3 Entity::getDirection(void)
{
if (parentEntity == NULL) {
return transform.getDirection();
} else {
return glm::quat_cast(parentEntity->worldMatrix) * transform.getDirection();
}
}