# Shervanator

Member

4

129 Neutral

• Rank
Newbie
1. ## Calculating objects direction scene graph

Thanks got it!   I ended up doing this for anyone interested: glm::vec3 Entity::getDirection(void) { if (parentEntity == NULL) { return transform.getDirection(); } else { return glm::normalize(glm::vec3(parentEntity->worldMatrix * glm::vec4(transform.getDirection(), 0))); } } I think I made the mistake where my vectors representing directions did not have a 4th component of 0 and were being translated. Also I needed to normalise the vector as scaling was affecting the magnitude.
2. ## Calculating objects direction scene graph

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(); } }   Any help I could get would be very much appreciated!   Thanks!
3. ## Spherical coordinates for orbital motion

So any suggestions as to how I should go about manipulating phi and theta correctly to achieve the orbit in the second picture?