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(); } }