From 41fbe5443022c607adc338f3417a29a86a305370 Mon Sep 17 00:00:00 2001 From: Kseninia Mikhaylova Date: Tue, 27 Aug 2024 09:37:05 +0300 Subject: [PATCH] circle pointer --- front/public/pointer.glb | Bin 3992 -> 6304 bytes front/src/components/Promo/load_models.vue | 56 +++++++++------------ front/src/stores/raw_data.ts | 8 +++ 3 files changed, 31 insertions(+), 33 deletions(-) create mode 100644 front/src/stores/raw_data.ts diff --git a/front/public/pointer.glb b/front/public/pointer.glb index 8caf52d8bdc2a73071c8a4decaf90cdd5d28dddd..73d796e13cf7c4b4654ee2b5338e58ecb7742aae 100644 GIT binary patch literal 6304 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 ZUX`_9#rLSlZ7OD$+TEx8o0Vq|@PBuPLQntz diff --git a/front/src/components/Promo/load_models.vue b/front/src/components/Promo/load_models.vue index 732edb7..67cf20e 100644 --- a/front/src/components/Promo/load_models.vue +++ b/front/src/components/Promo/load_models.vue @@ -6,6 +6,7 @@ import { Vector2, Vector3, Object3D, MeshPhongMaterial, + CircleGeometry, } from 'three'; import { useTresContext, useSeek, useTexture, useLoop } from '@tresjs/core'; @@ -112,7 +113,7 @@ const loadModels = async () => { let { scene: loaded_scene } = await useGLTF(item.modelUrl) item.modelFile = loaded_scene item.name = element.name - + if (!element.is_enabled) { item.modelFile.visible = false } @@ -125,7 +126,7 @@ const loadModels = async () => { ) item.modelFile.children[0].updateMatrixWorld(true) } - + item.modelFile.updateMatrixWorld(true) models.value.push(item) @@ -186,12 +187,13 @@ const loadModels = async () => { const p = raw_data.min_distance * 0.05 - const point = pointer_pin.clone() + const point = new Mesh( + new CircleGeometry(p, 32), + new MeshPhongMaterial({ emissive: new Color(1, 1, 1), emissiveIntensity: 10 }) + ) point.rotateX(-0.5 * Math.PI) point.position.set(world_position.x, p * 3, world_position.z * 2) point.name = `${element.id}_clickable` - point.scale.set(p * 2, p * 2, p * 2) - point.material = new MeshPhongMaterial({ emissive: new Color(1, 1, 1), emissiveIntensity: 10 }) point.updateMatrixWorld() if (clickable_items.value.find(el => el.name == point.name)) continue @@ -229,20 +231,11 @@ const loadModels = async () => { (controls.value as any).autoRotate = false; } } -const lookAtCamera = (obj: Group) => { - if (!obj || !obj.children) { - return - } - obj.children.forEach((element: Object3D) => { - if (element && typeof element.lookAt == 'function' && camera.value) { - element.lookAt(obj.position.x, obj.position.y * Math.PI * -0.5, camera.value?.position.z) - } - }); -} + const { onAfterRender } = useLoop() onAfterRender(() => { clickable_refs.value.map(el => { - lookAtCamera(el.value[0]) + el.value[0].lookAt(camera.value?.position) }) if (controls.value) { if (timer.value == 0) { @@ -254,24 +247,21 @@ onAfterRender(() => { const openSidebar = (id: number) => { sidebar.open(id); - // const clickable = useClickable() - // const target = clickable.list.find(el => el.id == id) - // if (!target) return - // const el = seekByName(scene.value, target.object_name); - // if (el) { - // // (controls.value as any).maxDistance = 10; - // // (controls.value as any).minDistance = 1; - // const target_vector = new Vector3(); + const clickable = useClickable() + const target = clickable.list.find(el => el.id == id) + if (!target) return + const el = seekByName(scene.value, `${id}_clickable`); + console.log(el) + if (el) { + (controls.value as any).maxDistance = 10; + (controls.value as any).minDistance = 1; + const target_vector = new Vector3(); - // el.getWorldPosition(target_vector); - // (controls.value as any).target = target_vector; - // console.log(target_vector) - - // target_vector.copy( el.position ); - // el.localToWorld( target_vector ); - // console.log(target_vector) - // // (camera.value as any).lookAt(el) - // } + el.getWorldPosition(target_vector); + (controls.value as any).target = target_vector; + console.log(target_vector) + // (camera.value as any).lookAt(el) + } } loadModels() diff --git a/front/src/stores/raw_data.ts b/front/src/stores/raw_data.ts new file mode 100644 index 0000000..94977ef --- /dev/null +++ b/front/src/stores/raw_data.ts @@ -0,0 +1,8 @@ +import { defineStore } from 'pinia' +export const useRawData = defineStore('raw_data', { + state: () => { + return { + + } + }, +})