У меня есть два трехмерных вектора, содержащих данные о положении двух объектов в моей игре.Один из объектов должен повернуть свою камеру непосредственно к другому, основываясь на текущих позициях (настройки высоты тона / рыскания являются абсолютными, поэтому реально я могу игнорировать эти две переменные).Мне нужна помощь с математикой, честно говоря, я просто не могу найти что-нибудь о том, как сделать это правильно.
//An example in pseudocode
//(x, y, z)
Vector3 mychar = new Vector3(100, 100, 100);
Vector3 explosion = new Vector3(555, 1000, 300);
//(pitch, yaw)
Vector2 myRotation = new Vector2(0, 0); //Can assume this is always the case because the setting of rotation is absolute rather than relative
Vector2 expRotation = new Vector2(35, 14);
//The math I cant seem to figure out would be in this function
Vector2 newRotationj = GetRotationBetween(myRotation, mychar, explosion);
Вот что у меня есть, но у меня проблемы с вращением Y (этонаправление «вверх» и горизонт в 0 градусов) Случайно мой персонаж будет смотреть в зеркальном направлении по оси y (то есть, если объект находится на -20 ниже горизонта, это +20), но это только иногда, и я не вижу, где находится моя математиканеправильно.
float dx = posIt.x - posMe.x;
float dy = posIt.y - posMe.y;
float dz = posIt.z - posMe.z;
yaw = Convert.ToSingle(Math.Atan(dx / dz) * 180 / Math.PI);
pitch = Convert.ToSingle(Math.Atan(dy / dz) * 180 / Math.PI);