Вопрос Как сделать плавную анимация приближение и отдаления 3 лица (лв)

..................................................
Участник
Статус
Оффлайн
Регистрация
13 Авг 2020
Сообщения
990
Реакции[?]
249
Поинты[?]
25K
Вроде бы в catware было, но где именно
 
I'm watching you
Участник
Статус
Оффлайн
Регистрация
7 Фев 2020
Сообщения
752
Реакции[?]
241
Поинты[?]
3K
можно подробнее?
ну в лв это вроде interpolate называется,но по сути что lerp что interpolate это линейная интерполяция (логично xD)
загугли в интернете,функция простая,всего 3 параметра
 
SLANG
Начинающий
Статус
Оффлайн
Регистрация
15 Май 2019
Сообщения
159
Реакции[?]
28
Поинты[?]
0
ну в лв это вроде interpolate называется,но по сути что lerp что interpolate это линейная интерполяция (логично xD)
загугли в интернете,функция простая,всего 3 параметра
он тебя спросил где это находится :CoolStoryBob: ,hooked_overrideview.cpp
 
Забаненный
Статус
Оффлайн
Регистрация
5 Май 2021
Сообщения
10
Реакции[?]
2
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну в лв это вроде interpolate называется,но по сути что lerp что interpolate это линейная интерполяция (логично xD)
загугли в интернете,функция простая,всего 3 параметра
что причем тут интерполяция ?
 
Арбитр
Продавец
Статус
Оффлайн
Регистрация
13 Июл 2018
Сообщения
1,528
Реакции[?]
1,637
Поинты[?]
280K
Спастить можешь из этого сурса. В легендваре имеется функция, которая позволяет сделать его плавным, не помню только как она там называется.
Еще такое третье лицо имеется в сурсе enrage(а)

Код:
void Visuals::ThirdpersonThink() {
    ang_t                          offset;
    vec3_t                         origin,forward;
    static CTraceFilterSimple_game filter {};
    CGameTrace                     tr;
    static float                   progress {};

    // for whatever reason overrideview also gets called from the main menu.
    if (!g_csgo.m_engine->IsInGame())
        return;

    // check if we have a local player and he is alive.
    bool alive = g_cl.m_local && g_cl.m_local->alive();

    // camera should be in thirdperson.
    if (m_thirdperson || !g_cl.m_processing) {

        // if alive and not in thirdperson already switch to thirdperson.
        if (alive && !g_csgo.m_input->m_camera_in_third_person) {
            g_csgo.m_input->m_camera_in_third_person = true;
        }

        // if dead and spectating in firstperson switch to thirdperson.
        else if (g_cl.m_local->m_iObserverMode() == 4) {

            // if in thirdperson, switch to firstperson.
            // we need to disable thirdperson to spectate properly.
            if (g_csgo.m_input->m_camera_in_third_person) {
                g_csgo.m_input->m_camera_in_third_person = false;
                g_csgo.m_input->m_camera_offset.z = 0.f;
            }

            g_cl.m_local->m_iObserverMode() = 5;
        }
    }

    // camera should be in firstperson.
    else if (g_csgo.m_input->m_camera_in_third_person) {

        // animate backwards.
        progress -= g_csgo.m_globals->m_frametime * 5.f + (progress / 100);

        // clamp.
        math::clamp(progress,0.f,1.f);
        g_csgo.m_input->m_camera_offset.z = g_cfg[XOR("misc_thirdperson_distance")].get< float >() * progress;

        // set to first person.
        if (!progress)
            g_csgo.m_input->m_camera_in_third_person = false;
    }

    // if after all of this we are still in thirdperson.
    if (g_csgo.m_input->m_camera_in_third_person) {
        // get camera angles.
        g_csgo.m_engine->GetViewAngles(offset);

        // get our viewangle's forward directional vector.
        math::AngleVectors(offset,&forward);

        // start the animation.
        if (m_thirdperson)
            progress += g_csgo.m_globals->m_frametime * 5.f + (progress / 100);

        // clamp.
        math::clamp(progress,0.f,1.f);

        // cam_idealdist convar.
        offset.z = g_cfg[XOR("misc_thirdperson_distance")].get< float >() * progress;

        // start pos.
        origin = g_cl.m_shoot_pos;

        // setup trace filter and trace.
        filter.SetPassEntity(g_cl.m_local);

        g_csgo.m_engine_trace->TraceRay(
            Ray(origin,origin - (forward * offset.z),{-16.f,-16.f,-16.f},{16.f,16.f,16.f}),
            MASK_NPCWORLDSTATIC,
            (ITraceFilter*) &filter,
            &tr
        );

        // adapt distance to travel time.
        math::clamp(tr.m_fraction,0.f,1.f);
        offset.z *= tr.m_fraction;

        // override camera angles.
        g_csgo.m_input->m_camera_offset = {offset.x,offset.y,offset.z};
    }

    // update the old value.
    m_old_thirdperson = m_thirdperson;
}
 
SLANG
Начинающий
Статус
Оффлайн
Регистрация
15 Май 2019
Сообщения
159
Реакции[?]
28
Поинты[?]
0
Спастить можешь из этого сурса. В легендваре имеется функция, которая позволяет сделать его плавным, не помню только как она там называется.
Еще такое третье лицо имеется в сурсе enrage(а)
Пожалуйста, авторизуйтесь для просмотра ссылки.

Код:
void Visuals::ThirdpersonThink() {
    ang_t                          offset;
    vec3_t                         origin,forward;
    static CTraceFilterSimple_game filter {};
    CGameTrace                     tr;
    static float                   progress {};

    // for whatever reason overrideview also gets called from the main menu.
    if (!g_csgo.m_engine->IsInGame())
        return;

    // check if we have a local player and he is alive.
    bool alive = g_cl.m_local && g_cl.m_local->alive();

    // camera should be in thirdperson.
    if (m_thirdperson || !g_cl.m_processing) {

        // if alive and not in thirdperson already switch to thirdperson.
        if (alive && !g_csgo.m_input->m_camera_in_third_person) {
            g_csgo.m_input->m_camera_in_third_person = true;
        }

        // if dead and spectating in firstperson switch to thirdperson.
        else if (g_cl.m_local->m_iObserverMode() == 4) {

            // if in thirdperson, switch to firstperson.
            // we need to disable thirdperson to spectate properly.
            if (g_csgo.m_input->m_camera_in_third_person) {
                g_csgo.m_input->m_camera_in_third_person = false;
                g_csgo.m_input->m_camera_offset.z = 0.f;
            }

            g_cl.m_local->m_iObserverMode() = 5;
        }
    }

    // camera should be in firstperson.
    else if (g_csgo.m_input->m_camera_in_third_person) {

        // animate backwards.
        progress -= g_csgo.m_globals->m_frametime * 5.f + (progress / 100);

        // clamp.
        math::clamp(progress,0.f,1.f);
        g_csgo.m_input->m_camera_offset.z = g_cfg[XOR("misc_thirdperson_distance")].get< float >() * progress;

        // set to first person.
        if (!progress)
            g_csgo.m_input->m_camera_in_third_person = false;
    }

    // if after all of this we are still in thirdperson.
    if (g_csgo.m_input->m_camera_in_third_person) {
        // get camera angles.
        g_csgo.m_engine->GetViewAngles(offset);

        // get our viewangle's forward directional vector.
        math::AngleVectors(offset,&forward);

        // start the animation.
        if (m_thirdperson)
            progress += g_csgo.m_globals->m_frametime * 5.f + (progress / 100);

        // clamp.
        math::clamp(progress,0.f,1.f);

        // cam_idealdist convar.
        offset.z = g_cfg[XOR("misc_thirdperson_distance")].get< float >() * progress;

        // start pos.
        origin = g_cl.m_shoot_pos;

        // setup trace filter and trace.
        filter.SetPassEntity(g_cl.m_local);

        g_csgo.m_engine_trace->TraceRay(
            Ray(origin,origin - (forward * offset.z),{-16.f,-16.f,-16.f},{16.f,16.f,16.f}),
            MASK_NPCWORLDSTATIC,
            (ITraceFilter*) &filter,
            &tr
        );

        // adapt distance to travel time.
        math::clamp(tr.m_fraction,0.f,1.f);
        offset.z *= tr.m_fraction;

        // override camera angles.
        g_csgo.m_input->m_camera_offset = {offset.x,offset.y,offset.z};
    }

    // update the old value.
    m_old_thirdperson = m_thirdperson;
}
C++:
void Thirdperson_Init(bool fakeducking, float progress) {
    /* our current fraction. */
    static float current_fraction = 0.0f;

    auto distance = ((float)g_cfg.misc.thirdperson_distance) * progress;
    Vector angles, inverse_angles;

    // get camera angles.
    m_engine()->GetViewAngles(angles);
    m_engine()->GetViewAngles(inverse_angles);

    // cam_idealdist convar.
    inverse_angles.z = distance;

    // set camera direction.
    Vector forward, right, up;
    math::angle_vectors(inverse_angles, &forward, &right, &up);


    // various fixes to camera when fakeducking.
    auto eye_pos = fakeducking ? g_ctx.local()->GetAbsOrigin() + m_gamemovement()->GetPlayerViewOffset(false) : g_ctx.local()->GetAbsOrigin() + g_ctx.local()->m_vecViewOffset();
    auto offset = eye_pos + forward * -distance + right + up;

    // setup trace filter and trace.
    CTraceFilterWorldOnly filter;
    trace_t tr;

    // tracing to camera angles.
    m_trace()->TraceRay(Ray_t(eye_pos, offset, Vector(-16.0f, -16.0f, -16.0f), Vector(16.0f, 16.0f, 16.0f)), 131083, &filter, &tr);

    // interpolate camera speed if something behind our camera.
    if (current_fraction > tr.fraction)
        current_fraction = tr.fraction;
    else if (current_fraction > 0.9999f)
        current_fraction = 1.0f;

    // adapt distance to travel time.
    current_fraction = math::interpolate(current_fraction, tr.fraction, m_globals()->m_frametime * 10.0f);
    angles.z = distance * current_fraction;

    // override camera angles.
    m_input()->m_vecCameraOffset = angles;
}
 
Web developer / designer
Пользователь
Статус
Оффлайн
Регистрация
15 Ноя 2020
Сообщения
411
Реакции[?]
124
Поинты[?]
2K
C++:
void Thirdperson_Init(bool fakeducking, float progress) {
    /* our current fraction. */
    static float current_fraction = 0.0f;

    auto distance = ((float)g_cfg.misc.thirdperson_distance) * progress;
    Vector angles, inverse_angles;

    // get camera angles.
    m_engine()->GetViewAngles(angles);
    m_engine()->GetViewAngles(inverse_angles);

    // cam_idealdist convar.
    inverse_angles.z = distance;

    // set camera direction.
    Vector forward, right, up;
    math::angle_vectors(inverse_angles, &forward, &right, &up);


    // various fixes to camera when fakeducking.
    auto eye_pos = fakeducking ? g_ctx.local()->GetAbsOrigin() + m_gamemovement()->GetPlayerViewOffset(false) : g_ctx.local()->GetAbsOrigin() + g_ctx.local()->m_vecViewOffset();
    auto offset = eye_pos + forward * -distance + right + up;

    // setup trace filter and trace.
    CTraceFilterWorldOnly filter;
    trace_t tr;

    // tracing to camera angles.
    m_trace()->TraceRay(Ray_t(eye_pos, offset, Vector(-16.0f, -16.0f, -16.0f), Vector(16.0f, 16.0f, 16.0f)), 131083, &filter, &tr);

    // interpolate camera speed if something behind our camera.
    if (current_fraction > tr.fraction)
        current_fraction = tr.fraction;
    else if (current_fraction > 0.9999f)
        current_fraction = 1.0f;

    // adapt distance to travel time.
    current_fraction = math::interpolate(current_fraction, tr.fraction, m_globals()->m_frametime * 10.0f);
    angles.z = distance * current_fraction;

    // override camera angles.
    m_input()->m_vecCameraOffset = angles;
}
под лв?
 
..................................................
Участник
Статус
Оффлайн
Регистрация
13 Авг 2020
Сообщения
990
Реакции[?]
249
Поинты[?]
25K
Web developer / designer
Пользователь
Статус
Оффлайн
Регистрация
15 Ноя 2020
Сообщения
411
Реакции[?]
124
Поинты[?]
2K
Сверху Снизу