Вот некоторый псевдокод:
vec3 p = entity2->getPosition();
vec3 r = entity1->getPosition();
float xdistance = p[0] - r[0];
float ydistance = p[1] - r[1];
float zdistance = p[2] - r[2];
float xzdistance = sqrt(xdistance * xdistance + zdistance * zdistance);
entitity1->setHeading(atan2(xdistance, zdistance)); // rotation around y
entitity1->setPitch(-atan2(ydistance, xzdistance)); // rotation around x
entitity1->setBank(0); // rotation around z
Z-вращение установлено в 0, потому что это не может быть определено. Вы можете установить его свободно, если хотите.
Это работает в системе координат, где z обращено вперед, y вверх и x вправо. Если вы используете другую систему, возможно, вам придется настроить некоторые знаки.