From da2645aa0d740d4b9477b867c65d5838c5f7cdae Mon Sep 17 00:00:00 2001 From: Kseninia Mikhaylova Date: Fri, 16 Aug 2024 16:10:46 +0300 Subject: [PATCH] color --- front/src/components/Promo/load_models.vue | 33 +++++++++++++++++-- .../src/components/Promo/post_processing.vue | 25 ++++++++------ front/src/components/Promo/sidebar.vue | 2 +- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/front/src/components/Promo/load_models.vue b/front/src/components/Promo/load_models.vue index 1a851b3..fd20f21 100644 --- a/front/src/components/Promo/load_models.vue +++ b/front/src/components/Promo/load_models.vue @@ -29,7 +29,7 @@ const sidebar = usePromoSidebar(); const sidebar_scene = usePromoScene() const { controls, camera, scene, raycaster, renderer } = useTresContext() const { pause, resume } = useLoop() -const { seekByName, seekAllByName } = useSeek() +const { seekByName, seekAllByName, seek } = useSeek() const groundTexture = await useTexture({ displacementMap: '/ground_displacement.jpg', @@ -213,6 +213,7 @@ onAfterRender(() => { clickable_refs.value.map(el => { if (el.value[0].children[0] && typeof el.value[0].children[0].lookAt == 'function') { el.value[0].children[0].lookAt(camera.value?.position); + el.value[0].children[1].lookAt(camera.value?.position); // el.value[0].updateMatrixWorld() } }) @@ -223,6 +224,17 @@ onAfterRender(() => { } }) +let oldObj = [] +const passShader = (obj) => { + if (obj.isMesh) { + oldObj.push({ uuid: obj.uuid, color: obj.material.color }) + obj.material.color = new Color(1, 0, 0) + } else { + for (let c in obj.children) { + passShader(obj.children[c]) + } + } +} const openSidebar = (id: number) => { const target = clickable.value.find(el => el.id == id) if (!target) return @@ -236,6 +248,15 @@ const openSidebar = (id: number) => { } sidebar.setData(sidebar_data) sidebar.open() + + const elements = [ + seekByName(scene.value, target.name), + seekByName(scene.value, target.object_name), + ].filter(Boolean) + + elements.forEach((element) => { + passShader(element) + }) } loadModels() @@ -305,11 +326,19 @@ watch(() => sidebar_scene.list, () => { } }); }, { deep: true }) +watch(() => sidebar.is_open, () => { + if (sidebar.is_open == false) { + oldObj.forEach(el => { + const obj = seek(scene.value, 'uuid', el.uuid) + obj.material.color = el.color + }) + } +})