Используй lerp,а сурс ты и сам назвалВроде бы в catware было, но где именно
можно подробнее?Используй lerp,а сурс ты и сам назвал
ну в лв это вроде interpolate называется,но по сути что lerp что interpolate это линейная интерполяция (логично xD)можно подробнее?
он тебя спросил где это находится ,hooked_overrideview.cppну в лв это вроде interpolate называется,но по сути что lerp что interpolate это линейная интерполяция (логично xD)
загугли в интернете,функция простая,всего 3 параметра
что причем тут интерполяция ?ну в лв это вроде interpolate называется,но по сути что lerp что interpolate это линейная интерполяция (логично xD)
загугли в интернете,функция простая,всего 3 параметра
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;
}
Спастить можешь из этого сурса. В легендваре имеется функция, которая позволяет сделать его плавным, не помню только как она там называется.
Еще такое третье лицо имеется в сурсе 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; }
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;
}
под лв?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; }
Да, это с пасты лвпод лв?
и как, плавно?)Да, это с пасты лв
Даи как, плавно?)
честно говоря, я не замечаю разницы между деф лв 3лицомДа
Пожалуйста, авторизуйтесь для просмотра ссылки.Скрытое содержимое
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz