From 6dbe323018a43289230d2f36f4a112be88d85105 Mon Sep 17 00:00:00 2001 From: Kseninia Mikhaylova Date: Mon, 29 Jul 2024 09:53:44 +0300 Subject: [PATCH] add cler color admin --- front/src/components/Promo/env.vue | 51 +++++++++------- front/src/components/Promo/load_models.vue | 70 +++++++++++++++------- front/src/index.d.ts | 11 +++- 3 files changed, 84 insertions(+), 48 deletions(-) diff --git a/front/src/components/Promo/env.vue b/front/src/components/Promo/env.vue index 137a0b4..b5dcf1b 100644 --- a/front/src/components/Promo/env.vue +++ b/front/src/components/Promo/env.vue @@ -1,49 +1,56 @@ \ No newline at end of file diff --git a/front/src/components/Promo/load_models.vue b/front/src/components/Promo/load_models.vue index 32f04a2..a6a0b75 100644 --- a/front/src/components/Promo/load_models.vue +++ b/front/src/components/Promo/load_models.vue @@ -3,6 +3,7 @@ import { onMounted, onUnmounted, reactive, ref, watch } from 'vue'; import { Box3, CircleGeometry, Color, DoubleSide, Group, Mesh, MeshBasicMaterial, MeshStandardMaterial, + MeshStandardMaterialParameters, PlaneGeometry, SpriteMaterial, TextureLoader, Vector2, Vector3, } from 'three'; @@ -10,7 +11,6 @@ import { useTresContext, useSeek, useRenderLoop, useTexture } from '@tresjs/core import { useGLTF } from '@tresjs/cientos' import Env from './env.vue' -import PostProcess from './post_pocessing.vue' import { IMAGE_URL, SERVER_URL, } from '../../constants' import { usePromoSidebar } from '../../stores/promo_sidebar'; @@ -26,7 +26,15 @@ const sidebar = usePromoSidebar(); const sidebar_scene = usePromoScene() const { controls, camera, scene, raycaster, renderer } = useTresContext() const { seekByName, seekAllByName } = useSeek() -const envVars = reactive({}) as { hdr_gainmap?: string, hdr_json?: string, hdr_webp?: string } +const envVars = reactive({}) as { + focus: number, + hdr_gainmap?: string, + hdr_json?: string, + hdr_webp?: string, + clear_color?: string, + env_displacementmap?: string, + env_normalmap?: string +} const tiltShift = reactive({}) as { focus: number, aperture: number, maxblur: number } @@ -42,18 +50,11 @@ const loadModels = async () => { const res = await fetch(`${SERVER_URL}/api/obj/scene/${props.source}`) const raw_data = await res.json() as scene3D - envVars.hdr_gainmap = raw_data.hdr_gainmap ? `${IMAGE_URL}/${raw_data.hdr_gainmap}` : undefined - envVars.hdr_json = raw_data.hdr_json ? `${IMAGE_URL}/${raw_data.hdr_json}` : undefined - envVars.hdr_webp = raw_data.hdr_webp ? `${IMAGE_URL}/${raw_data.hdr_webp}` : undefined + envVars.focus = raw_data.min_distance * 1 + if (raw_data.env) { + Object.assign(envVars, raw_data.env) + } - tiltShift.focus = raw_data.min_distance * 1 - tiltShift.aperture = 0.1 - tiltShift.maxblur = 5 - - const c = new Color() - renderer.value.getClearColor(c) - // console.log(c, c.offsetHSL(0, 0, 10)) - // renderer.value.setClearColor(c.offsetHSL(10, 10, 10)) const data = raw_data.elements if (!controls.value) return; @@ -87,17 +88,41 @@ const loadModels = async () => { const clickable_areas = await res.json() clickable.value.push(...clickable_areas) } + + + let c = new Color() + if (envVars.clear_color) { + c = new Color(envVars.clear_color) + } else { + renderer.value.getClearColor(c) + } + const tex = {} as any + if (envVars.env_displacementmap) { tex.displacementMap = `${IMAGE_URL}/${envVars.env_displacementmap}` } + if (envVars.env_normalmap) { tex.normalMap = `${IMAGE_URL}/${envVars.env_normalmap}` } + let addTexture: any + if (Object.keys(tex).length) { + addTexture = await useTexture(tex) + } + + const mesh = { + color: c.offsetHSL(0, 0, -0.5), + displacementScale: envVars.focus, + roughness: 100, + side: DoubleSide + } as MeshStandardMaterialParameters + if (addTexture.displacementMap) { + mesh.displacementMap = addTexture.displacementMap + } else { + mesh.displacementMap = groundTexture.displacementMap + } + if (addTexture.normalMap) { + mesh.normalMap = addTexture.normalMap + } const ground = new Mesh( - new CircleGeometry(tiltShift.focus * 10, tiltShift.focus * 10), - new MeshStandardMaterial({ - color: c.offsetHSL(0, 0, -0.5), - displacementMap: groundTexture.displacementMap, - displacementScale: tiltShift.focus, - roughness: 100, - side: DoubleSide - }) + new CircleGeometry(envVars.focus * 10, envVars.focus * 10), + new MeshStandardMaterial(mesh) ) - ground.position.y = -0.33 * tiltShift.focus + ground.position.y = -0.33 * envVars.focus ground.rotateX(-Math.PI / 2) ground.name = "ground" models.value.push({ name: 'ground', modelFile: ground }) @@ -226,7 +251,6 @@ watch(() => sidebar_scene.list, () => {