Вопрос [CRMP] Поворот камеры на координаты

Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
541
Реакции[?]
132
Поинты[?]
4K
Здарова, начал делать бота и столкнулся с такой проблемой, как правильно вычислять углы на которые нужно повернуть камеру.
Углы вычислил, но чтобы камера плавно поворачивалась, не удаётся сделать.
C++:
void Utils::TurnToCoord(const Vector3& target, const float& smooth) {
    Vector3 vecPosPlayer = sdk::LocalPlayer::getPosition();
    Vector2 vecAngCamera = sdk::camera::getAngle(), vecCalculate;
    float SmoothPitch = 0.f, SmoothYaw = 0.f;

    vecCalculate.x = std::atan2(-(target - vecPosPlayer).Length(), (target - vecPosPlayer).z) * 0.1f;
    vecCalculate.y = std::atan2(-(target - vecPosPlayer).y, -(target - vecPosPlayer).x);

    SmoothPitch = (vecCalculate.x - vecAngCamera.x) / smooth;
    float diffYaw = vecCalculate.y - vecAngCamera.y;

    if (diffYaw > M_PI) {
        diffYaw = (vecCalculate.y + ((diffYaw > 0.01f || diffYaw < -0.01f) ? vecAngCamera.y : -vecAngCamera.y));
        SmoothYaw = diffYaw / smooth;

        if (vecAngCamera.y < -0.01f && diffYaw > 0.01f)
            SmoothYaw = -SmoothYaw;
    }
    else if (diffYaw < -M_PI) {
        diffYaw = (vecCalculate.y + ((diffYaw > 0.01f || diffYaw < -0.01f) ? vecAngCamera.y : -vecAngCamera.y));
        SmoothYaw = diffYaw / smooth;

        if (vecAngCamera.y < -0.01f && diffYaw > 0.01f)
            SmoothYaw = -SmoothYaw;
    }
    else
        SmoothYaw = diffYaw / smooth;

    sdk::camera::SetVertical(vecAngCamera.x + SmoothPitch);
    sdk::camera::SetHorizontal(vecAngCamera.y + SmoothYaw);
}
На 24 точке видно, что персонаж начал кружиться по кругу, когда пытался дойти до неё
 
Сверху Снизу