• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Гайд Расчет дистанции до противника | Distance to enemy calc

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
27 Дек 2022
Сообщения
27
Реакции
16
Продолжаем, пока-что пройдёмся по лайту. Сегодня расчет дистанции до противника
Для этого нам нужно:

Ну ёмаё, во первых - класс 3д вектора с функцией расчета дистанции в 3д пространстве:
C++:
Expand Collapse Copy
struct vec3 {
    float x, y, z;

    vec3()                                : x(0), y(0), z(0) {};
    vec3(float _x, float _y, float _z)    : x(_x), y(_y), z(_z) {};

    float distance(vec3 Pos) {
        return sqrtf(powf(Pos.x - x, 2) + powf(Pos.y - y, 2) + powf(Pos.z - z, 2));
    }
};


Далее - актуальные позиции локального игрока и вашего енеми, надеюсь вы успели спастить getboneposition с асфиксии:
Кстати индекс костей можете найти тут
C++:
Expand Collapse Copy
vec3 local_pos = local.pawn.get_bone_position(BONE_HEAD);
vec3 player_pos = player.pawn.get_bone_position(BONE_HEAD);


Подготовьте ваши извилины, потому что далее будут махинации, но не пугайтесь, это не на долго:
C++:
Expand Collapse Copy
float distance = local_pos.distance(player_pos); //Расчитываем расстояние в 3д пространстве
distance = distance / 100.f; //А тут вы можете ахуеть, но еденицы измерения
//                            что делают ваши вот эти каэсы не совпадает с тем чем вы меряете свой член

Кстати, я Русский :ru:
 
ты уж совсем для долбоебов если делаешь, то и добавь это:
Код:
Expand Collapse Copy
char buf[256];
sprintf_s(buf, "%d", distance);
ImGui::GetBackgroundDrawList()->AddText(pos, IM_COL32(255, 255, 255, 255), "%d FT", buf);
 
Ну и зачем эта кринжа на форуме с использованием powf чтоб ФПС побольше дропался. Ну если так хочешь полезное написать, ну хоть бы функцию быстрого квадратного корня дал
 
ты уж совсем для долбоебов если делаешь, то и добавь это:
Код:
Expand Collapse Copy
char buf[256];
sprintf_s(buf, "%d", distance);
ImGui::GetBackgroundDrawList()->AddText(pos, IM_COL32(255, 255, 255, 255), "%d FT", buf);
:whyRly:
Ну и зачем эта кринжа на форуме с использованием powf чтоб ФПС побольше бросался. Ну если так хочешь полезное написать, ну хоть бы функцию быстрого квадратного корня дал
О великий повелитель оптимизации допотопных высокоуровневых вычислений, извольте приклонить перед вами мою тупую бошку и извиниться
Ты думал я так напишу? За критику и обоснование оной спасибо, я переработаю кодик. А вот с уважением в твоей ситуации я бы ещё поработал
 
Следующий гайд о GetDistanceFromCenter.
Можешь так-то слить целиком сдк, а уже в следующем гайде целиком ентити класс
 
ты уж совсем для долбоебов если делаешь, то и добавь это:
Код:
Expand Collapse Copy
char buf[256];
sprintf_s(buf, "%d", distance);
ImGui::GetBackgroundDrawList()->AddText(pos, IM_COL32(255, 255, 255, 255), "%d FT", buf);
Ты же ну в курсе что твой код не отработает

Во первых:
C++:
Expand Collapse Copy
char buf[256];
sprintf_s(buf, "%d FT", distance);
ImGui::GetBackgroundDrawList()->AddText(pos, IM_COL32(255, 255, 255, 255), buf);

Но мы живем во время, когда уже придумали 20 плюсы:
C++:
Expand Collapse Copy
auto const distance = std::format("{} FT", distance);

ImGui::GetBackgroundDrawList()->AddText(pos, IM_COL32(255, 255, 255, 255), buf.c_str());
 
C++:
Expand Collapse Copy
vec3 local_pos = local.pawn.get_bone_position(BONE_HEAD);
vec3 player_pos = player.pawn.get_bone_position(BONE_HEAD);

К тому же зачем использовать позицию костей (хз как она в в вашем асфикси реализована) если можно заюзать так
C++:
Expand Collapse Copy
Vector3 getOriginPoistion() {
            return Memory::Read<Vector3>(Entity + NetVar::m_vOldOrigin);
        }
Или расчет идет на то что какому-то еблану понадобиться рассчитать расстояния от левого пальца руки игрока до левого мизинца правой ноги ентити?
 
C++:
Expand Collapse Copy
vec3 local_pos = local.pawn.get_bone_position(BONE_HEAD);
vec3 player_pos = player.pawn.get_bone_position(BONE_HEAD);

К тому же зачем использовать позицию костей (хз как она в в вашем асфикси реализована) если можно заюзать так
C++:
Expand Collapse Copy
Vector3 getOriginPoistion() {
            return Memory::Read<Vector3>(Entity + NetVar::m_vOldOrigin);
        }
Или расчет идет на то что какому-то еблану понадобиться рассчитать расстояния от левого пальца руки игрока до левого мизинца правой ноги ентити?
Нет, погрешность между любой частью тела и origin не превышает 1 метра так что можно использовать любой способ получения позиции
 
:whyRly:

О великий повелитель оптимизации допотопных высокоуровневых вычислений, извольте приклонить перед вами мою тупую бошку и извиниться
Ты думал я так напишу? За критику и обоснование оной спасибо, я переработаю кодик. А вот с уважением в твоей ситуации я бы ещё поработал
какое уважение парень, ты выкладываешь какую то хуетень, в которой сам разобраться не можешь
C++:
Expand Collapse Copy
double fastSqrt(double number, double tolerance = 1e-7) {    double x = number;    double root;        while (true) {        root = 0.5 * (x + number / x);        if (std::abs(root - x) < tolerance)            break;        x = root;    }        return root; }
можешь использовать это вместо sqrt если точность не так важна
 
какое уважение парень, ты выкладываешь какую то хуетень, в которой сам разобраться не можешь
C++:
Expand Collapse Copy
double fastSqrt(double number, double tolerance = 1e-7) {    double x = number;    double root;        while (true) {        root = 0.5 * (x + number / x);        if (std::abs(root - x) < tolerance)            break;        x = root;    }        return root; }
можешь использовать это вместо sqrt если точность не так важна
можешь использовать это вместо
:roflanEbalo:


акое уважение парень
спасибо за уважение, парень
 
Ты же ну в курсе что твой код не отработает

Во первых:
C++:
Expand Collapse Copy
char buf[256];
sprintf_s(buf, "%d FT", distance);
ImGui::GetBackgroundDrawList()->AddText(pos, IM_COL32(255, 255, 255, 255), buf);

Но мы живем во время, когда уже придумали 20 плюсы:
C++:
Expand Collapse Copy
auto const distance = std::format("{} FT", distance);

ImGui::GetBackgroundDrawList()->AddText(pos, IM_COL32(255, 255, 255, 255), buf.c_str());
в курсе, при дефолтном имгуи рендере, я просто как пример написал
 
C++:
Expand Collapse Copy
double fastSqrt(double number, double tolerance = 1e-7) { double x = number; double root; while (true) { root = 0.5 * (x + number / x); if (std::abs(root - x) < tolerance) break; x = root; } return root; }
можешь использовать это вместо sqrt если точность не так важна
Можно ещё быстрее сделать
 
Ну и зачем эта кринжа на форуме с использованием powf чтоб ФПС побольше дропался. Ну если так хочешь полезное написать, ну хоть бы функцию быстрого квадратного корня дал
какое уважение парень, ты выкладываешь какую то хуетень, в которой сам разобраться не можешь
C++:
Expand Collapse Copy
double fastSqrt(double number, double tolerance = 1e-7) {    double x = number;    double root;        while (true) {        root = 0.5 * (x + number / x);        if (std::abs(root - x) < tolerance)            break;        x = root;    }        return root; }
можешь использовать это вместо sqrt если точность не так важна
Ну надо же, какие люди! Два математических гения обсуждают оптимизацию.

х64 инструкция sqrt (и её аналоги для разных типов данных) выполняется собственно на аппаратном уровне. CPU имеют dedicated hardware units ( специально спроектированные для быстрого вычисления квадратного корня ), поэтому никакие программные реализации, будь то метод Ньютона, квейковский трюк или что-то ещё никогда не обгонят по скорости встроенную sqrt.

А насчёт powf проблема явно преувеличена, вряд ли вызов powf для возведения в квадрат дропает фпс. Современные компиляторы достаточно умны, чтобы заменить powf(x, 2) на x * x, но даже, если компилятор этого не сделает разница в производительности вряд ли будет заметна на фоне других вещей
Но имхо использовать powf(x, 2) вместо x * x - плохая практика, так как это сложнее, менее читабельно, и в редких случаях медленнее


В данном случае лучшая оптимизация – это отсутствие "оптимизации".
По моему можно вообще на видяхе такое вычеслять но не уверен, cuda math api
CUDA ядра это круто, модно все дела, но они про другое. Задержка на передачу данных туда-сюда сожрет весь профит. GPU – для больших массивов данных, а тут CPU быстрее справится ( намного, в сотни раз, может и больше )
 
Ну надо же, какие люди! Два математических гения обсуждают оптимизацию.

х64 инструкция sqrt (и её аналоги для разных типов данных) выполняется собственно на аппаратном уровне. CPU имеют dedicated hardware units ( специально спроектированные для быстрого вычисления квадратного корня ), поэтому никакие программные реализации, будь то метод Ньютона, квейковский трюк или что-то ещё никогда не обгонят по скорости встроенную sqrt.

А насчёт powf проблема явно преувеличена, вряд ли вызов powf для возведения в квадрат дропает фпс. Современные компиляторы достаточно умны, чтобы заменить powf(x, 2) на x * x, но даже, если компилятор этого не сделает разница в производительности вряд ли будет заметна на фоне других вещей
Но имхо использовать powf(x, 2) вместо x * x - плохая практика, так как это сложнее, менее читабельно, и в редких случаях медленнее


В данном случае лучшая оптимизация – это отсутствие "оптимизации".

CUDA ядра это круто, модно все дела, но они про другое. Задержка на передачу данных туда-сюда сожрет весь профит. GPU – для больших массивов данных, а тут CPU быстрее справится ( намного, в сотни раз, может и больше )

Конструктивно, практично, без агрессии.

Я уже на две трети тебя люблю, лайк?
 
  • Мне нравится
Реакции: mj12
Современные компиляторы достаточно умны, чтобы заменить powf(x, 2) на x * x
Надеюсь. А вот насчёт корня не согласен. Проводил замеры, быстрый квадратный корень оказался примерно в 2 раза быстрее чем std::sqrtf (x64 msvc release build). Проведу ещё раз, проверю, может я ошибся
 
бля вы бы еще оптимизацию sqrtf с квейка 3 взяли гении...
у вас процы давно развитились так, что оптимизации такого уровня тупо не нужны нахрен...

но вы продолжайте, за этим весело наблюдать
 
бля вы бы еще оптимизацию sqrtf с квейка 3 взяли гении...
у вас процы давно развитились так, что оптимизации такого уровня тупо не нужны нахрен...

но вы продолжайте, за этим весело наблюдать
время идёт, а они так и остались в 90-х :roflanPominki:
 

Похожие темы

Назад
Сверху Снизу