From 822ee7c81e42282da56a77fc00e42866030ef379 Mon Sep 17 00:00:00 2001 From: Kseninia Mikhaylova Date: Wed, 4 Sep 2024 14:17:08 +0300 Subject: [PATCH] lerp --- front/src/components/Promo/load_models.vue | 51 ++++++++++++++-------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/front/src/components/Promo/load_models.vue b/front/src/components/Promo/load_models.vue index 208ba1d..7023364 100644 --- a/front/src/components/Promo/load_models.vue +++ b/front/src/components/Promo/load_models.vue @@ -276,23 +276,30 @@ watch(() => sidebar.is_open && sidebar.id_clickable, () => { el.getWorldPosition(target_vector); // target_vector.y = raw_dataStore.data.min_distance > 50 ? raw_dataStore.data.min_distance / 10 : 1; + target_vector.setComponent(1, raw_dataStore.data.min_distance > 50 ? raw_dataStore.data.min_distance / 10 : 1) - const quaternion = new Quaternion(); - quaternion.setFromEuler(new Euler( - -45 * 1 * (Math.PI / 180), - 35 * 1 * (Math.PI / 180), - 35 * 1 * (Math.PI / 180) - )); + // const quaternion = new Quaternion(); + // quaternion.setFromEuler(new Euler( + // -45 * 1 * (Math.PI / 180), + // 35 * 1 * (Math.PI / 180), + // 35 * 1 * (Math.PI / 180) + // )); - set_moveto(smooth_rotate, quaternion) + // set_moveto(smooth_rotate, quaternion) + + const d = raw_dataStore.data.max_distance * 0.5; + const lerp_vector = new Vector3(0, 0, 0) + lerp_vector.lerpVectors(target_vector, camera.value?.position as Vector3, 0.5) + lerp_vector.setComponent(1, raw_dataStore.data.max_distance * 0.5) + if ( + camera.value?.position && camera.value?.position.distanceTo(lerp_vector) > raw_dataStore.data.max_distance * 0.5 || + camera.value?.position && camera.value?.position.distanceTo(target_vector) > 10 + ) { + set_moveto(smooth_target, new Vector3(lerp_vector.x, d, lerp_vector.z)) + set_moveto(smooth_move, lerp_vector) - const d = raw_dataStore.data.max_distance * 0.5 - if (camera.value?.position && camera.value?.position.distanceTo(new Vector3(d, d, d)) > 20) { set_moveto(temp_smooth_target, target_vector) set_moveto(temp_smooth_move, target_vector) - - set_moveto(smooth_target, new Vector3(0, 0, 0)) - set_moveto(smooth_move, new Vector3(d, d, d)) } else { set_moveto(smooth_target, target_vector) set_moveto(smooth_move, target_vector) @@ -322,17 +329,21 @@ onAfterRender(() => { { el: smooth_target, temp_el: temp_smooth_target, - f: () => (controls.value as any).target.lerp(smooth_target.value as Vector3, smooth_target.count < COUNT * 0.5 ? 0.15 : koef), + f: () => { + (controls.value as any).target.lerp(smooth_target.value as Vector3, 1 / smooth_target.count); + }, }, { el: smooth_move, temp_el: temp_smooth_move, - f: () => camera.value?.position.lerp(smooth_move.value as Vector3, smooth_move.count < COUNT * 0.5 ? 0.15 : koef), + f: () => { + camera.value?.position.lerp(smooth_move.value as Vector3, 1 / smooth_move.count); + }, }, { el: smooth_rotate, f: () => { - camera.value?.quaternion.slerp(smooth_rotate.value as Quaternion, koef); + camera.value?.quaternion.slerp(smooth_rotate.value as Quaternion, 1 / smooth_rotate.count); camera.value?.quaternion.normalize() } } @@ -342,9 +353,8 @@ onAfterRender(() => { timer.resetTimer(); element.f() element.el.count -= 1 - if (element.el.count == 0) { + if (element.el.count == 1) { set_moveto(element.el, undefined) - if (element.temp_el && element.temp_el.value) { set_moveto(element.el, element.temp_el.value) set_moveto(element.temp_el, undefined) @@ -357,8 +367,11 @@ onAfterRender(() => { const timer = useTimer() timer.timer_func = () => { if (timer.seconds_left == 0 && !(controls.value as any).autoRotate && (controls.value as any).enabled) { - gotoCenterAndDistance(); - sidebar.close(); + if (sidebar.is_open) { + sidebar.close(); + } else { + gotoCenterAndDistance(); + } (controls.value as any).autoRotate = true; (controls.value as any).autoRotateSpeed = 0.5;